tor-browser

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

ucln_io.cpp (2317B)


      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_io.cpp
     11 *   encoding:   UTF-8
     12 *   tab size:   8 (not used)
     13 *   indentation:4
     14 *
     15 *   created on: 2006August11
     16 *   created by: George Rhoten
     17 */
     18 
     19 #include "unicode/utypes.h"
     20 #include "mutex.h"
     21 #include "ucln.h"
     22 #include "ucln_io.h"
     23 #include "uassert.h"
     24 
     25 #ifndef U_IO_IMPLEMENTATION
     26 #error U_IO_IMPLEMENTATION not set - must be set for all ICU source files in io/ - see https://unicode-org.github.io/icu/userguide/howtouseicu
     27 #endif
     28 
     29 
     30 /**  Auto-client */
     31 #define UCLN_TYPE UCLN_IO
     32 #include "ucln_imp.h"
     33 
     34 /* Leave this copyright notice here! It needs to go somewhere in this library. */
     35 static const char copyright[] = U_COPYRIGHT_STRING;
     36 
     37 static cleanupFunc *gCleanupFunctions[UCLN_IO_COUNT];
     38 
     39 static UBool U_CALLCONV io_cleanup()
     40 {
     41    int32_t libType = UCLN_IO_START;
     42 
     43    (void)copyright;  // Suppress unused variable warning.
     44    while (++libType<UCLN_IO_COUNT) {
     45        if (gCleanupFunctions[libType])
     46        {
     47            gCleanupFunctions[libType]();
     48            gCleanupFunctions[libType] = nullptr;
     49        }
     50    }
     51 #if !UCLN_NO_AUTO_CLEANUP && (defined(UCLN_AUTO_ATEXIT) || defined(UCLN_AUTO_LOCAL))
     52    ucln_unRegisterAutomaticCleanup();
     53 #endif
     54    return true;
     55 }
     56 
     57 void ucln_io_registerCleanup(ECleanupIOType type,
     58                               cleanupFunc *func) {
     59    U_ASSERT(UCLN_IO_START < type && type < UCLN_IO_COUNT);
     60    {
     61        icu::Mutex m;       // See ticket 10295 for discussion.
     62        ucln_registerCleanup(UCLN_IO, io_cleanup);
     63        if (UCLN_IO_START < type && type < UCLN_IO_COUNT) {
     64            gCleanupFunctions[type] = func;
     65        }
     66    }
     67 
     68 #if !UCLN_NO_AUTO_CLEANUP && (defined(UCLN_AUTO_ATEXIT) || defined(UCLN_AUTO_LOCAL))
     69    ucln_registerAutomaticCleanup();
     70 #endif
     71 }