Home | History | Annotate | Download | only in i18n
      1 /*
      2 ******************************************************************************
      3 *                                                                            *
      4 * Copyright (C) 2001-2014, International Business Machines                   *
      5 *                Corporation and others. All Rights Reserved.                *
      6 *                                                                            *
      7 ******************************************************************************
      8 *   file name:  ucln_in.cpp
      9 *   encoding:   US-ASCII
     10 *   tab size:   8 (not used)
     11 *   indentation:4
     12 *
     13 *   created on: 2001July05
     14 *   created by: George Rhoten
     15 */
     16 
     17 #include "ucln.h"
     18 #include "ucln_in.h"
     19 #include "mutex.h"
     20 #include "uassert.h"
     21 
     22 /**  Auto-client for UCLN_I18N **/
     23 #define UCLN_TYPE UCLN_I18N
     24 #include "ucln_imp.h"
     25 
     26 /* Leave this copyright notice here! It needs to go somewhere in this library. */
     27 static const char copyright[] = U_COPYRIGHT_STRING;
     28 
     29 static cleanupFunc *gCleanupFunctions[UCLN_I18N_COUNT];
     30 
     31 static UBool i18n_cleanup(void)
     32 {
     33     int32_t libType = UCLN_I18N_START;
     34     (void)copyright;   /* Suppress unused variable warning with clang. */
     35 
     36     while (++libType<UCLN_I18N_COUNT) {
     37         if (gCleanupFunctions[libType])
     38         {
     39             gCleanupFunctions[libType]();
     40             gCleanupFunctions[libType] = NULL;
     41         }
     42     }
     43 #if !UCLN_NO_AUTO_CLEANUP && (defined(UCLN_AUTO_ATEXIT) || defined(UCLN_AUTO_LOCAL))
     44     ucln_unRegisterAutomaticCleanup();
     45 #endif
     46     return TRUE;
     47 }
     48 
     49 void ucln_i18n_registerCleanup(ECleanupI18NType type,
     50                                cleanupFunc *func) {
     51     U_ASSERT(UCLN_I18N_START < type && type < UCLN_I18N_COUNT);
     52     {
     53         icu::Mutex m;   // See ticket 10295 for discussion.
     54         ucln_registerCleanup(UCLN_I18N, i18n_cleanup);
     55         if (UCLN_I18N_START < type && type < UCLN_I18N_COUNT) {
     56             gCleanupFunctions[type] = func;
     57         }
     58     }
     59 #if !UCLN_NO_AUTO_CLEANUP && (defined(UCLN_AUTO_ATEXIT) || defined(UCLN_AUTO_LOCAL))
     60     ucln_registerAutomaticCleanup();
     61 #endif
     62 }
     63 
     64