tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

ucln_in.cpp (2159B)


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