/*
**********************************************************************
-* Copyright (C) 1997-2012,2014, International Business Machines
+* Copyright (C) 1997-2016, International Business Machines
* Corporation and others. All Rights Reserved.
**********************************************************************
*
* @return a UnicodeString object. If there is an error, string is bogus
* @stable ICU 2.0
*/
-inline UnicodeString
-ures_getUnicodeString(const UResourceBundle *resB,
- UErrorCode* status)
-{
+inline UnicodeString
+ures_getUnicodeString(const UResourceBundle *resB, UErrorCode* status) {
+ UnicodeString result;
int32_t len = 0;
const UChar *r = ures_getString(resB, &len, status);
- return UnicodeString(TRUE, r, len);
+ if(U_SUCCESS(*status)) {
+ result.setTo(TRUE, r, len);
+ } else {
+ result.setToBogus();
+ }
+ return result;
}
/**
* @return an UnicodeString object.
* @stable ICU 2.0
*/
-inline UnicodeString
-ures_getNextUnicodeString(UResourceBundle *resB,
- const char ** key,
- UErrorCode* status)
-{
+inline UnicodeString
+ures_getNextUnicodeString(UResourceBundle *resB, const char ** key, UErrorCode* status) {
+ UnicodeString result;
int32_t len = 0;
const UChar* r = ures_getNextString(resB, &len, key, status);
- return UnicodeString(TRUE, r, len);
+ if(U_SUCCESS(*status)) {
+ result.setTo(TRUE, r, len);
+ } else {
+ result.setToBogus();
+ }
+ return result;
}
/**
* @return an UnicodeString object. If there is an error, string is bogus
* @stable ICU 2.0
*/
-inline UnicodeString
-ures_getUnicodeStringByIndex(const UResourceBundle *resB,
- int32_t indexS,
- UErrorCode* status)
-{
+inline UnicodeString
+ures_getUnicodeStringByIndex(const UResourceBundle *resB, int32_t indexS, UErrorCode* status) {
+ UnicodeString result;
int32_t len = 0;
const UChar* r = ures_getStringByIndex(resB, indexS, &len, status);
- return UnicodeString(TRUE, r, len);
+ if(U_SUCCESS(*status)) {
+ result.setTo(TRUE, r, len);
+ } else {
+ result.setToBogus();
+ }
+ return result;
}
/**
* @return an UnicodeString object. If there is an error, string is bogus
* @stable ICU 2.0
*/
-inline UnicodeString
-ures_getUnicodeStringByKey(const UResourceBundle *resB,
- const char* key,
- UErrorCode* status)
-{
+inline UnicodeString
+ures_getUnicodeStringByKey(const UResourceBundle *resB, const char* key, UErrorCode* status) {
+ UnicodeString result;
int32_t len = 0;
const UChar* r = ures_getStringByKey(resB, key, &len, status);
- return UnicodeString(TRUE, r, len);
+ if(U_SUCCESS(*status)) {
+ result.setTo(TRUE, r, len);
+ } else {
+ result.setToBogus();
+ }
+ return result;
}
U_NAMESPACE_END
/********************************************************************
- * Copyright (c) 1997-2014, International Business Machines
+ * Copyright (c) 1997-2016, International Business Machines
* Corporation and others. All Rights Reserved.
********************************************************************/
}
}
}
+
+ // Check that ures_getUnicodeString() & variants return a bogus string if failure.
+ // Same relevant code path whether the failure code is passed in
+ // or comes from a lookup error.
+ UErrorCode failure = U_INTERNAL_PROGRAM_ERROR;
+ assertTrue("ures_getUnicodeString(failure).isBogus()",
+ ures_getUnicodeString(testCAPI, &failure).isBogus());
+ assertTrue("ures_getNextUnicodeString(failure).isBogus()",
+ ures_getNextUnicodeString(testCAPI, NULL, &failure).isBogus());
+ assertTrue("ures_getUnicodeStringByIndex(failure).isBogus()",
+ ures_getUnicodeStringByIndex(testCAPI, 999, &failure).isBogus());
+ assertTrue("ures_getUnicodeStringByKey(failure).isBogus()",
+ ures_getUnicodeStringByKey(testCAPI, "bogus key", &failure).isBogus());
+
ures_close(temp);
ures_close(rowbundle);
ures_close(bundle);