diff --git a/icu4c/source/common/putil.h b/icu4c/source/common/putil.h index 603885d3d51..6a623aad11e 100644 --- a/icu4c/source/common/putil.h +++ b/icu4c/source/common/putil.h @@ -135,8 +135,11 @@ U_CAPI char* U_EXPORT2 icu_tzname(int index); /* Get UTC (GMT) time measured in seconds since 0:00 on 1/1/70. */ U_CAPI int32_t U_EXPORT2 icu_getUTCtime(void); -/* Return the default data directory for this platform. See Locale. */ -U_CAPI const char* U_EXPORT2 icu_getDefaultDataDirectory(void); +/* Return the data directory for this platform. */ +U_CAPI const char* U_EXPORT2 u_getDataDirectory(void); + +/* Set the data directory. */ +U_CAPI void U_EXPORT2 u_setDataDirectory(const char *directory); /* Return the default codepage for this platform and locale */ U_CAPI const char* U_EXPORT2 icu_getDefaultCodepage(void); @@ -155,8 +158,25 @@ U_CAPI const char* U_EXPORT2 icu_getDefaultLocaleID(void); */ U_CAPI double U_EXPORT2 icu_nextDouble(double d, bool_t positive); +/* + * Filesystem file and path separator characters. + * Example: '/' and ':' on Unix, '\\' and ';' on Windows. + */ +#ifdef XP_MAC +# define U_FILE_SEP_CHAR ':' +# define U_PATH_SEP_CHAR ';' +# define U_FILE_SEP_STRING ":" +# define U_PATH_SEP_STRING ";" +#elif defined(WIN32) || defined(OS2) +# define U_FILE_SEP_CHAR '\\' +# define U_PATH_SEP_CHAR ';' +# define U_FILE_SEP_STRING "\\" +# define U_PATH_SEP_STRING ";" +#else +# define U_FILE_SEP_CHAR '/' +# define U_PATH_SEP_CHAR ':' +# define U_FILE_SEP_STRING "/" +# define U_PATH_SEP_STRING ":" #endif - - - +#endif diff --git a/icu4c/source/common/uloc.c b/icu4c/source/common/uloc.c index 3530fd88731..8c1c0658e59 100644 --- a/icu4c/source/common/uloc.c +++ b/icu4c/source/common/uloc.c @@ -65,7 +65,6 @@ static const UChar closeParen[] = { (UChar)0x0029 /* ( */, (UChar)0x0000}; static char* _defaultLocale = NULL; -static char* _dataDirectory = NULL; static char** _installedLocales = NULL; static int32_t _installedLocalesCount = 0; @@ -1166,28 +1165,11 @@ const char* const* uloc_getISOCountries() const char* uloc_getDataDirectory() { - if (_dataDirectory == NULL) - { - uloc_setDataDirectory(icu_getDefaultDataDirectory()); - } - return _dataDirectory; + return u_getDataDirectory(); } void uloc_setDataDirectory(const char* newDirectory) { - char* newDataDirectory = (char*) icu_malloc(sizeof(char)*(icu_strlen(newDirectory) + 1)); - icu_strcpy(newDataDirectory, newDirectory); - - { - umtx_lock(NULL); - - if(_dataDirectory != NULL) - icu_free(_dataDirectory); - _dataDirectory = newDataDirectory; - if(_installedLocales != NULL) - icu_free(_installedLocales); - _installedLocales = NULL; - umtx_unlock(NULL); - } + u_setDataDirectory(newDirectory); } diff --git a/icu4c/source/test/cintltst/cucdtst.c b/icu4c/source/test/cintltst/cucdtst.c index 1af0f6c826a..9baf39c40b9 100644 --- a/icu4c/source/test/cintltst/cucdtst.c +++ b/icu4c/source/test/cintltst/cucdtst.c @@ -320,7 +320,7 @@ void TestUnicodeData() const char *expectVersion = "3.0.0"; /* NOTE: this purposely breaks to force the tests to stay in sync with the unicodedata */ char expectString[256]; - strcpy(newPath,icu_getDefaultDataDirectory()); + strcpy(newPath, u_getDataDirectory()); strcat(newPath, "UnicodeData-"); strcat(newPath, expectVersion); strcat(newPath, ".txt"); diff --git a/icu4c/source/test/intltest/dtfmrgts.cpp b/icu4c/source/test/intltest/dtfmrgts.cpp index ae1903b3d19..bba744d07a7 100644 --- a/icu4c/source/test/intltest/dtfmrgts.cpp +++ b/icu4c/source/test/intltest/dtfmrgts.cpp @@ -430,7 +430,7 @@ void DateFormatRegressionTest::Test4065240() // Check to see if the resource is present; if not, we can't test ResourceBundle *bundle = new ResourceBundle( - icu_getDefaultDataDirectory(), *curLocale, status); + u_getDataDirectory(), *curLocale, status); failure(status, "new ResourceBundle"); //(UnicodeString) "java.text.resources.DateFormatZoneData", curLocale); diff --git a/icu4c/source/test/intltest/numrgts.cpp b/icu4c/source/test/intltest/numrgts.cpp index 37bc4396b70..eebd93db45b 100644 --- a/icu4c/source/test/intltest/numrgts.cpp +++ b/icu4c/source/test/intltest/numrgts.cpp @@ -1397,7 +1397,7 @@ void NumberFormatRegressionTest::Test4122840() for (int i = 0; i < count; i++) { UErrorCode status = U_ZERO_ERROR; ResourceBundle *rb = new ResourceBundle( - icu_getDefaultDataDirectory()/*"java.text.resources.LocaleElements"*/, + u_getDataDirectory()/*"java.text.resources.LocaleElements"*/, locales[i], status); failure(status, "new ResourceBundle"); // diff --git a/icu4c/source/test/intltest/ucdtest.cpp b/icu4c/source/test/intltest/ucdtest.cpp index 55ae14c9eae..cc21086048d 100644 --- a/icu4c/source/test/intltest/ucdtest.cpp +++ b/icu4c/source/test/intltest/ucdtest.cpp @@ -304,7 +304,7 @@ void UnicodeTest::TestUnicodeData() char path[256]; const char* datafile = "UnicodeData-3.0.0.txt"; - strcpy(path , icu_getDefaultDataDirectory()); + strcpy(path, u_getDataDirectory()); strcat(path, datafile); input = fopen( path, "r");