|
1 /* |
|
2 ****************************************************************************** |
|
3 * * |
|
4 * Copyright (C) 2001-2013, International Business Machines * |
|
5 * Corporation and others. All Rights Reserved. * |
|
6 * * |
|
7 ****************************************************************************** |
|
8 * file name: ucln_io.c |
|
9 * encoding: US-ASCII |
|
10 * tab size: 8 (not used) |
|
11 * indentation:4 |
|
12 * |
|
13 * created on: 2006August11 |
|
14 * created by: George Rhoten |
|
15 */ |
|
16 |
|
17 #include "ucln.h" |
|
18 #include "ucln_io.h" |
|
19 #include "uassert.h" |
|
20 |
|
21 #ifndef U_IO_IMPLEMENTATION |
|
22 #error U_IO_IMPLEMENTATION not set - must be set for all ICU source files in io/ - see http://userguide.icu-project.org/howtouseicu |
|
23 #endif |
|
24 |
|
25 |
|
26 /** Auto-client */ |
|
27 #define UCLN_TYPE UCLN_IO |
|
28 #include "ucln_imp.h" |
|
29 |
|
30 /* Leave this copyright notice here! It needs to go somewhere in this library. */ |
|
31 static const char copyright[] = U_COPYRIGHT_STRING; |
|
32 |
|
33 static cleanupFunc *gCleanupFunctions[UCLN_IO_COUNT]; |
|
34 |
|
35 static UBool io_cleanup(void) |
|
36 { |
|
37 ECleanupIOType libType = UCLN_IO_START; |
|
38 |
|
39 while (++libType<UCLN_IO_COUNT) { |
|
40 if (gCleanupFunctions[libType]) |
|
41 { |
|
42 gCleanupFunctions[libType](); |
|
43 gCleanupFunctions[libType] = NULL; |
|
44 } |
|
45 } |
|
46 #if !UCLN_NO_AUTO_CLEANUP && (defined(UCLN_AUTO_ATEXIT) || defined(UCLN_AUTO_LOCAL)) |
|
47 ucln_unRegisterAutomaticCleanup(); |
|
48 #endif |
|
49 return TRUE; |
|
50 } |
|
51 |
|
52 void ucln_io_registerCleanup(ECleanupIOType type, |
|
53 cleanupFunc *func) |
|
54 { |
|
55 U_ASSERT(UCLN_IO_START < type && type < UCLN_IO_COUNT); |
|
56 ucln_registerCleanup(UCLN_IO, io_cleanup); |
|
57 if (UCLN_IO_START < type && type < UCLN_IO_COUNT) |
|
58 { |
|
59 gCleanupFunctions[type] = func; |
|
60 } |
|
61 |
|
62 #if !UCLN_NO_AUTO_CLEANUP && (defined(UCLN_AUTO_ATEXIT) || defined(UCLN_AUTO_LOCAL)) |
|
63 ucln_registerAutomaticCleanup(); |
|
64 #endif |
|
65 } |
|
66 |