status = U_ZERO_ERROR;
uloc_getLanguage(loc_str, lang, ULOC_LANG_CAPACITY, &status);
- if (U_FAILURE(status))
+ if (U_FAILURE(status) || status == U_STRING_NOT_TERMINATED_WARNING)
{
ereport(ERROR,
(errmsg("could not get language from locale \"%s\": %s",
* Pretend the error came from ucol_open(), for consistent error
* message across ICU versions.
*/
- if (U_FAILURE(status))
+ if (U_FAILURE(status) || status == U_STRING_NOT_TERMINATED_WARNING)
{
ucol_close(collator);
ereport(ERROR,
status = U_ZERO_ERROR;
len_result = ucnv_fromUChars(icu_converter, *result, len_result + 1,
buff_uchar, len_uchar, &status);
- if (U_FAILURE(status))
+ if (U_FAILURE(status) ||
+ status == U_STRING_NOT_TERMINATED_WARNING)
ereport(ERROR,
(errmsg("%s failed: %s", "ucnv_fromUChars",
u_errorName(status))));
icu_locale_id = palloc(len + 1);
*status = U_ZERO_ERROR;
len = uloc_canonicalize(loc, icu_locale_id, len + 1, status);
- if (U_FAILURE(*status))
+ if (U_FAILURE(*status) || *status == U_STRING_NOT_TERMINATED_WARNING)
return;
lower_str = asc_tolower(icu_locale_id, strlen(icu_locale_id));
pfree(lower_str);
}
-
#endif
/*
status = U_ZERO_ERROR;
uloc_getLanguage(loc_str, lang, ULOC_LANG_CAPACITY, &status);
- if (U_FAILURE(status))
+ if (U_FAILURE(status) || status == U_STRING_NOT_TERMINATED_WARNING)
{
if (elevel > 0)
ereport(elevel,
langtag = palloc(buflen);
while (true)
{
- int32_t len;
-
status = U_ZERO_ERROR;
- len = uloc_toLanguageTag(loc_str, langtag, buflen, strict, &status);
+ uloc_toLanguageTag(loc_str, langtag, buflen, strict, &status);
- /*
- * If the result fits in the buffer exactly (len == buflen),
- * uloc_toLanguageTag() will return success without nul-terminating
- * the result. Check for either U_BUFFER_OVERFLOW_ERROR or len >=
- * buflen and try again.
- */
+ /* try again if the buffer is not large enough */
if ((status == U_BUFFER_OVERFLOW_ERROR ||
- (U_SUCCESS(status) && len >= buflen)) &&
+ status == U_STRING_NOT_TERMINATED_WARNING) &&
buflen < MaxAllocSize)
{
buflen = Min(buflen * 2, MaxAllocSize);
/* validate that we can extract the language */
status = U_ZERO_ERROR;
uloc_getLanguage(loc_str, lang, ULOC_LANG_CAPACITY, &status);
- if (U_FAILURE(status))
+ if (U_FAILURE(status) || status == U_STRING_NOT_TERMINATED_WARNING)
{
ereport(elevel,
(errmsg("could not get language from ICU locale \"%s\": %s",
status = U_ZERO_ERROR;
uloc_getLanguage(otherloc, otherlang, ULOC_LANG_CAPACITY, &status);
- if (U_FAILURE(status))
+ if (U_FAILURE(status) || status == U_STRING_NOT_TERMINATED_WARNING)
continue;
if (strcmp(lang, otherlang) == 0)
status = U_ZERO_ERROR;
uloc_getLanguage(loc_str, lang, ULOC_LANG_CAPACITY, &status);
- if (U_FAILURE(status))
+ if (U_FAILURE(status) || status == U_STRING_NOT_TERMINATED_WARNING)
{
pg_fatal("could not get language from locale \"%s\": %s",
loc_str, u_errorName(status));
langtag = pg_malloc(buflen);
while (true)
{
- int32_t len;
-
status = U_ZERO_ERROR;
- len = uloc_toLanguageTag(loc_str, langtag, buflen, strict, &status);
+ uloc_toLanguageTag(loc_str, langtag, buflen, strict, &status);
- /*
- * If the result fits in the buffer exactly (len == buflen),
- * uloc_toLanguageTag() will return success without nul-terminating
- * the result. Check for either U_BUFFER_OVERFLOW_ERROR or len >=
- * buflen and try again.
- */
+ /* try again if the buffer is not large enough */
if (status == U_BUFFER_OVERFLOW_ERROR ||
- (U_SUCCESS(status) && len >= buflen))
+ status == U_STRING_NOT_TERMINATED_WARNING)
{
buflen = buflen * 2;
langtag = pg_realloc(langtag, buflen);