16f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*
26f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org******************************************************************************
36f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*                                                                            *
46f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Copyright (C) 2001-2013, International Business Machines                   *
56f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*                Corporation and others. All Rights Reserved.                *
66f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*                                                                            *
76f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org******************************************************************************
86f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*   file name:  ucln_io.c
96f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*   encoding:   US-ASCII
106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*   tab size:   8 (not used)
116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*   indentation:4
126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*
136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*   created on: 2006August11
146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*   created by: George Rhoten
156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*/
166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "ucln.h"
186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "ucln_io.h"
196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "uassert.h"
206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifndef U_IO_IMPLEMENTATION
226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#error U_IO_IMPLEMENTATION not set - must be set for all ICU source files in io/ - see http://userguide.icu-project.org/howtouseicu
236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif
246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**  Auto-client */
276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define UCLN_TYPE UCLN_IO
286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "ucln_imp.h"
296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* Leave this copyright notice here! It needs to go somewhere in this library. */
316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic const char copyright[] = U_COPYRIGHT_STRING;
326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic cleanupFunc *gCleanupFunctions[UCLN_IO_COUNT];
346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic UBool io_cleanup(void)
366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    ECleanupIOType libType = UCLN_IO_START;
386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    while (++libType<UCLN_IO_COUNT) {
406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if (gCleanupFunctions[libType])
416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        {
426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            gCleanupFunctions[libType]();
436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            gCleanupFunctions[libType] = NULL;
446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if !UCLN_NO_AUTO_CLEANUP && (defined(UCLN_AUTO_ATEXIT) || defined(UCLN_AUTO_LOCAL))
476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    ucln_unRegisterAutomaticCleanup();
486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif
496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    return TRUE;
506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid ucln_io_registerCleanup(ECleanupIOType type,
536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                               cleanupFunc *func)
546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    U_ASSERT(UCLN_IO_START < type && type < UCLN_IO_COUNT);
566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    ucln_registerCleanup(UCLN_IO, io_cleanup);
576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (UCLN_IO_START < type && type < UCLN_IO_COUNT)
586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    {
596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        gCleanupFunctions[type] = func;
606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if !UCLN_NO_AUTO_CLEANUP && (defined(UCLN_AUTO_ATEXIT) || defined(UCLN_AUTO_LOCAL))
636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    ucln_registerAutomaticCleanup();
646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif
656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
67