ICU-770 More data cleanup

X-SVN-Rev: 5651
This commit is contained in:
George Rhoten 2001-08-31 02:14:47 +00:00
parent 48538860fd
commit 8f2c4bfb65
10 changed files with 86 additions and 27 deletions

View File

@ -780,6 +780,10 @@ InputPath=.\unicode\uclean.h
# End Source File
# Begin Source File
SOURCE=.\ucln.h
# End Source File
# Begin Source File
SOURCE=.\ucln_cmn.h
# End Source File
# Begin Source File

View File

@ -72,6 +72,7 @@
#include "cstring.h"
#include "filestrm.h"
#include "locmap.h"
#include "ucln_cmn.h"
/* include system headers */
#ifdef WIN32
@ -860,22 +861,25 @@ uprv_tzname(int n)
/* Get and set the ICU data directory --------------------------------------- */
static UBool
gHaveDataDirectory=FALSE;
static char *gDataDirectory = NULL;
static const char *gDataDirectory = "";
UBool putil_cleanup(void)
{
if (gDataDirectory) {
uprv_free(gDataDirectory);
}
return TRUE;
}
/*
* Set the data directory.
* Make a copy of the passed string, and set the global data dir to point to it.
* Deliberately leak any previously set string, on the chance that some code
* may have called getDataDirectory() and still be using the old string.
*/
U_CAPI void U_EXPORT2
u_setDataDirectory(const char *directory) {
char *newDataDir;
if(directory!=NULL && *directory != 0) {
if(directory!=NULL) {
int length=uprv_strlen(directory);
newDataDir = (char *)uprv_malloc(length + 2);
uprv_strcpy(newDataDir, directory);
@ -884,16 +888,15 @@ u_setDataDirectory(const char *directory) {
newDataDir[length] = 0;
}
umtx_lock(NULL);
if (gDataDirectory) {
uprv_free(gDataDirectory);
}
gDataDirectory = newDataDir;
gHaveDataDirectory=TRUE;
umtx_unlock(NULL);
}
}
/* #include <stdio.h> */
/* #include <unistd.h> */
#if HAVE_DLOPEN
#define LIB_PREFIX "lib"
#else
@ -906,7 +909,7 @@ u_getDataDirectory(void) {
char pathBuffer[1024];
/* if we have the directory, then return it immediately */
if(gHaveDataDirectory) {
if(gDataDirectory) {
return gDataDirectory;
}
@ -997,6 +1000,11 @@ u_getDataDirectory(void) {
}
# endif
if(path==NULL) {
/* It looks really bad, set it to something. */
path = "";
}
u_setDataDirectory(path);
return gDataDirectory;
}

View File

@ -27,6 +27,7 @@
#include "cmemory.h"
#include "cstring.h"
#include "ustr_imp.h"
#include "ucln_cmn.h"
/*
* Since genprops overrides the general category for some control codes,
@ -266,6 +267,19 @@ isAcceptable(void *context,
}
}
UBool
uchar_cleanup()
{
if (propsData) {
udata_close(propsData);
propsData = NULL;
}
propsTable = NULL;
ucharsTable = NULL;
havePropsData = FALSE;
return TRUE;
}
static int8_t
loadPropsData() {
/* load Unicode character properties data from file if necessary */

View File

@ -21,6 +21,7 @@
typedef enum ECleanupLibraryType {
UCLN_START = -1,
UCLN_CUSTOM, /* Custom is for anyone else. */
UCLN_LAYOUT,
UCLN_USTDIO,
UCLN_I18N,

View File

@ -46,11 +46,15 @@ void u_cleanup(void)
}
}
/*unorm_cleanup();*/
unames_cleanup();
uchar_cleanup();
uloc_cleanup();
ustring_cleanup();
ucnv_cleanup();
ucnv_io_cleanup();
ures_cleanup();
udata_cleanup();
putil_cleanup();
}

View File

@ -21,8 +21,12 @@
/* These are the cleanup functions for various APIs. */
U_CFUNC UBool unames_cleanup(void);
U_CFUNC UBool unorm_cleanup(void);
U_CFUNC UBool uchar_cleanup(void);
U_CFUNC UBool uloc_cleanup(void);
U_CFUNC UBool ustring_cleanup(void);
@ -35,4 +39,6 @@ U_CFUNC UBool ures_cleanup(void);
U_CFUNC UBool udata_cleanup(void);
U_CFUNC UBool putil_cleanup(void);
#endif

View File

@ -1231,20 +1231,26 @@ UBool uloc_cleanup(void) {
int32_t localeCount;
int32_t i;
umtx_lock(NULL);
if (_installedLocales) {
temp = _installedLocales;
_installedLocales = NULL;
temp = _installedLocales;
_installedLocales = NULL;
localeCount = _installedLocalesCount;
_installedLocalesCount = 0;
localeCount = _installedLocalesCount;
_installedLocalesCount = 0;
umtx_unlock(NULL);
for (i = 0; i < localeCount; i++) {
uprv_free(temp[i]);
for (i = 0; i < localeCount; i++) {
uprv_free(temp[i]);
}
uprv_free(temp);
}
if (_isoCountries) {
uprv_free(_isoCountries);
_isoCountries = NULL;
}
if (_isoLanguages) {
uprv_free(_isoLanguages);
_isoLanguages = NULL;
}
uprv_free(temp);
return TRUE;
}

View File

@ -286,6 +286,19 @@ u_enumCharNames(UChar32 start, UChar32 limit,
/* implementation ----------------------------------------------------------- */
UBool
unames_cleanup()
{
if(uCharNamesData) {
udata_close(uCharNamesData);
uCharNamesData = NULL;
}
if(uCharNames) {
uCharNames = NULL;
}
return TRUE;
}
static UBool
isDataLoaded(UErrorCode *pErrorCode) {
/* load UCharNames from file if necessary */

View File

@ -17,12 +17,15 @@
#include "ucln.h"
#include "ucln_in.h"
UBool i18n_cleanup(void)
static UBool i18n_cleanup(void)
{
ucol_bld_cleanup();
ucol_cleanup();
timeZone_cleanup();
return TRUE;
}
void i18n_registerCleanup()
void ucln_i18n_registerCleanup()
{
ucln_registerCleanup(UCLN_I18N, i18n_cleanup);
}

View File

@ -20,7 +20,7 @@
#include "unicode/utypes.h"
/* Main library cleanup function. */
U_CFUNC void i18n_registerCleanup(void);
U_CFUNC void ucln_i18n_registerCleanup(void);
U_CFUNC UBool ucol_cleanup(void);