blob: 431d43161e760c860e7c0f9f32f8e1a938073086 [file] [log] [blame]
Jungshik Shin (jungshik at google)0f8746a2015-01-08 15:46:45 -08001/*
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. */
27static const char copyright[] = U_COPYRIGHT_STRING;
28
29static cleanupFunc *gCleanupFunctions[UCLN_I18N_COUNT];
30
31static 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
49void 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