Index: icu46/source/common/ucln_cmn.c |
=================================================================== |
--- icu46/source/common/ucln_cmn.c (revision 0) |
+++ icu46/source/common/ucln_cmn.c (revision 0) |
@@ -0,0 +1,112 @@ |
+/* |
+****************************************************************************** |
+* Copyright (C) 2001-2010, International Business Machines |
+* Corporation and others. All Rights Reserved. |
+****************************************************************************** |
+* file name: ucln_cmn.c |
+* encoding: US-ASCII |
+* tab size: 8 (not used) |
+* indentation:4 |
+* |
+* created on: 2001July05 |
+* created by: George Rhoten |
+*/ |
+ |
+#include "unicode/utypes.h" |
+#include "unicode/uclean.h" |
+#include "utracimp.h" |
+#include "ustr_imp.h" |
+#include "ucln_cmn.h" |
+#include "umutex.h" |
+#include "ucln.h" |
+#include "cmemory.h" |
+#include "uassert.h" |
+ |
+/** Auto-client for UCLN_COMMON **/ |
+#define UCLN_TYPE UCLN_COMMON |
+#include "ucln_imp.h" |
+ |
+static cleanupFunc *gCommonCleanupFunctions[UCLN_COMMON_COUNT]; |
+static cleanupFunc *gLibCleanupFunctions[UCLN_COMMON]; |
+ |
+ |
+/* Enables debugging information about when a library is cleaned up. */ |
+#ifndef UCLN_DEBUG_CLEANUP |
+#define UCLN_DEBUG_CLEANUP 0 |
+#endif |
+ |
+ |
+#if defined(UCLN_DEBUG_CLEANUP) |
+#include <stdio.h> |
+#endif |
+ |
+static void ucln_cleanup_internal(ECleanupLibraryType libType) |
+{ |
+ if (gLibCleanupFunctions[libType]) |
+ { |
+ gLibCleanupFunctions[libType](); |
+ gLibCleanupFunctions[libType] = NULL; |
+ } |
+} |
+ |
+U_CAPI void U_EXPORT2 ucln_cleanupOne(ECleanupLibraryType libType) |
+{ |
+ if(libType==UCLN_COMMON) { |
+#if UCLN_DEBUG_CLEANUP |
+ fprintf(stderr, "Cleaning up: UCLN_COMMON with u_cleanup, type %d\n", (int)libType); |
+#endif |
+ u_cleanup(); |
+ } else { |
+#if UCLN_DEBUG_CLEANUP |
+ fprintf(stderr, "Cleaning up: using ucln_cleanup_internal, type %d\n", (int)libType); |
+#endif |
+ ucln_cleanup_internal(libType); |
+ } |
+} |
+ |
+ |
+U_CFUNC void |
+ucln_common_registerCleanup(ECleanupCommonType type, |
+ cleanupFunc *func) |
+{ |
+ U_ASSERT(UCLN_COMMON_START < type && type < UCLN_COMMON_COUNT); |
+ if (UCLN_COMMON_START < type && type < UCLN_COMMON_COUNT) |
+ { |
+ gCommonCleanupFunctions[type] = func; |
+ } |
+#if !UCLN_NO_AUTO_CLEANUP && (defined(UCLN_AUTO_ATEXIT) || defined(UCLN_AUTO_LOCAL)) |
+ ucln_registerAutomaticCleanup(); |
+#endif |
+} |
+ |
+U_CAPI void U_EXPORT2 |
+ucln_registerCleanup(ECleanupLibraryType type, |
+ cleanupFunc *func) |
+{ |
+ U_ASSERT(UCLN_START < type && type < UCLN_COMMON); |
+ if (UCLN_START < type && type < UCLN_COMMON) |
+ { |
+ gLibCleanupFunctions[type] = func; |
+ } |
+} |
+ |
+U_CFUNC UBool ucln_lib_cleanup(void) { |
+ ECleanupLibraryType libType = UCLN_START; |
+ ECleanupCommonType commonFunc = UCLN_COMMON_START; |
+ |
+ for (libType++; libType<UCLN_COMMON; libType++) { |
+ ucln_cleanup_internal(libType); |
+ } |
+ |
+ for (commonFunc++; commonFunc<UCLN_COMMON_COUNT; commonFunc++) { |
+ if (gCommonCleanupFunctions[commonFunc]) |
+ { |
+ gCommonCleanupFunctions[commonFunc](); |
+ gCommonCleanupFunctions[commonFunc] = NULL; |
+ } |
+ } |
+#if !UCLN_NO_AUTO_CLEANUP && (defined(UCLN_AUTO_ATEXIT) || defined(UCLN_AUTO_LOCAL)) |
+ ucln_unRegisterAutomaticCleanup(); |
+#endif |
+ return TRUE; |
+} |
Property changes on: icu46/source/common/ucln_cmn.c |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |