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