ICU-2704 Use a smaller and faster way to get the list of available locales.

X-SVN-Rev: 11147
This commit is contained in:
George Rhoten 2003-02-25 01:49:34 +00:00
parent 493644061a
commit 67725ff09d
3 changed files with 8 additions and 26 deletions

View File

@ -1295,19 +1295,13 @@ uloc_countAvailable()
UBool uloc_cleanup(void) { UBool uloc_cleanup(void) {
char ** temp; char ** temp;
int32_t localeCount;
int32_t i;
if (_installedLocales) { if (_installedLocales) {
temp = _installedLocales; temp = _installedLocales;
_installedLocales = NULL; _installedLocales = NULL;
localeCount = _installedLocalesCount;
_installedLocalesCount = 0; _installedLocalesCount = 0;
for (i = 0; i < localeCount; i++) {
uprv_free(temp[i]);
}
uprv_free(temp); uprv_free(temp);
} }
return TRUE; return TRUE;
@ -1318,10 +1312,8 @@ static void _lazyEvaluate_installedLocales()
UResourceBundle *index = NULL; UResourceBundle *index = NULL;
UResourceBundle installed; UResourceBundle installed;
UErrorCode status = U_ZERO_ERROR; UErrorCode status = U_ZERO_ERROR;
const UChar *lname;
char ** temp; char ** temp;
int32_t i = 0; int32_t i = 0;
int32_t len = 0;
int32_t localeCount; int32_t localeCount;
ures_initStackObject(&installed); ures_initStackObject(&installed);
@ -1334,13 +1326,9 @@ static void _lazyEvaluate_installedLocales()
ures_resetIterator(&installed); ures_resetIterator(&installed);
while(ures_hasNext(&installed)) { while(ures_hasNext(&installed)) {
lname = ures_getNextString(&installed, &len, NULL, &status); ures_getNextString(&installed, NULL, &temp[i++], &status);
temp[i] = (char*) uprv_malloc(sizeof(char) * (len + 1));
u_UCharsToChars(lname, temp[i], len);
temp[i][len] = 0; /* Terminate the string */
i++;
} }
temp[i] = NULL;
umtx_lock(NULL); umtx_lock(NULL);
if (_installedLocales == NULL) if (_installedLocales == NULL)
@ -1348,9 +1336,6 @@ static void _lazyEvaluate_installedLocales()
_installedLocales = temp; _installedLocales = temp;
_installedLocalesCount = localeCount; _installedLocalesCount = localeCount;
} else { } else {
for (i = 0; i < localeCount; i++) {
uprv_free(temp[i]);
}
uprv_free(temp); uprv_free(temp);
} }
umtx_unlock(NULL); umtx_unlock(NULL);

View File

@ -146,7 +146,7 @@ include $(LOCSRCDIR)/resfiles.mk
-include $(LOCSRCDIR)/reslocal.mk -include $(LOCSRCDIR)/reslocal.mk
RES_SOURCE= root.txt $(GENRB_SOURCE) $(GENRB_ALIAS_SOURCE) $(GENRB_SOURCE_LOCAL) RES_SOURCE= root.txt $(GENRB_SOURCE) $(GENRB_ALIAS_SOURCE) $(GENRB_SOURCE_LOCAL)
RES_SRC_FILES = $(RES_SOURCE:%=$(LOCSRCDIR)/%) RES_SRC_FILES = $(RES_SOURCE:%=$(LOCSRCDIR)/%)
INSTALLED_RB_FILES = $(GENRB_SOURCE:%.txt=%,) $(GENRB_SOURCE_LOCAL:%.txt=%,) INSTALLED_RB_FILES = $(GENRB_SOURCE:%.txt=%) $(GENRB_SOURCE_LOCAL:%.txt=%)
GENRBOPTS=-k -q GENRBOPTS=-k -q
## TRNS files ## TRNS files
@ -248,9 +248,9 @@ $(BUILDDIR)/res_index.txt: $(SRCLISTDEPS)
$(RMV) $@; \ $(RMV) $@; \
echo "// Warning this file is automatically generated" > $@; \ echo "// Warning this file is automatically generated" > $@; \
echo "res_index {" >> $@; \ echo "res_index {" >> $@; \
echo " InstalledLocales:array {" >> $@; \ echo " InstalledLocales {" >> $@; \
for file in $(INSTALLED_RB_FILES); do \ for file in $(INSTALLED_RB_FILES); do \
echo " $$file" >> $@; \ echo " $$file {\"\"}" >> $@; \
done; \ done; \
echo " }" >> $@; \ echo " }" >> $@; \
echo "}" >> $@; echo "}" >> $@;

View File

@ -192,9 +192,6 @@ GENRB_SOURCE=$(GENRB_SOURCE) $(GENRB_SOURCE_LOCAL)
RB_FILES = root.res $(GENRB_ALIAS_SOURCE:.txt=.res) $(GENRB_SOURCE:.txt=.res) RB_FILES = root.res $(GENRB_ALIAS_SOURCE:.txt=.res) $(GENRB_SOURCE:.txt=.res)
# The installed locales don't have aliased locales
INSTALLED_RB_FILES = $(GENRB_SOURCE:.txt=,)
# Read list of transliterator resource bundle files # Read list of transliterator resource bundle files
!IF EXISTS("$(ICUSRCDATA)\$(ICUTRNS)\trnsfiles.mk") !IF EXISTS("$(ICUSRCDATA)\$(ICUTRNS)\trnsfiles.mk")
!INCLUDE "$(ICUSRCDATA)\$(ICUTRNS)\trnsfiles.mk" !INCLUDE "$(ICUSRCDATA)\$(ICUTRNS)\trnsfiles.mk"
@ -347,9 +344,9 @@ CLEAN : GODATA
@echo Generating <<res_index.txt @echo Generating <<res_index.txt
// Warning this file is automatically generated // Warning this file is automatically generated
res_index { res_index {
InstalledLocales:array { InstalledLocales {
$(INSTALLED_RB_FILES:, =, $(GENRB_SOURCE:.txt= {""}
) )
} }
} }
<<KEEP <<KEEP