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