summaryrefslogtreecommitdiffstats
path: root/luni/src/main/native/ICU.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'luni/src/main/native/ICU.cpp')
-rw-r--r--luni/src/main/native/ICU.cpp33
1 files changed, 14 insertions, 19 deletions
diff --git a/luni/src/main/native/ICU.cpp b/luni/src/main/native/ICU.cpp
index 04f6631..7e05978 100644
--- a/luni/src/main/native/ICU.cpp
+++ b/luni/src/main/native/ICU.cpp
@@ -353,21 +353,6 @@ static jobjectArray getNames(JNIEnv* env, UResourceBundle* namesBundle, bool mon
return result;
}
-static jstring getIntCurrencyCode(JNIEnv* env, jstring locale) {
- ScopedUtfChars localeChars(env, locale);
-
- // Extract the 2-character country name.
- if (strlen(localeChars.c_str()) < 5) {
- return NULL;
- }
- if (localeChars[3] < 'A' || localeChars[3] > 'Z' || localeChars[4] < 'A' || localeChars[4] > 'Z') {
- return NULL;
- }
-
- char country[3] = { localeChars[3], localeChars[4], 0 };
- return ICU_getCurrencyCodeNative(env, NULL, env->NewStringUTF(country));
-}
-
static void setIntegerField(JNIEnv* env, jobject obj, const char* fieldName, int value) {
ScopedLocalRef<jobject> integerValue(env, integerValueOf(env, value));
jfieldID fid = env->GetFieldID(JniConstants::localeDataClass, fieldName, "Ljava/lang/Integer;");
@@ -506,7 +491,8 @@ static jboolean ICU_initLocaleDataImpl(JNIEnv* env, jclass, jstring locale, jobj
}
status = U_ZERO_ERROR;
- jstring internationalCurrencySymbol = getIntCurrencyCode(env, locale);
+ jstring countryCode = env->NewStringUTF(Locale::createFromName(localeName.c_str()).getCountry());
+ jstring internationalCurrencySymbol = ICU_getCurrencyCodeNative(env, NULL, countryCode);
jstring currencySymbol = NULL;
if (internationalCurrencySymbol != NULL) {
currencySymbol = ICU_getCurrencySymbolNative(env, NULL, locale, internationalCurrencySymbol);
@@ -563,10 +549,19 @@ static JNINativeMethod gMethods[] = {
NATIVE_METHOD(ICU, getISO3LanguageNative, "(Ljava/lang/String;)Ljava/lang/String;"),
NATIVE_METHOD(ICU, getISOCountriesNative, "()[Ljava/lang/String;"),
NATIVE_METHOD(ICU, getISOLanguagesNative, "()[Ljava/lang/String;"),
- NATIVE_METHOD(ICU, initLocaleDataImpl, "(Ljava/lang/String;Lcom/ibm/icu4jni/util/LocaleData;)Z"),
+ NATIVE_METHOD(ICU, initLocaleDataImpl, "(Ljava/lang/String;Llibcore/icu/LocaleData;)Z"),
NATIVE_METHOD(ICU, toLowerCase, "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"),
NATIVE_METHOD(ICU, toUpperCase, "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"),
};
-int register_com_ibm_icu4jni_util_ICU(JNIEnv* env) {
- return jniRegisterNativeMethods(env, "com/ibm/icu4jni/util/ICU", gMethods, NELEM(gMethods));
+int register_libcore_icu_ICU(JNIEnv* env) {
+ // Failures to find the ICU data tend to be somewhat obscure because ICU loads its data on first
+ // use, which can be anywhere. Force initialization up front so we can report a nice clear error
+ // and bail.
+ UErrorCode status = U_ZERO_ERROR;
+ u_init(&status);
+ if (status != U_ZERO_ERROR) {
+ LOGE("Couldn't initialize ICU: %s", u_errorName(status));
+ return -1;
+ }
+ return jniRegisterNativeMethods(env, "libcore/icu/ICU", gMethods, NELEM(gMethods));
}