1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 2b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru****************************************************************************** 3b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* * 4fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius* Copyright (C) 2001-2014, International Business Machines * 5b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Corporation and others. All Rights Reserved. * 6b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* * 7b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru****************************************************************************** 8b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* file name: ucln_io.c 9b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* encoding: US-ASCII 10b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* tab size: 8 (not used) 11b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* indentation:4 12b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 13b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* created on: 2006August11 14b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* created by: George Rhoten 15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/ 16b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 17b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "ucln.h" 18b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "ucln_io.h" 19b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "uassert.h" 20b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2183a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius#ifndef U_IO_IMPLEMENTATION 2283a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius#error U_IO_IMPLEMENTATION not set - must be set for all ICU source files in io/ - see http://userguide.icu-project.org/howtouseicu 2383a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius#endif 2483a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius 2583a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius 2650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/** Auto-client */ 2750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#define UCLN_TYPE UCLN_IO 2850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include "ucln_imp.h" 2950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 30b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* Leave this copyright notice here! It needs to go somewhere in this library. */ 31b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const char copyright[] = U_COPYRIGHT_STRING; 32b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 33b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic cleanupFunc *gCleanupFunctions[UCLN_IO_COUNT]; 34b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 35b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic UBool io_cleanup(void) 36b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 37b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ECleanupIOType libType = UCLN_IO_START; 38b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 39fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius (void)copyright; // Suppress unused variable warning. 40b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (++libType<UCLN_IO_COUNT) { 41b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (gCleanupFunctions[libType]) 42b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 43b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru gCleanupFunctions[libType](); 44b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru gCleanupFunctions[libType] = NULL; 45b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 46b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 4750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#if !UCLN_NO_AUTO_CLEANUP && (defined(UCLN_AUTO_ATEXIT) || defined(UCLN_AUTO_LOCAL)) 4850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ucln_unRegisterAutomaticCleanup(); 4950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#endif 50b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return TRUE; 51b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 52b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 53b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid ucln_io_registerCleanup(ECleanupIOType type, 54b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cleanupFunc *func) 55b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 56b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru U_ASSERT(UCLN_IO_START < type && type < UCLN_IO_COUNT); 57b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucln_registerCleanup(UCLN_IO, io_cleanup); 58b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (UCLN_IO_START < type && type < UCLN_IO_COUNT) 59b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 60b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru gCleanupFunctions[type] = func; 61b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 6250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 6350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#if !UCLN_NO_AUTO_CLEANUP && (defined(UCLN_AUTO_ATEXIT) || defined(UCLN_AUTO_LOCAL)) 6450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ucln_registerAutomaticCleanup(); 6550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#endif 66b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 67b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 68