ICU-22520 Use C++ function signatures for internal C++ functions.
Some of this code was originally written as C code and some of this code
was originally written as C++ code but made to resemble the then already
existing code that had once been C code. Changing it all to normal C++
now will make it easier and safer to work with going forward.
· Use unnamed namespace instead of static.
· Use reference instead of non-nullable pointer.
· Use bool instead of UBool.
· Use constexpr for static data.
· Use U_EXPORT instead of U_CAPI or U_CFUNC.
· Use the default calling convention instead of U_EXPORT2.
diff --git a/icu4c/source/common/localebuilder.cpp b/icu4c/source/common/localebuilder.cpp
index aeb497f..ddb5ea3 100644
--- a/icu4c/source/common/localebuilder.cpp
+++ b/icu4c/source/common/localebuilder.cpp
@@ -10,16 +10,14 @@
#include "unicode/localebuilder.h"
#include "unicode/locid.h"
-U_NAMESPACE_BEGIN
-
namespace {
+
inline bool UPRV_ISDIGIT(char c) { return c >= '0' && c <= '9'; }
inline bool UPRV_ISALPHANUM(char c) { return uprv_isASCIILetter(c) || UPRV_ISDIGIT(c); }
-} // namespace
constexpr const char* kAttributeKey = "attribute";
-static bool _isExtensionSubtags(char key, const char* s, int32_t len) {
+bool _isExtensionSubtags(char key, const char* s, int32_t len) {
switch (uprv_tolower(key)) {
case 'u':
return ultag_isUnicodeExtensionSubtags(s, len);
@@ -32,6 +30,10 @@ static bool _isExtensionSubtags(char key, const char* s, int32_t len) {
}
}
+} // namespace
+
+U_NAMESPACE_BEGIN
+
LocaleBuilder::LocaleBuilder() : UObject(), status_(U_ZERO_ERROR), language_(),
script_(), region_(), variant_(nullptr), extensions_(nullptr)
{
@@ -70,8 +72,10 @@ LocaleBuilder& LocaleBuilder::setLanguageTag(StringPiece tag)
return *this;
}
-static void setField(StringPiece input, char* dest, UErrorCode& errorCode,
- UBool (*test)(const char*, int32_t)) {
+namespace {
+
+void setField(StringPiece input, char* dest, UErrorCode& errorCode,
+ bool (*test)(const char*, int32_t)) {
if (U_FAILURE(errorCode)) { return; }
if (input.empty()) {
dest[0] = '\0';
@@ -83,6 +87,8 @@ static void setField(StringPiece input, char* dest, UErrorCode& errorCode,
}
}
+} // namespace
+
LocaleBuilder& LocaleBuilder::setLanguage(StringPiece language)
{
setField(language, language_, status_, &ultag_isLanguageSubtag);
@@ -101,7 +107,9 @@ LocaleBuilder& LocaleBuilder::setRegion(StringPiece region)
return *this;
}
-static void transform(char* data, int32_t len) {
+namespace {
+
+void transform(char* data, int32_t len) {
for (int32_t i = 0; i < len; i++, data++) {
if (*data == '_') {
*data = '-';
@@ -111,6 +119,8 @@ static void transform(char* data, int32_t len) {
}
}
+} // namespace
+
LocaleBuilder& LocaleBuilder::setVariant(StringPiece variant)
{
if (U_FAILURE(status_)) { return *this; }
@@ -136,7 +146,9 @@ LocaleBuilder& LocaleBuilder::setVariant(StringPiece variant)
return *this;
}
-static bool
+namespace {
+
+bool
_isKeywordValue(const char* key, const char* value, int32_t value_len)
{
if (key[1] == '\0') {
@@ -158,7 +170,7 @@ _isKeywordValue(const char* key, const char* value, int32_t value_len)
ultag_isUnicodeLocaleType(unicode_locale_type, -1);
}
-static void
+void
_copyExtensions(const Locale& from, icu::StringEnumeration *keywords,
Locale& to, bool validate, UErrorCode& errorCode)
{
@@ -188,7 +200,7 @@ _copyExtensions(const Locale& from, icu::StringEnumeration *keywords,
}
}
-void static
+void
_clearUAttributesAndKeyType(Locale& locale, UErrorCode& errorCode)
{
// Clear Unicode attributes
@@ -203,7 +215,7 @@ _clearUAttributesAndKeyType(Locale& locale, UErrorCode& errorCode)
}
}
-static void
+void
_setUnicodeExtensions(Locale& locale, const CharString& value, UErrorCode& errorCode)
{
// Add the unicode extensions to extensions_
@@ -214,6 +226,8 @@ _setUnicodeExtensions(Locale& locale, const CharString& value, UErrorCode& error
locale, false, errorCode);
}
+} // namespace
+
LocaleBuilder& LocaleBuilder::setExtension(char key, StringPiece value)
{
if (U_FAILURE(status_)) { return *this; }
diff --git a/icu4c/source/common/locavailable.cpp b/icu4c/source/common/locavailable.cpp
index 0ea2093..af07bf5 100644
--- a/icu4c/source/common/locavailable.cpp
+++ b/icu4c/source/common/locavailable.cpp
@@ -39,14 +39,10 @@ static icu::Locale* availableLocaleList = nullptr;
static int32_t availableLocaleListCount;
static icu::UInitOnce gInitOnceLocale {};
-U_NAMESPACE_END
+namespace {
-U_CDECL_BEGIN
-
-static UBool U_CALLCONV locale_available_cleanup()
+UBool U_CALLCONV locale_available_cleanup()
{
- U_NAMESPACE_USE
-
if (availableLocaleList) {
delete []availableLocaleList;
availableLocaleList = nullptr;
@@ -57,9 +53,7 @@ static UBool U_CALLCONV locale_available_cleanup()
return true;
}
-U_CDECL_END
-
-U_NAMESPACE_BEGIN
+} // namespace
void U_CALLCONV locale_available_init() {
// This function is a friend of class Locale.
@@ -196,7 +190,7 @@ class AvailableLocalesStringEnumeration : public StringEnumeration {
/* ### Get available **************************************************/
-static UBool U_CALLCONV uloc_cleanup() {
+UBool U_CALLCONV uloc_cleanup() {
for (int32_t i = 0; i < UPRV_LENGTHOF(gAvailableLocaleNames); i++) {
uprv_free(gAvailableLocaleNames[i]);
gAvailableLocaleNames[i] = nullptr;
@@ -209,7 +203,7 @@ static UBool U_CALLCONV uloc_cleanup() {
// Load Installed Locales. This function will be called exactly once
// via the initOnce mechanism.
-static void U_CALLCONV loadInstalledLocales(UErrorCode& status) {
+void U_CALLCONV loadInstalledLocales(UErrorCode& status) {
ucln_common_registerCleanup(UCLN_COMMON_ULOC, uloc_cleanup);
icu::LocalUResourceBundlePointer rb(ures_openDirect(nullptr, "res_index", &status));
@@ -267,4 +261,3 @@ uloc_openAvailableByType(ULocAvailableType type, UErrorCode* status) {
}
return uenum_openFromStringEnumeration(result.orphan(), status);
}
-
diff --git a/icu4c/source/common/locdispnames.cpp b/icu4c/source/common/locdispnames.cpp
index 2ac3711..f1f0b06 100644
--- a/icu4c/source/common/locdispnames.cpp
+++ b/icu4c/source/common/locdispnames.cpp
@@ -276,50 +276,52 @@ U_NAMESPACE_END
U_NAMESPACE_USE
+namespace {
+
/* ### Constants **************************************************/
/* These strings describe the resources we attempt to load from
the locale ResourceBundle data file.*/
-static const char _kLanguages[] = "Languages";
-static const char _kScripts[] = "Scripts";
-static const char _kScriptsStandAlone[] = "Scripts%stand-alone";
-static const char _kCountries[] = "Countries";
-static const char _kVariants[] = "Variants";
-static const char _kKeys[] = "Keys";
-static const char _kTypes[] = "Types";
-//static const char _kRootName[] = "root";
-static const char _kCurrency[] = "currency";
-static const char _kCurrencies[] = "Currencies";
-static const char _kLocaleDisplayPattern[] = "localeDisplayPattern";
-static const char _kPattern[] = "pattern";
-static const char _kSeparator[] = "separator";
+constexpr char _kLanguages[] = "Languages";
+constexpr char _kScripts[] = "Scripts";
+constexpr char _kScriptsStandAlone[] = "Scripts%stand-alone";
+constexpr char _kCountries[] = "Countries";
+constexpr char _kVariants[] = "Variants";
+constexpr char _kKeys[] = "Keys";
+constexpr char _kTypes[] = "Types";
+//constexpr char _kRootName[] = "root";
+constexpr char _kCurrency[] = "currency";
+constexpr char _kCurrencies[] = "Currencies";
+constexpr char _kLocaleDisplayPattern[] = "localeDisplayPattern";
+constexpr char _kPattern[] = "pattern";
+constexpr char _kSeparator[] = "separator";
/* ### Display name **************************************************/
-static int32_t
+int32_t
_getStringOrCopyKey(const char *path, const char *locale,
const char *tableKey,
const char* subTableKey,
const char *itemKey,
const char *substitute,
char16_t *dest, int32_t destCapacity,
- UErrorCode *pErrorCode) {
+ UErrorCode &errorCode) {
const char16_t *s = nullptr;
int32_t length = 0;
if(itemKey==nullptr) {
/* top-level item: normal resource bundle access */
- icu::LocalUResourceBundlePointer rb(ures_open(path, locale, pErrorCode));
+ icu::LocalUResourceBundlePointer rb(ures_open(path, locale, &errorCode));
- if(U_SUCCESS(*pErrorCode)) {
- s=ures_getStringByKey(rb.getAlias(), tableKey, &length, pErrorCode);
+ if(U_SUCCESS(errorCode)) {
+ s=ures_getStringByKey(rb.getAlias(), tableKey, &length, &errorCode);
/* see comment about closing rb near "return item;" in _res_getTableStringWithFallback() */
}
} else {
bool isLanguageCode = (uprv_strncmp(tableKey, _kLanguages, 9) == 0);
/* Language code should not be a number. If it is, set the error code. */
if (isLanguageCode && uprv_strtol(itemKey, nullptr, 10)) {
- *pErrorCode = U_MISSING_RESOURCE_ERROR;
+ errorCode = U_MISSING_RESOURCE_ERROR;
} else {
/* second-level item, use special fallback */
s=uloc_getTableStringWithFallback(path, locale,
@@ -327,22 +329,22 @@ _getStringOrCopyKey(const char *path, const char *locale,
subTableKey,
itemKey,
&length,
- pErrorCode);
- if (U_FAILURE(*pErrorCode) && isLanguageCode && itemKey != nullptr) {
+ &errorCode);
+ if (U_FAILURE(errorCode) && isLanguageCode && itemKey != nullptr) {
// convert itemKey locale code to canonical form and try again, ICU-20870
- *pErrorCode = U_ZERO_ERROR;
+ errorCode = U_ZERO_ERROR;
Locale canonKey = Locale::createCanonical(itemKey);
s=uloc_getTableStringWithFallback(path, locale,
tableKey,
subTableKey,
canonKey.getName(),
&length,
- pErrorCode);
+ &errorCode);
}
}
}
- if(U_SUCCESS(*pErrorCode)) {
+ if(U_SUCCESS(errorCode)) {
int32_t copyLength=uprv_min(length, destCapacity);
if(copyLength>0 && s != nullptr) {
u_memcpy(dest, s, copyLength);
@@ -351,46 +353,46 @@ _getStringOrCopyKey(const char *path, const char *locale,
/* no string from a resource bundle: convert the substitute */
length=(int32_t)uprv_strlen(substitute);
u_charsToUChars(substitute, dest, uprv_min(length, destCapacity));
- *pErrorCode=U_USING_DEFAULT_WARNING;
+ errorCode = U_USING_DEFAULT_WARNING;
}
- return u_terminateUChars(dest, destCapacity, length, pErrorCode);
+ return u_terminateUChars(dest, destCapacity, length, &errorCode);
}
using UDisplayNameGetter = icu::CharString(const char*, UErrorCode&);
-static int32_t
+int32_t
_getDisplayNameForComponent(const char *locale,
const char *displayLocale,
char16_t *dest, int32_t destCapacity,
UDisplayNameGetter *getter,
const char *tag,
- UErrorCode *pErrorCode) {
+ UErrorCode &errorCode) {
UErrorCode localStatus;
const char* root = nullptr;
/* argument checking */
- if(pErrorCode==nullptr || U_FAILURE(*pErrorCode)) {
+ if (U_FAILURE(errorCode)) {
return 0;
}
if(destCapacity<0 || (destCapacity>0 && dest==nullptr)) {
- *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
+ errorCode = U_ILLEGAL_ARGUMENT_ERROR;
return 0;
}
localStatus = U_ZERO_ERROR;
icu::CharString localeBuffer = (*getter)(locale, localStatus);
if (U_FAILURE(localStatus)) {
- *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
+ errorCode = U_ILLEGAL_ARGUMENT_ERROR;
return 0;
}
if (localeBuffer.isEmpty()) {
// For the display name, we treat this as unknown language (ICU-20273).
if (getter == ulocimp_getLanguage) {
- localeBuffer.append("und", *pErrorCode);
+ localeBuffer.append("und", errorCode);
} else {
- return u_terminateUChars(dest, destCapacity, 0, pErrorCode);
+ return u_terminateUChars(dest, destCapacity, 0, &errorCode);
}
}
@@ -400,16 +402,18 @@ _getDisplayNameForComponent(const char *locale,
tag, nullptr, localeBuffer.data(),
localeBuffer.data(),
dest, destCapacity,
- pErrorCode);
+ errorCode);
}
+} // namespace
+
U_CAPI int32_t U_EXPORT2
uloc_getDisplayLanguage(const char *locale,
const char *displayLocale,
char16_t *dest, int32_t destCapacity,
UErrorCode *pErrorCode) {
return _getDisplayNameForComponent(locale, displayLocale, dest, destCapacity,
- ulocimp_getLanguage, _kLanguages, pErrorCode);
+ ulocimp_getLanguage, _kLanguages, *pErrorCode);
}
U_CAPI int32_t U_EXPORT2
@@ -420,17 +424,17 @@ uloc_getDisplayScript(const char* locale,
{
UErrorCode err = U_ZERO_ERROR;
int32_t res = _getDisplayNameForComponent(locale, displayLocale, dest, destCapacity,
- ulocimp_getScript, _kScriptsStandAlone, &err);
+ ulocimp_getScript, _kScriptsStandAlone, err);
if (destCapacity == 0 && err == U_BUFFER_OVERFLOW_ERROR) {
// For preflight, return the max of the value and the fallback.
int32_t fallback_res = _getDisplayNameForComponent(locale, displayLocale, dest, destCapacity,
- ulocimp_getScript, _kScripts, pErrorCode);
+ ulocimp_getScript, _kScripts, *pErrorCode);
return (fallback_res > res) ? fallback_res : res;
}
if ( err == U_USING_DEFAULT_WARNING ) {
return _getDisplayNameForComponent(locale, displayLocale, dest, destCapacity,
- ulocimp_getScript, _kScripts, pErrorCode);
+ ulocimp_getScript, _kScripts, *pErrorCode);
} else {
*pErrorCode = err;
return res;
@@ -444,7 +448,7 @@ uloc_getDisplayScriptInContext(const char* locale,
UErrorCode *pErrorCode)
{
return _getDisplayNameForComponent(locale, displayLocale, dest, destCapacity,
- ulocimp_getScript, _kScripts, pErrorCode);
+ ulocimp_getScript, _kScripts, *pErrorCode);
}
U_CAPI int32_t U_EXPORT2
@@ -453,7 +457,7 @@ uloc_getDisplayCountry(const char *locale,
char16_t *dest, int32_t destCapacity,
UErrorCode *pErrorCode) {
return _getDisplayNameForComponent(locale, displayLocale, dest, destCapacity,
- ulocimp_getRegion, _kCountries, pErrorCode);
+ ulocimp_getRegion, _kCountries, *pErrorCode);
}
/*
@@ -467,7 +471,7 @@ uloc_getDisplayVariant(const char *locale,
char16_t *dest, int32_t destCapacity,
UErrorCode *pErrorCode) {
return _getDisplayNameForComponent(locale, displayLocale, dest, destCapacity,
- ulocimp_getVariant, _kVariants, pErrorCode);
+ ulocimp_getVariant, _kVariants, *pErrorCode);
}
/* Instead of having a separate pass for 'special' patterns, reintegrate the two
@@ -807,7 +811,7 @@ uloc_getDisplayKeyword(const char* keyword,
keyword,
keyword,
dest, destCapacity,
- status);
+ *status);
}
@@ -837,7 +841,7 @@ uloc_getDisplayKeywordValue( const char* locale,
CharString keywordValue;
{
CharStringByteSink sink(&keywordValue);
- ulocimp_getKeywordValue(locale, keyword, sink, status);
+ ulocimp_getKeywordValue(locale, keyword, sink, *status);
}
/*
@@ -895,6 +899,6 @@ uloc_getDisplayKeywordValue( const char* locale,
keywordValue.data(),
keywordValue.data(),
dest, destCapacity,
- status);
+ *status);
}
}
diff --git a/icu4c/source/common/locdistance.cpp b/icu4c/source/common/locdistance.cpp
index 61822e5..4dbfcc0 100644
--- a/icu4c/source/common/locdistance.cpp
+++ b/icu4c/source/common/locdistance.cpp
@@ -399,7 +399,7 @@ int32_t LocaleDistance::trieNext(BytesTrie &iter, const char *s, bool wantValue)
}
}
-UBool LocaleDistance::isParadigmLSR(const LSR &lsr) const {
+bool LocaleDistance::isParadigmLSR(const LSR &lsr) const {
// Linear search for a very short list (length 6 as of 2019),
// because we look for equivalence not equality, and
// because it's easy.
diff --git a/icu4c/source/common/locdistance.h b/icu4c/source/common/locdistance.h
index b0fbe9a..952f622 100644
--- a/icu4c/source/common/locdistance.h
+++ b/icu4c/source/common/locdistance.h
@@ -62,7 +62,7 @@ class LocaleDistance final : public UMemory {
ULocMatchFavorSubtag favorSubtag,
ULocMatchDirection direction) const;
- UBool isParadigmLSR(const LSR &lsr) const;
+ bool isParadigmLSR(const LSR &lsr) const;
int32_t getDefaultScriptDistance() const {
return defaultScriptDistance;
@@ -89,8 +89,8 @@ class LocaleDistance final : public UMemory {
static void initLocaleDistance(UErrorCode &errorCode);
- UBool isMatch(const LSR &desired, const LSR &supported,
- int32_t shiftedThreshold, ULocMatchFavorSubtag favorSubtag) const {
+ bool isMatch(const LSR &desired, const LSR &supported,
+ int32_t shiftedThreshold, ULocMatchFavorSubtag favorSubtag) const {
const LSR *pSupp = &supported;
return getBestIndexAndDistance(
desired, &pSupp, 1,
diff --git a/icu4c/source/common/locdspnm.cpp b/icu4c/source/common/locdspnm.cpp
index bbbb2ed..c836876 100644
--- a/icu4c/source/common/locdspnm.cpp
+++ b/icu4c/source/common/locdspnm.cpp
@@ -264,7 +264,7 @@ class LocaleDisplayNamesImpl : public LocaleDisplayNames {
};
// Capitalization transforms. For each usage type, indicates whether to titlecase for
// the context specified in capitalizationContext (which we know at construction time)
- UBool fCapitalization[kCapContextUsageCount];
+ bool fCapitalization[kCapContextUsageCount];
public:
// constructor
@@ -300,12 +300,12 @@ class LocaleDisplayNamesImpl : public LocaleDisplayNames {
UnicodeString& result, bool substitute) const;
UnicodeString& appendWithSep(UnicodeString& buffer, const UnicodeString& src) const;
UnicodeString& adjustForUsageAndContext(CapContextUsage usage, UnicodeString& result) const;
- UnicodeString& scriptDisplayName(const char* script, UnicodeString& result, UBool skipAdjust) const;
- UnicodeString& regionDisplayName(const char* region, UnicodeString& result, UBool skipAdjust) const;
- UnicodeString& variantDisplayName(const char* variant, UnicodeString& result, UBool skipAdjust) const;
- UnicodeString& keyDisplayName(const char* key, UnicodeString& result, UBool skipAdjust) const;
+ UnicodeString& scriptDisplayName(const char* script, UnicodeString& result, bool skipAdjust) const;
+ UnicodeString& regionDisplayName(const char* region, UnicodeString& result, bool skipAdjust) const;
+ UnicodeString& variantDisplayName(const char* variant, UnicodeString& result, bool skipAdjust) const;
+ UnicodeString& keyDisplayName(const char* key, UnicodeString& result, bool skipAdjust) const;
UnicodeString& keyValueDisplayName(const char* key, const char* value,
- UnicodeString& result, UBool skipAdjust) const;
+ UnicodeString& result, bool skipAdjust) const;
void initialize();
struct CapitalizationContextSink;
@@ -358,7 +358,7 @@ LocaleDisplayNamesImpl::LocaleDisplayNamesImpl(const Locale& locale,
}
struct LocaleDisplayNamesImpl::CapitalizationContextSink : public ResourceSink {
- UBool hasCapitalizationUsage;
+ bool hasCapitalizationUsage;
LocaleDisplayNamesImpl& parent;
CapitalizationContextSink(LocaleDisplayNamesImpl& _parent)
@@ -449,7 +449,7 @@ LocaleDisplayNamesImpl::initialize() {
#if !UCONFIG_NO_BREAK_ITERATION
// Only get the context data if we need it! This is a const object so we know now...
// Also check whether we will need a break iterator (depends on the data)
- UBool needBrkIter = false;
+ bool needBrkIter = false;
if (capitalizationContext == UDISPCTX_CAPITALIZATION_FOR_UI_LIST_OR_MENU || capitalizationContext == UDISPCTX_CAPITALIZATION_FOR_STANDALONE) {
LocalUResourceBundlePointer resource(ures_open(nullptr, locale.getName(), &status));
if (U_FAILURE(status)) { return; }
@@ -541,9 +541,9 @@ LocaleDisplayNamesImpl::localeDisplayName(const Locale& loc,
const char* country = loc.getCountry();
const char* variant = loc.getVariant();
- UBool hasScript = uprv_strlen(script) > 0;
- UBool hasCountry = uprv_strlen(country) > 0;
- UBool hasVariant = uprv_strlen(variant) > 0;
+ bool hasScript = uprv_strlen(script) > 0;
+ bool hasCountry = uprv_strlen(country) > 0;
+ bool hasVariant = uprv_strlen(variant) > 0;
if (dialectHandling == ULDN_DIALECT_NAMES) {
UErrorCode status = U_ZERO_ERROR;
@@ -755,7 +755,7 @@ LocaleDisplayNamesImpl::languageDisplayName(const char* lang,
UnicodeString&
LocaleDisplayNamesImpl::scriptDisplayName(const char* script,
UnicodeString& result,
- UBool skipAdjust) const {
+ bool skipAdjust) const {
if (nameLength == UDISPCTX_LENGTH_SHORT) {
langData.getNoFallback("Scripts%short", script, result);
if (!result.isBogus()) {
@@ -785,7 +785,7 @@ LocaleDisplayNamesImpl::scriptDisplayName(UScriptCode scriptCode,
UnicodeString&
LocaleDisplayNamesImpl::regionDisplayName(const char* region,
UnicodeString& result,
- UBool skipAdjust) const {
+ bool skipAdjust) const {
if (nameLength == UDISPCTX_LENGTH_SHORT) {
regionData.getNoFallback("Countries%short", region, result);
if (!result.isBogus()) {
@@ -810,7 +810,7 @@ LocaleDisplayNamesImpl::regionDisplayName(const char* region,
UnicodeString&
LocaleDisplayNamesImpl::variantDisplayName(const char* variant,
UnicodeString& result,
- UBool skipAdjust) const {
+ bool skipAdjust) const {
// don't have a resource for short variant names
if (substitute == UDISPCTX_SUBSTITUTE) {
langData.get("Variants", variant, result);
@@ -829,7 +829,7 @@ LocaleDisplayNamesImpl::variantDisplayName(const char* variant,
UnicodeString&
LocaleDisplayNamesImpl::keyDisplayName(const char* key,
UnicodeString& result,
- UBool skipAdjust) const {
+ bool skipAdjust) const {
// don't have a resource for short key names
if (substitute == UDISPCTX_SUBSTITUTE) {
langData.get("Keys", key, result);
@@ -849,7 +849,7 @@ UnicodeString&
LocaleDisplayNamesImpl::keyValueDisplayName(const char* key,
const char* value,
UnicodeString& result,
- UBool skipAdjust) const {
+ bool skipAdjust) const {
if (uprv_strcmp(key, "currency") == 0) {
// ICU4C does not have ICU4J CurrencyDisplayInfo equivalent for now.
UErrorCode sts = U_ZERO_ERROR;
diff --git a/icu4c/source/common/locid.cpp b/icu4c/source/common/locid.cpp
index 31ddc6a..f382041 100644
--- a/icu4c/source/common/locid.cpp
+++ b/icu4c/source/common/locid.cpp
@@ -57,10 +57,6 @@
#include "ustr_imp.h"
#include "uvector.h"
-U_CDECL_BEGIN
-static UBool U_CALLCONV locale_cleanup();
-U_CDECL_END
-
U_NAMESPACE_BEGIN
static Locale *gLocaleCache = nullptr;
@@ -106,16 +102,17 @@ typedef enum ELocalePos {
eMAX_LOCALES
} ELocalePos;
-U_CDECL_BEGIN
+namespace {
+
//
// Deleter function for Locales owned by the default Locale hash table/
//
-static void U_CALLCONV
+void U_CALLCONV
deleteLocale(void *obj) {
delete (icu::Locale *) obj;
}
-static UBool U_CALLCONV locale_cleanup()
+UBool U_CALLCONV locale_cleanup()
{
U_NAMESPACE_USE
@@ -131,8 +128,7 @@ static UBool U_CALLCONV locale_cleanup()
return true;
}
-
-static void U_CALLCONV locale_init(UErrorCode &status) {
+void U_CALLCONV locale_init(UErrorCode &status) {
U_NAMESPACE_USE
U_ASSERT(gLocaleCache == nullptr);
@@ -163,7 +159,7 @@ static void U_CALLCONV locale_init(UErrorCode &status) {
gLocaleCache[eCANADA_FRENCH] = Locale("fr", "CA");
}
-U_CDECL_END
+} // namespace
U_NAMESPACE_BEGIN
@@ -186,9 +182,9 @@ Locale *locale_set_default_internal(const char *id, UErrorCode& status) {
{
CharStringByteSink sink(&localeNameBuf);
if (canonicalize) {
- ulocimp_canonicalize(id, sink, &status);
+ ulocimp_canonicalize(id, sink, status);
} else {
- ulocimp_getName(id, sink, &status);
+ ulocimp_getName(id, sink, status);
}
}
@@ -494,7 +490,7 @@ namespace {
UInitOnce gKnownCanonicalizedInitOnce {};
UHashtable *gKnownCanonicalized = nullptr;
-static const char* const KNOWN_CANONICALIZED[] = {
+constexpr const char* KNOWN_CANONICALIZED[] = {
"c",
// Commonly used locales known are already canonicalized
"af", "af_ZA", "am", "am_ET", "ar", "ar_001", "as", "as_IN", "az", "az_AZ",
@@ -518,13 +514,13 @@ static const char* const KNOWN_CANONICALIZED[] = {
"zh_Hant_TW", "zh_TW", "zu", "zu_ZA"
};
-static UBool U_CALLCONV cleanupKnownCanonicalized() {
+UBool U_CALLCONV cleanupKnownCanonicalized() {
gKnownCanonicalizedInitOnce.reset();
if (gKnownCanonicalized) { uhash_close(gKnownCanonicalized); }
return true;
}
-static void U_CALLCONV loadKnownCanonicalized(UErrorCode &status) {
+void U_CALLCONV loadKnownCanonicalized(UErrorCode &status) {
ucln_common_registerCleanup(UCLN_COMMON_LOCALE_KNOWN_CANONICALIZED,
cleanupKnownCanonicalized);
LocalUHashtablePointer newKnownCanonicalizedMap(
@@ -1809,24 +1805,30 @@ isKnownCanonicalizedLocale(const char* locale, UErrorCode& status)
} // namespace
+U_NAMESPACE_END
+
// Function for testing.
-U_CAPI const char* const*
-ulocimp_getKnownCanonicalizedLocaleForTest(int32_t* length)
+U_EXPORT const char* const*
+ulocimp_getKnownCanonicalizedLocaleForTest(int32_t& length)
{
- *length = UPRV_LENGTHOF(KNOWN_CANONICALIZED);
+ U_NAMESPACE_USE
+ length = UPRV_LENGTHOF(KNOWN_CANONICALIZED);
return KNOWN_CANONICALIZED;
}
// Function for testing.
-U_CAPI bool
+U_EXPORT bool
ulocimp_isCanonicalizedLocaleForTest(const char* localeName)
{
+ U_NAMESPACE_USE
Locale l(localeName);
UErrorCode status = U_ZERO_ERROR;
CharString temp;
return !canonicalizeLocale(l, temp, status) && U_SUCCESS(status);
}
+U_NAMESPACE_BEGIN
+
/*This function initializes a Locale from a C locale ID*/
Locale& Locale::init(const char* localeID, UBool canonicalize)
{
@@ -2077,7 +2079,7 @@ Locale::addLikelySubtags(UErrorCode& status) {
CharString maximizedLocaleID;
{
CharStringByteSink sink(&maximizedLocaleID);
- ulocimp_addLikelySubtags(fullName, sink, &status);
+ ulocimp_addLikelySubtags(fullName, sink, status);
}
if (U_FAILURE(status)) {
@@ -2103,7 +2105,7 @@ Locale::minimizeSubtags(bool favorScript, UErrorCode& status) {
CharString minimizedLocaleID;
{
CharStringByteSink sink(&minimizedLocaleID);
- ulocimp_minimizeSubtags(fullName, sink, favorScript, &status);
+ ulocimp_minimizeSubtags(fullName, sink, favorScript, status);
}
if (U_FAILURE(status)) {
@@ -2164,7 +2166,7 @@ Locale::forLanguageTag(StringPiece tag, UErrorCode& status)
tag.length(),
sink,
&parsedLength,
- &status);
+ status);
}
if (U_FAILURE(status)) {
@@ -2195,7 +2197,7 @@ Locale::toLanguageTag(ByteSink& sink, UErrorCode& status) const
return;
}
- ulocimp_toLanguageTag(fullName, sink, /*strict=*/false, &status);
+ ulocimp_toLanguageTag(fullName, sink, /*strict=*/false, status);
}
Locale U_EXPORT2
@@ -2550,7 +2552,7 @@ Locale::createKeywords(UErrorCode &status) const
if(assignment > variantStart) {
CharString keywords;
CharStringByteSink sink(&keywords);
- ulocimp_getKeywords(variantStart+1, '@', sink, false, &status);
+ ulocimp_getKeywords(variantStart+1, '@', sink, false, status);
if (U_SUCCESS(status) && !keywords.isEmpty()) {
result = new KeywordEnumeration(keywords.data(), keywords.length(), 0, status);
if (!result) {
@@ -2579,7 +2581,7 @@ Locale::createUnicodeKeywords(UErrorCode &status) const
if(assignment > variantStart) {
CharString keywords;
CharStringByteSink sink(&keywords);
- ulocimp_getKeywords(variantStart+1, '@', sink, false, &status);
+ ulocimp_getKeywords(variantStart+1, '@', sink, false, status);
if (U_SUCCESS(status) && !keywords.isEmpty()) {
result = new UnicodeKeywordEnumeration(keywords.data(), keywords.length(), 0, status);
if (!result) {
@@ -2616,7 +2618,7 @@ Locale::getKeywordValue(StringPiece keywordName, ByteSink& sink, UErrorCode& sta
return;
}
- ulocimp_getKeywordValue(fullName, keywordName_nul.data(), sink, &status);
+ ulocimp_getKeywordValue(fullName, keywordName_nul.data(), sink, status);
}
void
diff --git a/icu4c/source/common/loclikely.cpp b/icu4c/source/common/loclikely.cpp
index cd1b5bf..afbceaa 100644
--- a/icu4c/source/common/loclikely.cpp
+++ b/icu4c/source/common/loclikely.cpp
@@ -37,6 +37,8 @@
#include "ulocimp.h"
#include "ustr_imp.h"
+namespace {
+
/**
* Create a tag string from the supplied parameters. The lang, script and region
* parameters may be nullptr pointers. If they are, their corresponding length parameters
@@ -58,7 +60,7 @@
* @param sink The output sink receiving the tag string.
* @param err A pointer to a UErrorCode for error reporting.
**/
-static void U_CALLCONV
+void U_CALLCONV
createTagStringWithAlternates(
const char* lang,
int32_t langLength,
@@ -71,15 +73,15 @@ createTagStringWithAlternates(
const char* trailing,
int32_t trailingLength,
icu::ByteSink& sink,
- UErrorCode* err) {
- if (U_FAILURE(*err)) {
+ UErrorCode& err) {
+ if (U_FAILURE(err)) {
return;
}
if (langLength >= ULOC_LANG_CAPACITY ||
scriptLength >= ULOC_SCRIPT_CAPACITY ||
regionLength >= ULOC_COUNTRY_CAPACITY) {
- *err = U_ILLEGAL_ARGUMENT_ERROR;
+ err = U_ILLEGAL_ARGUMENT_ERROR;
return;
}
@@ -114,8 +116,7 @@ createTagStringWithAlternates(
}
}
-namespace {
-inline bool CHECK_TRAILING_VARIANT_SIZE(const char* variant, int32_t variantLength) {
+bool CHECK_TRAILING_VARIANT_SIZE(const char* variant, int32_t variantLength) {
int32_t count = 0;
for (int32_t i = 0; i < variantLength; i++) {
if (_isIDSeparator(variant[i])) {
@@ -128,18 +129,17 @@ inline bool CHECK_TRAILING_VARIANT_SIZE(const char* variant, int32_t variantLeng
}
return true;
}
-} // namespace
-static UBool
+bool
_uloc_addLikelySubtags(const char* localeID,
icu::ByteSink& sink,
- UErrorCode* err) {
- if (U_FAILURE(*err)) {
+ UErrorCode& err) {
+ if (U_FAILURE(err)) {
return false;
}
if (localeID == nullptr) {
- *err = U_ILLEGAL_ARGUMENT_ERROR;
+ err = U_ILLEGAL_ARGUMENT_ERROR;
return false;
}
@@ -148,13 +148,13 @@ _uloc_addLikelySubtags(const char* localeID,
icu::CharString region;
icu::CharString variant;
const char* trailing = nullptr;
- ulocimp_getSubtags(localeID, &lang, &script, ®ion, &variant, &trailing, *err);
- if (U_FAILURE(*err)) {
+ ulocimp_getSubtags(localeID, &lang, &script, ®ion, &variant, &trailing, err);
+ if (U_FAILURE(err)) {
return false;
}
if (!CHECK_TRAILING_VARIANT_SIZE(variant.data(), variant.length())) {
- *err = U_ILLEGAL_ARGUMENT_ERROR;
+ err = U_ILLEGAL_ARGUMENT_ERROR;
return false;
}
@@ -163,26 +163,26 @@ _uloc_addLikelySubtags(const char* localeID,
script = std::move(lang);
lang.clear();
} else {
- *err = U_ILLEGAL_ARGUMENT_ERROR;
+ err = U_ILLEGAL_ARGUMENT_ERROR;
return false;
}
}
int32_t trailingLength = (int32_t)uprv_strlen(trailing);
- const icu::LikelySubtags* likelySubtags = icu::LikelySubtags::getSingleton(*err);
- if (U_FAILURE(*err)) {
+ const icu::LikelySubtags* likelySubtags = icu::LikelySubtags::getSingleton(err);
+ if (U_FAILURE(err)) {
return false;
}
// We need to keep l on the stack because lsr may point into internal
// memory of l.
icu::Locale l = icu::Locale::createFromName(localeID);
if (l.isBogus()) {
- *err = U_ILLEGAL_ARGUMENT_ERROR;
+ err = U_ILLEGAL_ARGUMENT_ERROR;
return false;
}
- icu::LSR lsr = likelySubtags->makeMaximizedLsrFrom(l, true, *err);
- if (U_FAILURE(*err)) {
+ icu::LSR lsr = likelySubtags->makeMaximizedLsrFrom(l, true, err);
+ if (U_FAILURE(err)) {
return false;
}
const char* language = lsr.language;
@@ -203,26 +203,26 @@ _uloc_addLikelySubtags(const char* localeID,
sink,
err);
- return U_SUCCESS(*err);
+ return U_SUCCESS(err);
}
// Add likely subtags to the sink
// return true if the value in the sink is produced by a match during the lookup
// return false if the value in the sink is the same as input because there are
// no match after the lookup.
-static UBool _ulocimp_addLikelySubtags(const char*, icu::ByteSink&, UErrorCode*);
+bool _ulocimp_addLikelySubtags(const char*, icu::ByteSink&, UErrorCode&);
-static void
+void
_uloc_minimizeSubtags(const char* localeID,
icu::ByteSink& sink,
bool favorScript,
- UErrorCode* err) {
- if (U_FAILURE(*err)) {
+ UErrorCode& err) {
+ if (U_FAILURE(err)) {
return;
}
if (localeID == nullptr) {
- *err = U_ILLEGAL_ARGUMENT_ERROR;
+ err = U_ILLEGAL_ARGUMENT_ERROR;
return;
}
@@ -231,20 +231,20 @@ _uloc_minimizeSubtags(const char* localeID,
icu::CharString region;
icu::CharString variant;
const char* trailing = nullptr;
- ulocimp_getSubtags(localeID, &lang, &script, ®ion, &variant, &trailing, *err);
- if (U_FAILURE(*err)) {
+ ulocimp_getSubtags(localeID, &lang, &script, ®ion, &variant, &trailing, err);
+ if (U_FAILURE(err)) {
return;
}
if (!CHECK_TRAILING_VARIANT_SIZE(variant.data(), variant.length())) {
- *err = U_ILLEGAL_ARGUMENT_ERROR;
+ err = U_ILLEGAL_ARGUMENT_ERROR;
return;
}
int32_t trailingLength = (int32_t)uprv_strlen(trailing);
- const icu::LikelySubtags* likelySubtags = icu::LikelySubtags::getSingleton(*err);
- if (U_FAILURE(*err)) {
+ const icu::LikelySubtags* likelySubtags = icu::LikelySubtags::getSingleton(err);
+ if (U_FAILURE(err)) {
return;
}
icu::LSR lsr = likelySubtags->minimizeSubtags(
@@ -252,8 +252,8 @@ _uloc_minimizeSubtags(const char* localeID,
script.toStringPiece(),
region.toStringPiece(),
favorScript,
- *err);
- if (U_FAILURE(*err)) {
+ err);
+ if (U_FAILURE(err)) {
return;
}
const char* language = lsr.language;
@@ -275,6 +275,8 @@ _uloc_minimizeSubtags(const char* localeID,
err);
}
+} // namespace
+
U_CAPI int32_t U_EXPORT2
uloc_addLikelySubtags(const char* localeID,
char* maximizedLocaleID,
@@ -287,7 +289,7 @@ uloc_addLikelySubtags(const char* localeID,
icu::CheckedArrayByteSink sink(
maximizedLocaleID, maximizedLocaleIDCapacity);
- ulocimp_addLikelySubtags(localeID, sink, status);
+ ulocimp_addLikelySubtags(localeID, sink, *status);
int32_t reslen = sink.NumberOfBytesAppended();
if (U_FAILURE(*status)) {
@@ -304,26 +306,28 @@ uloc_addLikelySubtags(const char* localeID,
return reslen;
}
-static UBool
+namespace {
+bool
_ulocimp_addLikelySubtags(const char* localeID,
icu::ByteSink& sink,
- UErrorCode* status) {
+ UErrorCode& status) {
icu::CharString localeBuffer;
{
icu::CharStringByteSink localeSink(&localeBuffer);
ulocimp_canonicalize(localeID, localeSink, status);
}
- if (U_SUCCESS(*status)) {
+ if (U_SUCCESS(status)) {
return _uloc_addLikelySubtags(localeBuffer.data(), sink, status);
} else {
return false;
}
}
+} // namespace
-U_CAPI void U_EXPORT2
+U_EXPORT void
ulocimp_addLikelySubtags(const char* localeID,
icu::ByteSink& sink,
- UErrorCode* status) {
+ UErrorCode& status) {
_ulocimp_addLikelySubtags(localeID, sink, status);
}
@@ -339,7 +343,7 @@ uloc_minimizeSubtags(const char* localeID,
icu::CheckedArrayByteSink sink(
minimizedLocaleID, minimizedLocaleIDCapacity);
- ulocimp_minimizeSubtags(localeID, sink, false, status);
+ ulocimp_minimizeSubtags(localeID, sink, false, *status);
int32_t reslen = sink.NumberOfBytesAppended();
if (U_FAILURE(*status)) {
@@ -356,11 +360,11 @@ uloc_minimizeSubtags(const char* localeID,
return reslen;
}
-U_CAPI void U_EXPORT2
+U_EXPORT void
ulocimp_minimizeSubtags(const char* localeID,
icu::ByteSink& sink,
bool favorScript,
- UErrorCode* status) {
+ UErrorCode& status) {
icu::CharString localeBuffer;
{
icu::CharStringByteSink localeSink(&localeBuffer);
@@ -399,7 +403,7 @@ uloc_isRightToLeft(const char *locale) {
icu::CharString likely;
{
icu::CharStringByteSink sink(&likely);
- ulocimp_addLikelySubtags(locale, sink, &errorCode);
+ ulocimp_addLikelySubtags(locale, sink, errorCode);
}
if (U_FAILURE(errorCode)) {
return false;
@@ -431,7 +435,7 @@ GetRegionFromKey(const char* localeID, const char* key, UErrorCode& status) {
icu::CharString kw;
{
icu::CharStringByteSink sink(&kw);
- ulocimp_getKeywordValue(localeID, key, sink, &status);
+ ulocimp_getKeywordValue(localeID, key, sink, status);
}
int32_t len = kw.length();
if (U_SUCCESS(status) && len >= 3 && len <= 7) {
@@ -449,29 +453,29 @@ GetRegionFromKey(const char* localeID, const char* key, UErrorCode& status) {
}
} // namespace
-U_EXPORT icu::CharString U_EXPORT2
-ulocimp_getRegionForSupplementalData(const char *localeID, UBool inferRegion,
- UErrorCode* status) {
- if (U_FAILURE(*status)) {
+U_EXPORT icu::CharString
+ulocimp_getRegionForSupplementalData(const char *localeID, bool inferRegion,
+ UErrorCode& status) {
+ if (U_FAILURE(status)) {
return {};
}
- icu::CharString rgBuf = GetRegionFromKey(localeID, "rg", *status);
- if (U_SUCCESS(*status) && rgBuf.isEmpty()) {
+ icu::CharString rgBuf = GetRegionFromKey(localeID, "rg", status);
+ if (U_SUCCESS(status) && rgBuf.isEmpty()) {
// No valid rg keyword value, try for unicode_region_subtag
- rgBuf = ulocimp_getRegion(localeID, *status);
- if (U_SUCCESS(*status) && rgBuf.isEmpty() && inferRegion) {
+ rgBuf = ulocimp_getRegion(localeID, status);
+ if (U_SUCCESS(status) && rgBuf.isEmpty() && inferRegion) {
// Second check for sd keyword value
- rgBuf = GetRegionFromKey(localeID, "sd", *status);
- if (U_SUCCESS(*status) && rgBuf.isEmpty()) {
+ rgBuf = GetRegionFromKey(localeID, "sd", status);
+ if (U_SUCCESS(status) && rgBuf.isEmpty()) {
// no unicode_region_subtag but inferRegion true, try likely subtags
UErrorCode rgStatus = U_ZERO_ERROR;
icu::CharString locBuf;
{
icu::CharStringByteSink sink(&locBuf);
- ulocimp_addLikelySubtags(localeID, sink, &rgStatus);
+ ulocimp_addLikelySubtags(localeID, sink, rgStatus);
}
if (U_SUCCESS(rgStatus)) {
- rgBuf = ulocimp_getRegion(locBuf.data(), *status);
+ rgBuf = ulocimp_getRegion(locBuf.data(), status);
}
}
}
diff --git a/icu4c/source/common/loclikelysubtags.cpp b/icu4c/source/common/loclikelysubtags.cpp
index 8800111..28adec4 100644
--- a/icu4c/source/common/loclikelysubtags.cpp
+++ b/icu4c/source/common/loclikelysubtags.cpp
@@ -351,7 +351,7 @@ UBool U_CALLCONV cleanup() {
return true;
}
-static const char16_t* MACROREGION_HARDCODE[] = {
+constexpr const char16_t* MACROREGION_HARDCODE[] = {
u"001~3",
u"005",
u"009",
@@ -378,8 +378,8 @@ static const char16_t* MACROREGION_HARDCODE[] = {
u"UN",
};
-static const char16_t RANGE_MARKER = 0x7E; /* '~' */
-static void processMacroregionRange(const UnicodeString& regionName, UVector* newMacroRegions, UErrorCode& status) {
+constexpr char16_t RANGE_MARKER = 0x7E; /* '~' */
+void processMacroregionRange(const UnicodeString& regionName, UVector* newMacroRegions, UErrorCode& status) {
int32_t rangeMarkerLocation = regionName.indexOf(RANGE_MARKER);
char16_t buf[6];
regionName.extract(buf,6,status);
diff --git a/icu4c/source/common/locmap.cpp b/icu4c/source/common/locmap.cpp
index 81957c1..a59c7ab 100644
--- a/icu4c/source/common/locmap.cpp
+++ b/icu4c/source/common/locmap.cpp
@@ -49,6 +49,8 @@
* [MS-LCID] Windows Language Code Identifier (LCID) Reference
*/
+namespace {
+
/*
////////////////////////////////////////////////
//
@@ -87,7 +89,7 @@ typedef struct ILcidPosixMap
* @param posixID posix ID of the language_TERRITORY such as 'de_CH'
*/
#define ILCID_POSIX_ELEMENT_ARRAY(hostID, languageID, posixID) \
-static const ILcidPosixElement locmap_ ## languageID [] = { \
+constexpr ILcidPosixElement locmap_ ## languageID [] = { \
{LANGUAGE_LCID(hostID), #languageID}, /* parent locale */ \
{hostID, #posixID}, \
};
@@ -97,7 +99,7 @@ static const ILcidPosixElement locmap_ ## languageID [] = { \
* @param id the POSIX ID, either a language or language_TERRITORY
*/
#define ILCID_POSIX_SUBTABLE(id) \
-static const ILcidPosixElement locmap_ ## id [] =
+constexpr ILcidPosixElement locmap_ ## id [] =
/**
@@ -796,7 +798,7 @@ ILCID_POSIX_SUBTABLE(zh) {
ILCID_POSIX_ELEMENT_ARRAY(0x0435, zu, zu_ZA)
/* This must be static and grouped by LCID. */
-static const ILcidPosixMap gPosixIDmap[] = {
+constexpr ILcidPosixMap gPosixIDmap[] = {
ILCID_POSIX_MAP(af), /* af Afrikaans 0x36 */
ILCID_POSIX_MAP(am), /* am Amharic 0x5e */
ILCID_POSIX_MAP(ar), /* ar Arabic 0x01 */
@@ -945,14 +947,14 @@ static const ILcidPosixMap gPosixIDmap[] = {
ILCID_POSIX_MAP(zu), /* zu Zulu 0x35 */
};
-static const uint32_t gLocaleCount = UPRV_LENGTHOF(gPosixIDmap);
+constexpr uint32_t gLocaleCount = UPRV_LENGTHOF(gPosixIDmap);
/**
* Do not call this function. It is called by hostID.
* The function is not private because this struct must stay as a C struct,
* and this is an internal class.
*/
-static int32_t
+int32_t
idCmp(const char* id1, const char* id2)
{
int32_t diffIdx = 0;
@@ -972,8 +974,8 @@ idCmp(const char* id1, const char* id2)
* no equivalent Windows LCID.
* @return the LCID
*/
-static uint32_t
-getHostID(const ILcidPosixMap *this_0, const char* posixID, UErrorCode* status)
+uint32_t
+getHostID(const ILcidPosixMap *this_0, const char* posixID, UErrorCode& status)
{
int32_t bestIdx = 0;
int32_t bestIdxDiff = 0;
@@ -996,16 +998,16 @@ getHostID(const ILcidPosixMap *this_0, const char* posixID, UErrorCode* status)
if ((posixID[bestIdxDiff] == '_' || posixID[bestIdxDiff] == '@')
&& this_0->regionMaps[bestIdx].posixID[bestIdxDiff] == 0)
{
- *status = U_USING_FALLBACK_WARNING;
+ status = U_USING_FALLBACK_WARNING;
return this_0->regionMaps[bestIdx].hostID;
}
/*no match found */
- *status = U_ILLEGAL_ARGUMENT_ERROR;
+ status = U_ILLEGAL_ARGUMENT_ERROR;
return this_0->regionMaps->hostID;
}
-static const char*
+const char*
getPosixID(const ILcidPosixMap *this_0, uint32_t hostID)
{
uint32_t i;
@@ -1030,13 +1032,12 @@ getPosixID(const ILcidPosixMap *this_0, uint32_t hostID)
/////////////////////////////////////
*/
#if U_PLATFORM_HAS_WIN32_API && UCONFIG_USE_WINDOWS_LCID_MAPPING_API
-namespace {
/*
* Various language tags needs to be changed:
* quz -> qu
* prs -> fa
*/
-inline void FIX_LANGUAGE_ID_TAG(char* buffer, int32_t len) {
+void FIX_LANGUAGE_ID_TAG(char* buffer, int32_t len) {
if (len >= 3) {
if (buffer[0] == 'q' && buffer[1] == 'u' && buffer[2] == 'z') {
buffer[2] = 0;
@@ -1047,9 +1048,10 @@ inline void FIX_LANGUAGE_ID_TAG(char* buffer, int32_t len) {
}
}
}
-} // namespace
#endif
+} // namespace
+
U_CAPI int32_t
uprv_convertToPosix(uint32_t hostid, char *posixID, int32_t posixIDCapacity, UErrorCode* status)
{
@@ -1181,7 +1183,7 @@ uprv_convertToLCIDPlatform(const char* localeID, UErrorCode* status)
icu::CharString collVal;
{
icu::CharStringByteSink sink(&collVal);
- ulocimp_getKeywordValue(localeID, "collation", sink, status);
+ ulocimp_getKeywordValue(localeID, "collation", sink, *status);
}
if (U_SUCCESS(*status) && !collVal.isEmpty())
{
@@ -1193,7 +1195,7 @@ uprv_convertToLCIDPlatform(const char* localeID, UErrorCode* status)
// If the locale ID contains keywords other than collation, just use the base name.
{
icu::CharStringByteSink sink(&baseName);
- ulocimp_getBaseName(localeID, sink, status);
+ ulocimp_getBaseName(localeID, sink, *status);
}
if (U_SUCCESS(*status) && !baseName.isEmpty())
{
@@ -1206,7 +1208,7 @@ uprv_convertToLCIDPlatform(const char* localeID, UErrorCode* status)
icu::CharString asciiBCP47Tag;
{
icu::CharStringByteSink sink(&asciiBCP47Tag);
- ulocimp_toLanguageTag(mylocaleID, sink, false, status);
+ ulocimp_toLanguageTag(mylocaleID, sink, false, *status);
}
if (U_SUCCESS(*status))
@@ -1290,7 +1292,7 @@ uprv_convertToLCID(const char *langID, const char* posixID, UErrorCode* status)
low = mid;
}
else /*we found it*/{
- return getHostID(&gPosixIDmap[mid], posixID, status);
+ return getHostID(&gPosixIDmap[mid], posixID, *status);
}
oldmid = mid;
}
@@ -1301,7 +1303,7 @@ uprv_convertToLCID(const char *langID, const char* posixID, UErrorCode* status)
*/
for (idx = 0; idx < gLocaleCount; idx++ ) {
myStatus = U_ZERO_ERROR;
- value = getHostID(&gPosixIDmap[idx], posixID, &myStatus);
+ value = getHostID(&gPosixIDmap[idx], posixID, myStatus);
if (myStatus == U_ZERO_ERROR) {
return value;
}
diff --git a/icu4c/source/common/locresdata.cpp b/icu4c/source/common/locresdata.cpp
index 00f0bc3..05cd24c 100644
--- a/icu4c/source/common/locresdata.cpp
+++ b/icu4c/source/common/locresdata.cpp
@@ -150,21 +150,23 @@ uloc_getTableStringWithFallback(const char *path, const char *locale,
return item;
}
-static ULayoutType
+namespace {
+
+ULayoutType
_uloc_getOrientationHelper(const char* localeId,
const char* key,
- UErrorCode *status)
+ UErrorCode& status)
{
ULayoutType result = ULOC_LAYOUT_UNKNOWN;
- if (!U_FAILURE(*status)) {
+ if (!U_FAILURE(status)) {
icu::CharString localeBuffer;
{
icu::CharStringByteSink sink(&localeBuffer);
ulocimp_canonicalize(localeId, sink, status);
}
- if (!U_FAILURE(*status)) {
+ if (!U_FAILURE(status)) {
int32_t length = 0;
const char16_t* const value =
uloc_getTableStringWithFallback(
@@ -174,9 +176,9 @@ _uloc_getOrientationHelper(const char* localeId,
nullptr,
key,
&length,
- status);
+ &status);
- if (!U_FAILURE(*status) && length != 0) {
+ if (!U_FAILURE(status) && length != 0) {
switch(value[0])
{
case 0x0062: /* 'b' */
@@ -192,7 +194,7 @@ _uloc_getOrientationHelper(const char* localeId,
result = ULOC_LAYOUT_TTB;
break;
default:
- *status = U_INTERNAL_PROGRAM_ERROR;
+ status = U_INTERNAL_PROGRAM_ERROR;
break;
}
}
@@ -202,11 +204,13 @@ _uloc_getOrientationHelper(const char* localeId,
return result;
}
+} // namespace
+
U_CAPI ULayoutType U_EXPORT2
uloc_getCharacterOrientation(const char* localeId,
UErrorCode *status)
{
- return _uloc_getOrientationHelper(localeId, "characters", status);
+ return _uloc_getOrientationHelper(localeId, "characters", *status);
}
/**
@@ -220,5 +224,5 @@ U_CAPI ULayoutType U_EXPORT2
uloc_getLineOrientation(const char* localeId,
UErrorCode *status)
{
- return _uloc_getOrientationHelper(localeId, "lines", status);
+ return _uloc_getOrientationHelper(localeId, "lines", *status);
}
diff --git a/icu4c/source/common/locutil.cpp b/icu4c/source/common/locutil.cpp
index f8416c9..1abecef 100644
--- a/icu4c/source/common/locutil.cpp
+++ b/icu4c/source/common/locutil.cpp
@@ -262,7 +262,7 @@ LocaleUtility::getAvailableLocaleNames(const UnicodeString& bundleID)
return htp;
}
-UBool
+bool
LocaleUtility::isFallbackOf(const UnicodeString& root, const UnicodeString& child)
{
return child.indexOf(root) == 0 &&
@@ -274,5 +274,3 @@ U_NAMESPACE_END
/* !UCONFIG_NO_SERVICE */
#endif
-
-
diff --git a/icu4c/source/common/locutil.h b/icu4c/source/common/locutil.h
index 31bfffd..8cf109c 100644
--- a/icu4c/source/common/locutil.h
+++ b/icu4c/source/common/locutil.h
@@ -28,7 +28,7 @@ class U_COMMON_API LocaleUtility {
static Locale& initLocaleFromName(const UnicodeString& id, Locale& result);
static UnicodeString& initNameFromLocale(const Locale& locale, UnicodeString& result);
static const Hashtable* getAvailableLocaleNames(const UnicodeString& bundleID);
- static UBool isFallbackOf(const UnicodeString& root, const UnicodeString& child);
+ static bool isFallbackOf(const UnicodeString& root, const UnicodeString& child);
};
U_NAMESPACE_END
diff --git a/icu4c/source/common/ucurr.cpp b/icu4c/source/common/ucurr.cpp
index a112df8..1d19c17 100644
--- a/icu4c/source/common/ucurr.cpp
+++ b/icu4c/source/common/ucurr.cpp
@@ -352,7 +352,7 @@ _findMetaData(const char16_t* currency, UErrorCode& ec) {
static CharString
idForLocale(const char* locale, UErrorCode* ec)
{
- return ulocimp_getRegionForSupplementalData(locale, false, ec);
+ return ulocimp_getRegionForSupplementalData(locale, false, *ec);
}
// ------------------------------------------
@@ -526,7 +526,7 @@ ucurr_forLocale(const char* locale,
CharString currency;
{
CharStringByteSink sink(¤cy);
- ulocimp_getKeywordValue(locale, "currency", sink, &localStatus);
+ ulocimp_getKeywordValue(locale, "currency", sink, localStatus);
}
int32_t resLen = currency.length();
@@ -605,7 +605,7 @@ ucurr_forLocale(const char* locale,
CharString parent;
{
CharStringByteSink sink(&parent);
- ulocimp_getParent(locale, sink, ec);
+ ulocimp_getParent(locale, sink, *ec);
}
*ec = U_USING_FALLBACK_WARNING;
// TODO: Loop over the parent rather than recursing and
@@ -647,7 +647,7 @@ static UBool fallback(CharString& loc) {
} else {
CharString tmp;
CharStringByteSink sink(&tmp);
- ulocimp_getParent(loc.data(), sink, &status);
+ ulocimp_getParent(loc.data(), sink, status);
loc = std::move(tmp);
}
/*
@@ -706,7 +706,7 @@ ucurr_getName(const char16_t* currency,
CharString loc;
{
CharStringByteSink sink(&loc);
- ulocimp_getName(locale, sink, &ec2);
+ ulocimp_getName(locale, sink, ec2);
}
if (U_FAILURE(ec2)) {
*ec = U_ILLEGAL_ARGUMENT_ERROR;
@@ -808,7 +808,7 @@ ucurr_getPluralName(const char16_t* currency,
CharString loc;
{
CharStringByteSink sink(&loc);
- ulocimp_getName(locale, sink, &ec2);
+ ulocimp_getName(locale, sink, ec2);
}
if (U_FAILURE(ec2)) {
*ec = U_ILLEGAL_ARGUMENT_ERROR;
@@ -1003,7 +1003,7 @@ collectCurrencyNames(const char* locale,
CharString loc;
{
CharStringByteSink sink(&loc);
- ulocimp_getName(locale, sink, &ec2);
+ ulocimp_getName(locale, sink, ec2);
}
if (U_FAILURE(ec2)) {
ec = U_ILLEGAL_ARGUMENT_ERROR;
@@ -2583,7 +2583,7 @@ static const UEnumeration defaultKeywordValues = {
U_CAPI UEnumeration *U_EXPORT2 ucurr_getKeywordValuesForLocale(const char *key, const char *locale, UBool commonlyUsed, UErrorCode* status) {
// Resolve region
- CharString prefRegion = ulocimp_getRegionForSupplementalData(locale, true, status);
+ CharString prefRegion = ulocimp_getRegionForSupplementalData(locale, true, *status);
// Read value from supplementalData
UList *values = ulist_createEmptyList(status);
diff --git a/icu4c/source/common/uloc.cpp b/icu4c/source/common/uloc.cpp
index 10f0b98..f5f2219 100644
--- a/icu4c/source/common/uloc.cpp
+++ b/icu4c/source/common/uloc.cpp
@@ -60,6 +60,8 @@ U_NAMESPACE_USE
U_CFUNC void locale_set_default(const char *id);
U_CFUNC const char *locale_get_default();
+namespace {
+
/* ### Data tables **************************************************/
/**
@@ -96,7 +98,7 @@ U_CFUNC const char *locale_get_default();
/* Generated using org.unicode.cldr.icu.GenerateISO639LanguageTables */
/* ISO639 table version is 20150505 */
/* Subsequent hand addition of selected languages */
-static const char * const LANGUAGES[] = {
+constexpr const char* LANGUAGES[] = {
"aa", "ab", "ace", "ach", "ada", "ady", "ae", "aeb",
"af", "afh", "agq", "ain", "ak", "akk", "akz", "ale",
"aln", "alt", "am", "an", "ang", "anp", "ar", "arc",
@@ -187,10 +189,10 @@ nullptr,
nullptr
};
-static const char* const DEPRECATED_LANGUAGES[]={
+constexpr const char* DEPRECATED_LANGUAGES[]={
"in", "iw", "ji", "jw", "mo", nullptr, nullptr
};
-static const char* const REPLACEMENT_LANGUAGES[]={
+constexpr const char* REPLACEMENT_LANGUAGES[]={
"id", "he", "yi", "jv", "ro", nullptr, nullptr
};
@@ -213,7 +215,7 @@ static const char* const REPLACEMENT_LANGUAGES[]={
/* Generated using org.unicode.cldr.icu.GenerateISO639LanguageTables */
/* ISO639 table version is 20150505 */
/* Subsequent hand addition of selected languages */
-static const char * const LANGUAGES_3[] = {
+constexpr const char* LANGUAGES_3[] = {
"aar", "abk", "ace", "ach", "ada", "ady", "ave", "aeb",
"afr", "afh", "agq", "ain", "aka", "akk", "akz", "ale",
"aln", "alt", "amh", "arg", "ang", "anp", "ara", "arc",
@@ -329,7 +331,7 @@ nullptr
* RO(ROM) is now RO(ROU) according to
* http://www.iso.org/iso/en/prods-services/iso3166ma/03updates-on-iso-3166/nlv3e-rou.html
*/
-static const char * const COUNTRIES[] = {
+constexpr const char* COUNTRIES[] = {
"AD", "AE", "AF", "AG", "AI", "AL", "AM",
"AO", "AQ", "AR", "AS", "AT", "AU", "AW", "AX", "AZ",
"BA", "BB", "BD", "BE", "BF", "BG", "BH", "BI",
@@ -365,10 +367,10 @@ nullptr,
nullptr
};
-static const char* const DEPRECATED_COUNTRIES[] = {
+constexpr const char* DEPRECATED_COUNTRIES[] = {
"AN", "BU", "CS", "DD", "DY", "FX", "HV", "NH", "RH", "SU", "TP", "UK", "VD", "YD", "YU", "ZR", nullptr, nullptr /* deprecated country list */
};
-static const char* const REPLACEMENT_COUNTRIES[] = {
+constexpr const char* REPLACEMENT_COUNTRIES[] = {
/* "AN", "BU", "CS", "DD", "DY", "FX", "HV", "NH", "RH", "SU", "TP", "UK", "VD", "YD", "YU", "ZR" */
"CW", "MM", "RS", "DE", "BJ", "FR", "BF", "VU", "ZW", "RU", "TL", "GB", "VN", "YE", "RS", "CD", nullptr, nullptr /* replacement country codes */
};
@@ -386,7 +388,7 @@ static const char* const REPLACEMENT_COUNTRIES[] = {
* second list, and another nullptr entry. The two lists correspond to
* the two lists in COUNTRIES.
*/
-static const char * const COUNTRIES_3[] = {
+constexpr const char* COUNTRIES_3[] = {
/* "AD", "AE", "AF", "AG", "AI", "AL", "AM", */
"AND", "ARE", "AFG", "ATG", "AIA", "ALB", "ARM",
/* "AO", "AQ", "AR", "AS", "AT", "AU", "AW", "AX", "AZ", */
@@ -462,7 +464,7 @@ typedef struct CanonicalizationMap {
* A map to canonicalize locale IDs. This handles a variety of
* different semantic kinds of transformations.
*/
-static const CanonicalizationMap CANONICALIZE_MAP[] = {
+constexpr CanonicalizationMap CANONICALIZE_MAP[] = {
{ "art__LOJBAN", "jbo" }, /* registered name */
{ "hy__AREVELA", "hy" }, /* Registered IANA variant */
{ "hy__AREVMDA", "hyw" }, /* Registered IANA variant */
@@ -476,8 +478,6 @@ static const CanonicalizationMap CANONICALIZE_MAP[] = {
{ "zh_YUE", "yue" }, /* registered name */
};
-namespace {
-
/* ### BCP47 Conversion *******************************************/
/* Gets the size of the shortest subtag in the given localeID. */
int32_t getShortestSubtagLength(const char *localeID) {
@@ -485,7 +485,7 @@ int32_t getShortestSubtagLength(const char *localeID) {
int32_t length = localeIDLength;
int32_t tmpLength = 0;
int32_t i;
- UBool reset = true;
+ bool reset = true;
for (i = 0; i < localeIDLength; i++) {
if (localeID[i] != '_' && localeID[i] != '-') {
@@ -544,24 +544,26 @@ locale_getKeywordsStart(const char *localeID) {
return nullptr;
}
+namespace {
+
/**
* @param keywordName incoming name to be canonicalized
* @param status return status (keyword too long)
* @return the keyword name
*/
-static CharString locale_canonKeywordName(const char *keywordName, UErrorCode *status)
+CharString locale_canonKeywordName(const char* keywordName, UErrorCode& status)
{
CharString result;
for (; *keywordName != 0; keywordName++) {
if (!UPRV_ISALPHANUM(*keywordName)) {
- *status = U_ILLEGAL_ARGUMENT_ERROR; /* malformed keyword name */
+ status = U_ILLEGAL_ARGUMENT_ERROR; /* malformed keyword name */
return result;
}
- result.append(uprv_tolower(*keywordName), *status);
+ result.append(uprv_tolower(*keywordName), status);
}
if (result.isEmpty()) {
- *status = U_ILLEGAL_ARGUMENT_ERROR; /* empty keyword name */
+ status = U_ILLEGAL_ARGUMENT_ERROR; /* empty keyword name */
}
return result;
@@ -574,19 +576,21 @@ typedef struct {
int32_t valueLen;
} KeywordStruct;
-static int32_t U_CALLCONV
+int32_t U_CALLCONV
compareKeywordStructs(const void * /*context*/, const void *left, const void *right) {
const char* leftString = ((const KeywordStruct *)left)->keyword;
const char* rightString = ((const KeywordStruct *)right)->keyword;
return uprv_strcmp(leftString, rightString);
}
-U_CFUNC void
-ulocimp_getKeywords(const char *localeID,
+} // namespace
+
+U_EXPORT void
+ulocimp_getKeywords(const char* localeID,
char prev,
ByteSink& sink,
- UBool valuesToo,
- UErrorCode *status)
+ bool valuesToo,
+ UErrorCode& status)
{
KeywordStruct keywordList[ULOC_MAX_NO_KEYWORDS];
@@ -600,7 +604,7 @@ ulocimp_getKeywords(const char *localeID,
if(prev == '@') { /* start of keyword definition */
/* we will grab pairs, trim spaces, lowercase keywords, sort and return */
do {
- UBool duplicate = false;
+ bool duplicate = false;
/* skip leading spaces */
while(*pos == ' ') {
pos++;
@@ -609,7 +613,7 @@ ulocimp_getKeywords(const char *localeID,
break;
}
if(numKeywords == maxKeywords) {
- *status = U_INTERNAL_PROGRAM_ERROR;
+ status = U_INTERNAL_PROGRAM_ERROR;
return;
}
equalSign = uprv_strchr(pos, '=');
@@ -617,13 +621,13 @@ ulocimp_getKeywords(const char *localeID,
/* lack of '=' [foo@currency] is illegal */
/* ';' before '=' [foo@currency;collation=pinyin] is illegal */
if(!equalSign || (semicolon && semicolon<equalSign)) {
- *status = U_INVALID_FORMAT_ERROR;
+ status = U_INVALID_FORMAT_ERROR;
return;
}
/* need to normalize both keyword and keyword name */
if(equalSign - pos >= ULOC_KEYWORD_BUFFER_LEN) {
/* keyword name too long for internal buffer */
- *status = U_INTERNAL_PROGRAM_ERROR;
+ status = U_INTERNAL_PROGRAM_ERROR;
return;
}
for(i = 0, n = 0; i < equalSign - pos; ++i) {
@@ -634,7 +638,7 @@ ulocimp_getKeywords(const char *localeID,
/* zero-length keyword is an error. */
if (n == 0) {
- *status = U_INVALID_FORMAT_ERROR;
+ status = U_INVALID_FORMAT_ERROR;
return;
}
@@ -649,7 +653,7 @@ ulocimp_getKeywords(const char *localeID,
/* Premature end or zero-length value */
if (!*equalSign || equalSign == semicolon) {
- *status = U_INVALID_FORMAT_ERROR;
+ status = U_INVALID_FORMAT_ERROR;
return;
}
@@ -684,7 +688,7 @@ ulocimp_getKeywords(const char *localeID,
/* now we have a list of keywords */
/* we need to sort it */
- uprv_sortArray(keywordList, numKeywords, sizeof(KeywordStruct), compareKeywordStructs, nullptr, false, status);
+ uprv_sortArray(keywordList, numKeywords, sizeof(KeywordStruct), compareKeywordStructs, nullptr, false, &status);
/* Now construct the keyword part */
for(i = 0; i < numKeywords; i++) {
@@ -713,7 +717,7 @@ uloc_getKeywordValue(const char* localeID,
}
CheckedArrayByteSink sink(buffer, bufferCapacity);
- ulocimp_getKeywordValue(localeID, keywordName, sink, status);
+ ulocimp_getKeywordValue(localeID, keywordName, sink, *status);
int32_t reslen = sink.NumberOfBytesAppended();
@@ -730,33 +734,33 @@ uloc_getKeywordValue(const char* localeID,
return reslen;
}
-U_CAPI void U_EXPORT2
+U_EXPORT void
ulocimp_getKeywordValue(const char* localeID,
const char* keywordName,
icu::ByteSink& sink,
- UErrorCode* status)
+ UErrorCode& status)
{
const char* startSearchHere = nullptr;
const char* nextSeparator = nullptr;
- if(status && U_SUCCESS(*status) && localeID) {
+ if (localeID != nullptr && U_SUCCESS(status)) {
CharString tempBuffer;
const char* tmpLocaleID;
if (keywordName == nullptr || keywordName[0] == 0) {
- *status = U_ILLEGAL_ARGUMENT_ERROR;
+ status = U_ILLEGAL_ARGUMENT_ERROR;
return;
}
CharString canonKeywordName = locale_canonKeywordName(keywordName, status);
- if(U_FAILURE(*status)) {
+ if (U_FAILURE(status)) {
return;
}
if (_hasBCP47Extension(localeID)) {
CharStringByteSink sink(&tempBuffer);
ulocimp_forLanguageTag(localeID, -1, sink, nullptr, status);
- tmpLocaleID = U_SUCCESS(*status) && !tempBuffer.isEmpty() ? tempBuffer.data() : localeID;
+ tmpLocaleID = U_SUCCESS(status) && !tempBuffer.isEmpty() ? tempBuffer.data() : localeID;
} else {
tmpLocaleID=localeID;
}
@@ -774,7 +778,7 @@ ulocimp_getKeywordValue(const char* localeID,
startSearchHere++; /* skip @ or ; */
nextSeparator = uprv_strchr(startSearchHere, '=');
if(!nextSeparator) {
- *status = U_ILLEGAL_ARGUMENT_ERROR; /* key must have =value */
+ status = U_ILLEGAL_ARGUMENT_ERROR; /* key must have =value */
return;
}
/* strip leading & trailing spaces (TC decided to tolerate these) */
@@ -788,18 +792,18 @@ ulocimp_getKeywordValue(const char* localeID,
/* now keyValueTail points to first char after the keyName */
/* copy & normalize keyName from locale */
if (startSearchHere == keyValueTail) {
- *status = U_ILLEGAL_ARGUMENT_ERROR; /* empty keyword name in passed-in locale */
+ status = U_ILLEGAL_ARGUMENT_ERROR; /* empty keyword name in passed-in locale */
return;
}
CharString localeKeywordName;
while (startSearchHere < keyValueTail) {
if (!UPRV_ISALPHANUM(*startSearchHere)) {
- *status = U_ILLEGAL_ARGUMENT_ERROR; /* malformed keyword name */
+ status = U_ILLEGAL_ARGUMENT_ERROR; /* malformed keyword name */
return;
}
- localeKeywordName.append(uprv_tolower(*startSearchHere++), *status);
+ localeKeywordName.append(uprv_tolower(*startSearchHere++), status);
}
- if (U_FAILURE(*status)) {
+ if (U_FAILURE(status)) {
return;
}
@@ -818,12 +822,12 @@ ulocimp_getKeywordValue(const char* localeID,
}
/* Now copy the value, but check well-formedness */
if (nextSeparator == keyValueTail) {
- *status = U_ILLEGAL_ARGUMENT_ERROR; /* empty key value name in passed-in locale */
+ status = U_ILLEGAL_ARGUMENT_ERROR; /* empty key value name in passed-in locale */
return;
}
while (nextSeparator < keyValueTail) {
if (!UPRV_ISALPHANUM(*nextSeparator) && !UPRV_OK_VALUE_PUNCTUATION(*nextSeparator)) {
- *status = U_ILLEGAL_ARGUMENT_ERROR; /* malformed key value */
+ status = U_ILLEGAL_ARGUMENT_ERROR; /* malformed key value */
return;
}
/* Should we lowercase value to return here? Tests expect as-is. */
@@ -863,7 +867,7 @@ uloc_setKeywordValue(const char* keywordName,
CheckedArrayByteSink sink(keywords == nullptr ? buffer + bufLen : keywords,
bufferCapacity - baseLen - 1);
int32_t reslen = ulocimp_setKeywordValue(
- keywords, keywordName, keywordValue, sink, status);
+ keywords, keywordName, keywordValue, sink, *status);
if (U_FAILURE(*status)) {
// A positive return value is a length, otherwise it's an error code.
@@ -878,13 +882,13 @@ uloc_setKeywordValue(const char* keywordName,
return u_terminateChars(buffer, bufferCapacity, reslen + baseLen, status);
}
-U_EXPORT void U_EXPORT2
+U_EXPORT void
ulocimp_setKeywordValue(const char* keywordName,
const char* keywordValue,
CharString& localeID,
- UErrorCode* status)
+ UErrorCode& status)
{
- if (U_FAILURE(*status)) return;
+ if (U_FAILURE(status)) { return; }
// This is safe because CharString::truncate() doesn't actually erase any
// data, but simply sets the position for where new data will be written.
const char* keywords = locale_getKeywordsStart(localeID.data());
@@ -893,12 +897,12 @@ ulocimp_setKeywordValue(const char* keywordName,
ulocimp_setKeywordValue(keywords, keywordName, keywordValue, sink, status);
}
-U_EXPORT int32_t U_EXPORT2
+U_EXPORT int32_t
ulocimp_setKeywordValue(const char* keywords,
const char* keywordName,
const char* keywordValue,
ByteSink& sink,
- UErrorCode* status)
+ UErrorCode& status)
{
/* TODO: sorting. removal. */
int32_t needLen = 0;
@@ -907,21 +911,21 @@ ulocimp_setKeywordValue(const char* keywords,
const char* nextEqualsign = nullptr;
const char* keywordStart = nullptr;
CharString updatedKeysAndValues;
- UBool handledInputKeyAndValue = false;
+ bool handledInputKeyAndValue = false;
char keyValuePrefix = '@';
- if(U_FAILURE(*status)) {
+ if (U_FAILURE(status)) {
return -1;
}
- if (*status == U_STRING_NOT_TERMINATED_WARNING) {
- *status = U_ZERO_ERROR;
+ if (status == U_STRING_NOT_TERMINATED_WARNING) {
+ status = U_ZERO_ERROR;
}
if (keywordName == nullptr || keywordName[0] == 0) {
- *status = U_ILLEGAL_ARGUMENT_ERROR;
+ status = U_ILLEGAL_ARGUMENT_ERROR;
return 0;
}
CharString canonKeywordName = locale_canonKeywordName(keywordName, status);
- if(U_FAILURE(*status)) {
+ if (U_FAILURE(status)) {
return 0;
}
@@ -929,20 +933,20 @@ ulocimp_setKeywordValue(const char* keywords,
if(keywordValue) {
while (*keywordValue != 0) {
if (!UPRV_ISALPHANUM(*keywordValue) && !UPRV_OK_VALUE_PUNCTUATION(*keywordValue)) {
- *status = U_ILLEGAL_ARGUMENT_ERROR; /* malformed key value */
+ status = U_ILLEGAL_ARGUMENT_ERROR; /* malformed key value */
return 0;
}
/* Should we force lowercase in value to set? */
- canonKeywordValue.append(*keywordValue++, *status);
+ canonKeywordValue.append(*keywordValue++, status);
}
}
- if (U_FAILURE(*status)) {
+ if (U_FAILURE(status)) {
return 0;
}
if (keywords == nullptr || keywords[1] == '\0') {
if (canonKeywordValue.isEmpty()) { /* no keywords = nothing to remove */
- U_ASSERT(*status != U_STRING_NOT_TERMINATED_WARNING);
+ U_ASSERT(status != U_STRING_NOT_TERMINATED_WARNING);
return 0;
}
@@ -951,7 +955,7 @@ ulocimp_setKeywordValue(const char* keywords,
char* buffer = sink.GetAppendBuffer(
needLen, needLen, nullptr, needLen, &capacity);
if (capacity < needLen || buffer == nullptr) {
- *status = U_BUFFER_OVERFLOW_ERROR;
+ status = U_BUFFER_OVERFLOW_ERROR;
return needLen; /* no change */
}
char* it = buffer;
@@ -962,7 +966,7 @@ ulocimp_setKeywordValue(const char* keywords,
*it++ = '=';
uprv_memcpy(it, canonKeywordValue.data(), canonKeywordValue.length());
sink.Append(buffer, needLen);
- U_ASSERT(*status != U_STRING_NOT_TERMINATED_WARNING);
+ U_ASSERT(status != U_STRING_NOT_TERMINATED_WARNING);
return needLen;
} /* end shortcut - no @ */
@@ -974,7 +978,7 @@ ulocimp_setKeywordValue(const char* keywords,
keywordStart++; /* skip @ or ; */
nextEqualsign = uprv_strchr(keywordStart, '=');
if (!nextEqualsign) {
- *status = U_ILLEGAL_ARGUMENT_ERROR; /* key must have =value */
+ status = U_ILLEGAL_ARGUMENT_ERROR; /* key must have =value */
return 0;
}
/* strip leading & trailing spaces (TC decided to tolerate these) */
@@ -988,18 +992,18 @@ ulocimp_setKeywordValue(const char* keywords,
/* now keyValueTail points to first char after the keyName */
/* copy & normalize keyName from locale */
if (keywordStart == keyValueTail) {
- *status = U_ILLEGAL_ARGUMENT_ERROR; /* empty keyword name in passed-in locale */
+ status = U_ILLEGAL_ARGUMENT_ERROR; /* empty keyword name in passed-in locale */
return 0;
}
CharString localeKeywordName;
while (keywordStart < keyValueTail) {
if (!UPRV_ISALPHANUM(*keywordStart)) {
- *status = U_ILLEGAL_ARGUMENT_ERROR; /* malformed keyword name */
+ status = U_ILLEGAL_ARGUMENT_ERROR; /* malformed keyword name */
return 0;
}
- localeKeywordName.append(uprv_tolower(*keywordStart++), *status);
+ localeKeywordName.append(uprv_tolower(*keywordStart++), status);
}
- if (U_FAILURE(*status)) {
+ if (U_FAILURE(status)) {
return 0;
}
@@ -1016,7 +1020,7 @@ ulocimp_setKeywordValue(const char* keywords,
keyValueTail--;
}
if (nextEqualsign == keyValueTail) {
- *status = U_ILLEGAL_ARGUMENT_ERROR; /* empty key value in passed-in locale */
+ status = U_ILLEGAL_ARGUMENT_ERROR; /* empty key value in passed-in locale */
return 0;
}
@@ -1024,38 +1028,38 @@ ulocimp_setKeywordValue(const char* keywords,
if(rc == 0) {
/* Current entry matches the input keyword. Update the entry */
if (!canonKeywordValue.isEmpty()) { /* updating a value */
- updatedKeysAndValues.append(keyValuePrefix, *status);
+ updatedKeysAndValues.append(keyValuePrefix, status);
keyValuePrefix = ';'; /* for any subsequent key-value pair */
- updatedKeysAndValues.append(canonKeywordName, *status);
- updatedKeysAndValues.append('=', *status);
- updatedKeysAndValues.append(canonKeywordValue, *status);
+ updatedKeysAndValues.append(canonKeywordName, status);
+ updatedKeysAndValues.append('=', status);
+ updatedKeysAndValues.append(canonKeywordValue, status);
} /* else removing this entry, don't emit anything */
handledInputKeyAndValue = true;
} else {
/* input keyword sorts earlier than current entry, add before current entry */
if (rc < 0 && !canonKeywordValue.isEmpty() && !handledInputKeyAndValue) {
/* insert new entry at this location */
- updatedKeysAndValues.append(keyValuePrefix, *status);
+ updatedKeysAndValues.append(keyValuePrefix, status);
keyValuePrefix = ';'; /* for any subsequent key-value pair */
- updatedKeysAndValues.append(canonKeywordName, *status);
- updatedKeysAndValues.append('=', *status);
- updatedKeysAndValues.append(canonKeywordValue, *status);
+ updatedKeysAndValues.append(canonKeywordName, status);
+ updatedKeysAndValues.append('=', status);
+ updatedKeysAndValues.append(canonKeywordValue, status);
handledInputKeyAndValue = true;
}
/* copy the current entry */
- updatedKeysAndValues.append(keyValuePrefix, *status);
+ updatedKeysAndValues.append(keyValuePrefix, status);
keyValuePrefix = ';'; /* for any subsequent key-value pair */
- updatedKeysAndValues.append(localeKeywordName, *status);
- updatedKeysAndValues.append('=', *status);
- updatedKeysAndValues.append(nextEqualsign, static_cast<int32_t>(keyValueTail-nextEqualsign), *status);
+ updatedKeysAndValues.append(localeKeywordName, status);
+ updatedKeysAndValues.append('=', status);
+ updatedKeysAndValues.append(nextEqualsign, static_cast<int32_t>(keyValueTail-nextEqualsign), status);
}
if (!nextSeparator && !canonKeywordValue.isEmpty() && !handledInputKeyAndValue) {
/* append new entry at the end, it sorts later than existing entries */
- updatedKeysAndValues.append(keyValuePrefix, *status);
+ updatedKeysAndValues.append(keyValuePrefix, status);
/* skip keyValuePrefix update, no subsequent key-value pair */
- updatedKeysAndValues.append(canonKeywordName, *status);
- updatedKeysAndValues.append('=', *status);
- updatedKeysAndValues.append(canonKeywordValue, *status);
+ updatedKeysAndValues.append(canonKeywordName, status);
+ updatedKeysAndValues.append('=', status);
+ updatedKeysAndValues.append(canonKeywordValue, status);
handledInputKeyAndValue = true;
}
keywordStart = nextSeparator;
@@ -1069,10 +1073,10 @@ ulocimp_setKeywordValue(const char* keywords,
* error return but the passed-in locale is unmodified and the original bufLen is
* returned.
*/
- if (!handledInputKeyAndValue || U_FAILURE(*status)) {
+ if (!handledInputKeyAndValue || U_FAILURE(status)) {
/* if input key/value specified removal of a keyword not present in locale, or
* there was an error in CharString.append, leave original locale alone. */
- U_ASSERT(*status != U_STRING_NOT_TERMINATED_WARNING);
+ U_ASSERT(status != U_STRING_NOT_TERMINATED_WARNING);
return (int32_t)uprv_strlen(keywords);
}
@@ -1088,13 +1092,13 @@ ulocimp_setKeywordValue(const char* keywords,
char* buffer = sink.GetAppendBuffer(
needLen, needLen, nullptr, needLen, &capacity);
if (capacity < needLen || buffer == nullptr) {
- *status = U_BUFFER_OVERFLOW_ERROR;
+ status = U_BUFFER_OVERFLOW_ERROR;
return needLen;
}
uprv_memcpy(buffer, updatedKeysAndValues.data(), needLen);
sink.Append(buffer, needLen);
}
- U_ASSERT(*status != U_STRING_NOT_TERMINATED_WARNING);
+ U_ASSERT(status != U_STRING_NOT_TERMINATED_WARNING);
return needLen;
}
@@ -1121,8 +1125,6 @@ inline bool _isBCP47Extension(const char* p) {
p[2] == '-';
}
-} // namespace
-
/**
* Lookup 'key' in the array 'list'. The array 'list' should contain
* a nullptr entry, followed by more entries, and a second nullptr entry.
@@ -1130,7 +1132,7 @@ inline bool _isBCP47Extension(const char* p) {
* The 'list' param should be LANGUAGES, LANGUAGES_3, COUNTRIES, or
* COUNTRIES_3.
*/
-static int16_t _findIndex(const char* const* list, const char* key)
+int16_t _findIndex(const char* const* list, const char* key)
{
const char* const* anchor = list;
int32_t pass = 0;
@@ -1148,6 +1150,8 @@ static int16_t _findIndex(const char* const* list, const char* key)
return -1;
}
+} // namespace
+
U_CFUNC const char*
uloc_getCurrentCountryID(const char* oldID){
int32_t offset = _findIndex(DEPRECATED_COUNTRIES, oldID);
@@ -1164,6 +1168,9 @@ uloc_getCurrentLanguageID(const char* oldID){
}
return oldID;
}
+
+namespace {
+
/*
* the internal functions _getLanguage(), _getScript(), _getRegion(), _getVariant()
* avoid duplicating code to handle the earlier locale ID pieces
@@ -1172,7 +1179,8 @@ uloc_getCurrentLanguageID(const char* oldID){
*
* TODO try to use this in Locale
*/
-static void
+
+void
_getLanguage(const char* localeID,
ByteSink* sink,
const char** pEnd,
@@ -1233,7 +1241,7 @@ _getLanguage(const char* localeID,
sink->Append(buffer, len);
}
-static void
+void
_getScript(const char* localeID,
ByteSink* sink,
const char** pEnd) {
@@ -1266,7 +1274,7 @@ _getScript(const char* localeID,
sink->Append(buffer, LENGTH);
}
-static void
+void
_getRegion(const char* localeID,
ByteSink* sink,
const char** pEnd) {
@@ -1318,13 +1326,13 @@ _getRegion(const char* localeID,
* @param needSeparator if true, then add leading '_' if any variants
* are added to 'variant'
*/
-static void
+void
_getVariant(const char* localeID,
char prev,
ByteSink* sink,
const char** pEnd,
- UBool needSeparator) {
- UBool hasVariant = false;
+ bool needSeparator) {
+ bool hasVariant = false;
if (pEnd != nullptr) { *pEnd = localeID; }
/* get one or more variant tags and separate them with '_' */
@@ -1375,7 +1383,9 @@ _getVariant(const char* localeID,
}
}
-U_EXPORT CharString U_EXPORT2
+} // namespace
+
+U_EXPORT CharString
ulocimp_getLanguage(const char* localeID, UErrorCode& status) {
CharString language;
CharStringByteSink sink(&language);
@@ -1390,7 +1400,7 @@ ulocimp_getLanguage(const char* localeID, UErrorCode& status) {
return language;
}
-U_EXPORT CharString U_EXPORT2
+U_EXPORT CharString
ulocimp_getScript(const char* localeID, UErrorCode& status) {
CharString script;
CharStringByteSink sink(&script);
@@ -1405,7 +1415,7 @@ ulocimp_getScript(const char* localeID, UErrorCode& status) {
return script;
}
-U_EXPORT CharString U_EXPORT2
+U_EXPORT CharString
ulocimp_getRegion(const char* localeID, UErrorCode& status) {
CharString region;
CharStringByteSink sink(®ion);
@@ -1420,7 +1430,7 @@ ulocimp_getRegion(const char* localeID, UErrorCode& status) {
return region;
}
-U_EXPORT CharString U_EXPORT2
+U_EXPORT CharString
ulocimp_getVariant(const char* localeID, UErrorCode& status) {
CharString variant;
CharStringByteSink sink(&variant);
@@ -1435,7 +1445,7 @@ ulocimp_getVariant(const char* localeID, UErrorCode& status) {
return variant;
}
-U_EXPORT void U_EXPORT2
+U_EXPORT void
ulocimp_getSubtags(
const char* localeID,
CharString* language,
@@ -1464,7 +1474,7 @@ ulocimp_getSubtags(
status);
}
-U_EXPORT void U_EXPORT2
+U_EXPORT void
ulocimp_getSubtags(
const char* localeID,
ByteSink* language,
@@ -1647,7 +1657,7 @@ uloc_openKeywords(const char* localeID,
if (_hasBCP47Extension(localeID)) {
CharStringByteSink sink(&tempBuffer);
- ulocimp_forLanguageTag(localeID, -1, sink, nullptr, status);
+ ulocimp_forLanguageTag(localeID, -1, sink, nullptr, *status);
tmpLocaleID = U_SUCCESS(*status) && !tempBuffer.isEmpty() ? tempBuffer.data() : localeID;
} else {
if (localeID==nullptr) {
@@ -1672,7 +1682,7 @@ uloc_openKeywords(const char* localeID,
if((tmpLocaleID = locale_getKeywordsStart(tmpLocaleID)) != nullptr) {
CharString keywords;
CharStringByteSink sink(&keywords);
- ulocimp_getKeywords(tmpLocaleID+1, '@', sink, false, status);
+ ulocimp_getKeywords(tmpLocaleID+1, '@', sink, false, *status);
if (U_FAILURE(*status)) {
return nullptr;
}
@@ -1693,8 +1703,6 @@ inline bool OPTION_SET(uint32_t options, uint32_t mask) { return (options & mask
constexpr char i_default[] = {'i', '-', 'd', 'e', 'f', 'a', 'u', 'l', 't'};
constexpr int32_t I_DEFAULT_LENGTH = UPRV_LENGTHOF(i_default);
-} // namespace
-
/**
* Canonicalize the given localeID, to level 1 or to level 2,
* depending on the options. To specify level 1, pass in options=0.
@@ -1702,12 +1710,12 @@ constexpr int32_t I_DEFAULT_LENGTH = UPRV_LENGTHOF(i_default);
*
* This is the code underlying uloc_getName and uloc_canonicalize.
*/
-static void
+void
_canonicalize(const char* localeID,
ByteSink& sink,
uint32_t options,
- UErrorCode* err) {
- if (U_FAILURE(*err)) {
+ UErrorCode& err) {
+ if (U_FAILURE(err)) {
return;
}
@@ -1724,8 +1732,8 @@ _canonicalize(const char* localeID,
// convert all underbars to hyphens, unless the "BCP47 extension" comes at the beginning of the string
if (uprv_strchr(localeID, '_') != nullptr && localeID[1] != '-' && localeID[1] != '_') {
- localeIDWithHyphens.append(localeID, -1, *err);
- if (U_SUCCESS(*err)) {
+ localeIDWithHyphens.append(localeID, -1, err);
+ if (U_SUCCESS(err)) {
for (char* p = localeIDWithHyphens.data(); *p != '\0'; ++p) {
if (*p == '_') {
*p = '-';
@@ -1737,7 +1745,7 @@ _canonicalize(const char* localeID,
CharStringByteSink tempSink(&tempBuffer);
ulocimp_forLanguageTag(localeIDPtr, -1, tempSink, nullptr, err);
- tmpLocaleID = U_SUCCESS(*err) && !tempBuffer.isEmpty() ? tempBuffer.data() : localeIDPtr;
+ tmpLocaleID = U_SUCCESS(err) && !tempBuffer.isEmpty() ? tempBuffer.data() : localeIDPtr;
} else {
if (localeID==nullptr) {
localeID=uloc_getDefault();
@@ -1759,36 +1767,36 @@ _canonicalize(const char* localeID,
&country,
&variant,
&tmpLocaleID,
- *err);
+ err);
if (tag.length() == I_DEFAULT_LENGTH &&
uprv_strncmp(origLocaleID, i_default, I_DEFAULT_LENGTH) == 0) {
tag.clear();
- tag.append(uloc_getDefault(), *err);
+ tag.append(uloc_getDefault(), err);
} else {
if (!script.isEmpty()) {
++fieldCount;
- tag.append('_', *err);
- tag.append(script, *err);
+ tag.append('_', err);
+ tag.append(script, err);
}
if (!country.isEmpty()) {
++fieldCount;
- tag.append('_', *err);
- tag.append(country, *err);
+ tag.append('_', err);
+ tag.append(country, err);
}
if (!variant.isEmpty()) {
++fieldCount;
if (country.isEmpty()) {
- tag.append('_', *err);
+ tag.append('_', err);
}
- tag.append('_', *err);
- tag.append(variant, *err);
+ tag.append('_', err);
+ tag.append(variant, err);
}
}
/* Copy POSIX-style charset specifier, if any [mr.utf8] */
if (!OPTION_SET(options, _ULOC_CANONICALIZE) && *tmpLocaleID == '.') {
- UBool done = false;
+ bool done = false;
do {
char c = *tmpLocaleID;
switch (c) {
@@ -1797,7 +1805,7 @@ _canonicalize(const char* localeID,
done = true;
break;
default:
- tag.append(c, *err);
+ tag.append(c, err);
++tmpLocaleID;
break;
}
@@ -1819,7 +1827,7 @@ _canonicalize(const char* localeID,
if (c == 0) {
break;
}
- tag.append(c, *err);
+ tag.append(c, err);
++tmpLocaleID;
}
}
@@ -1830,7 +1838,7 @@ _canonicalize(const char* localeID,
/* Add missing '_' if needed */
if (fieldCount < 2 || (fieldCount < 3 && !script.isEmpty())) {
do {
- tag.append('_', *err);
+ tag.append('_', err);
++fieldCount;
} while(fieldCount<2);
}
@@ -1847,7 +1855,7 @@ _canonicalize(const char* localeID,
break; /* Don't remap "" if keywords present */
}
tag.clear();
- tag.append(CANONICALIZE_MAP[j].canonicalID, *err);
+ tag.append(CANONICALIZE_MAP[j].canonicalID, err);
break;
}
}
@@ -1865,6 +1873,8 @@ _canonicalize(const char* localeID,
}
}
+} // namespace
+
/* ### ID parsing API **************************************************/
U_CAPI int32_t U_EXPORT2
@@ -1878,7 +1888,7 @@ uloc_getParent(const char* localeID,
}
CheckedArrayByteSink sink(parent, parentCapacity);
- ulocimp_getParent(localeID, sink, err);
+ ulocimp_getParent(localeID, sink, *err);
int32_t reslen = sink.NumberOfBytesAppended();
@@ -1895,15 +1905,15 @@ uloc_getParent(const char* localeID,
return reslen;
}
-U_CAPI void U_EXPORT2
+U_EXPORT void
ulocimp_getParent(const char* localeID,
icu::ByteSink& sink,
- UErrorCode* err)
+ UErrorCode& err)
{
const char *lastUnderscore;
int32_t i;
- if (U_FAILURE(*err))
+ if (U_FAILURE(err))
return;
if (localeID == nullptr)
@@ -2074,7 +2084,7 @@ uloc_getName(const char* localeID,
}
CheckedArrayByteSink sink(name, nameCapacity);
- ulocimp_getName(localeID, sink, err);
+ ulocimp_getName(localeID, sink, *err);
int32_t reslen = sink.NumberOfBytesAppended();
@@ -2091,10 +2101,10 @@ uloc_getName(const char* localeID,
return reslen;
}
-U_CAPI void U_EXPORT2
+U_EXPORT void
ulocimp_getName(const char* localeID,
ByteSink& sink,
- UErrorCode* err)
+ UErrorCode& err)
{
_canonicalize(localeID, sink, 0, err);
}
@@ -2110,7 +2120,7 @@ uloc_getBaseName(const char* localeID,
}
CheckedArrayByteSink sink(name, nameCapacity);
- ulocimp_getBaseName(localeID, sink, err);
+ ulocimp_getBaseName(localeID, sink, *err);
int32_t reslen = sink.NumberOfBytesAppended();
@@ -2127,10 +2137,10 @@ uloc_getBaseName(const char* localeID,
return reslen;
}
-U_CAPI void U_EXPORT2
+U_EXPORT void
ulocimp_getBaseName(const char* localeID,
ByteSink& sink,
- UErrorCode* err)
+ UErrorCode& err)
{
_canonicalize(localeID, sink, _ULOC_STRIP_KEYWORDS, err);
}
@@ -2146,7 +2156,7 @@ uloc_canonicalize(const char* localeID,
}
CheckedArrayByteSink sink(name, nameCapacity);
- ulocimp_canonicalize(localeID, sink, err);
+ ulocimp_canonicalize(localeID, sink, *err);
int32_t reslen = sink.NumberOfBytesAppended();
@@ -2163,10 +2173,10 @@ uloc_canonicalize(const char* localeID,
return reslen;
}
-U_CAPI void U_EXPORT2
+U_EXPORT void
ulocimp_canonicalize(const char* localeID,
ByteSink& sink,
- UErrorCode* err)
+ UErrorCode& err)
{
_canonicalize(localeID, sink, _ULOC_CANONICALIZE, err);
}
@@ -2243,15 +2253,15 @@ uloc_getLCID(const char* localeID)
CharString collVal;
{
CharStringByteSink sink(&collVal);
- ulocimp_getKeywordValue(localeID, "collation", sink, &status);
+ ulocimp_getKeywordValue(localeID, "collation", sink, status);
}
if (U_SUCCESS(status) && !collVal.isEmpty()) {
CharString tmpLocaleID;
{
CharStringByteSink sink(&tmpLocaleID);
- ulocimp_getBaseName(localeID, sink, &status);
+ ulocimp_getBaseName(localeID, sink, status);
}
- ulocimp_setKeywordValue("collation", collVal.data(), tmpLocaleID, &status);
+ ulocimp_setKeywordValue("collation", collVal.data(), tmpLocaleID, status);
if (U_SUCCESS(status)) {
return uprv_convertToLCID(langID.data(), tmpLocaleID.data(), &status);
}
@@ -2337,7 +2347,9 @@ uloc_toUnicodeLocaleType(const char* keyword, const char* value)
return bcpType;
}
-static UBool
+namespace {
+
+bool
isWellFormedLegacyKey(const char* legacyKey)
{
const char* p = legacyKey;
@@ -2350,7 +2362,7 @@ isWellFormedLegacyKey(const char* legacyKey)
return true;
}
-static UBool
+bool
isWellFormedLegacyType(const char* legacyType)
{
const char* p = legacyType;
@@ -2371,6 +2383,8 @@ isWellFormedLegacyType(const char* legacyType)
return (alphaNumLen != 0);
}
+} // namespace
+
U_CAPI const char* U_EXPORT2
uloc_toLegacyKey(const char* keyword)
{
diff --git a/icu4c/source/common/uloc_keytype.cpp b/icu4c/source/common/uloc_keytype.cpp
index a84b860..38694d4 100644
--- a/icu4c/source/common/uloc_keytype.cpp
+++ b/icu4c/source/common/uloc_keytype.cpp
@@ -74,8 +74,9 @@ uloc_key_type_cleanup() {
U_CDECL_END
+namespace {
-static void U_CALLCONV
+void U_CALLCONV
initFromResourceBundle(UErrorCode& sts) {
U_NAMESPACE_USE
ucln_common_registerCleanup(UCLN_COMMON_LOCALE_KEY_TYPE, uloc_key_type_cleanup);
@@ -141,7 +142,7 @@ initFromResourceBundle(UErrorCode& sts) {
bcpKeyId = bcpKeyIdBuf->data();
}
- UBool isTZ = uprv_strcmp(legacyKeyId, "timezone") == 0;
+ bool isTZ = uprv_strcmp(legacyKeyId, "timezone") == 0;
UHashtable* typeDataMap = uhash_open(uhash_hashIChars, uhash_compareIChars, nullptr, &sts);
if (U_FAILURE(sts)) {
@@ -351,7 +352,7 @@ initFromResourceBundle(UErrorCode& sts) {
}
}
-static UBool
+bool
init() {
UErrorCode sts = U_ZERO_ERROR;
umtx_initOnce(gLocExtKeyMapInitOnce, &initFromResourceBundle, sts);
@@ -361,7 +362,7 @@ init() {
return true;
}
-static UBool
+bool
isSpecialTypeCodepoints(const char* val) {
int32_t subtagLen = 0;
const char* p = val;
@@ -383,7 +384,7 @@ isSpecialTypeCodepoints(const char* val) {
return (subtagLen >= 4 && subtagLen <= 6);
}
-static UBool
+bool
isSpecialTypeReorderCode(const char* val) {
int32_t subtagLen = 0;
const char* p = val;
@@ -403,7 +404,7 @@ isSpecialTypeReorderCode(const char* val) {
return (subtagLen >=3 && subtagLen <=8);
}
-static UBool
+bool
isSpecialTypeRgKeyValue(const char* val) {
int32_t subtagLen = 0;
const char* p = val;
@@ -419,7 +420,9 @@ isSpecialTypeRgKeyValue(const char* val) {
return (subtagLen == 6);
}
-U_CFUNC const char*
+} // namespace
+
+U_EXPORT const char*
ulocimp_toBcpKey(const char* key) {
if (!init()) {
return nullptr;
@@ -432,7 +435,7 @@ ulocimp_toBcpKey(const char* key) {
return nullptr;
}
-U_CFUNC const char*
+U_EXPORT const char*
ulocimp_toLegacyKey(const char* key) {
if (!init()) {
return nullptr;
@@ -445,8 +448,8 @@ ulocimp_toLegacyKey(const char* key) {
return nullptr;
}
-U_CFUNC const char*
-ulocimp_toBcpType(const char* key, const char* type, UBool* isKnownKey, UBool* isSpecialType) {
+U_EXPORT const char*
+ulocimp_toBcpType(const char* key, const char* type, bool* isKnownKey, bool* isSpecialType) {
if (isKnownKey != nullptr) {
*isKnownKey = false;
}
@@ -468,7 +471,7 @@ ulocimp_toBcpType(const char* key, const char* type, UBool* isKnownKey, UBool* i
return t->bcpId;
}
if (keyData->specialTypes != SPECIALTYPE_NONE) {
- UBool matched = false;
+ bool matched = false;
if (keyData->specialTypes & SPECIALTYPE_CODEPOINTS) {
matched = isSpecialTypeCodepoints(type);
}
@@ -490,8 +493,8 @@ ulocimp_toBcpType(const char* key, const char* type, UBool* isKnownKey, UBool* i
}
-U_CFUNC const char*
-ulocimp_toLegacyType(const char* key, const char* type, UBool* isKnownKey, UBool* isSpecialType) {
+U_EXPORT const char*
+ulocimp_toLegacyType(const char* key, const char* type, bool* isKnownKey, bool* isSpecialType) {
if (isKnownKey != nullptr) {
*isKnownKey = false;
}
@@ -513,7 +516,7 @@ ulocimp_toLegacyType(const char* key, const char* type, UBool* isKnownKey, UBool
return t->legacyId;
}
if (keyData->specialTypes != SPECIALTYPE_NONE) {
- UBool matched = false;
+ bool matched = false;
if (keyData->specialTypes & SPECIALTYPE_CODEPOINTS) {
matched = isSpecialTypeCodepoints(type);
}
@@ -533,4 +536,3 @@ ulocimp_toLegacyType(const char* key, const char* type, UBool* isKnownKey, UBool
}
return nullptr;
}
-
diff --git a/icu4c/source/common/uloc_tag.cpp b/icu4c/source/common/uloc_tag.cpp
index 0303736..b89867f 100644
--- a/icu4c/source/common/uloc_tag.cpp
+++ b/icu4c/source/common/uloc_tag.cpp
@@ -26,6 +26,7 @@
#include "ulocimp.h"
#include "uassert.h"
+namespace {
/* struct holding a single variant */
typedef struct VariantListEntry : public icu::UMemory {
@@ -69,20 +70,18 @@ typedef struct ULanguageTag {
#define LOCALE_KEYWORD_SEP ';'
#define LOCALE_KEY_TYPE_SEP '='
-namespace {
constexpr auto ISALPHA = uprv_isASCIILetter;
inline bool ISNUMERIC(char c) { return c >= '0' && c <= '9'; }
-} // namespace
-static const char EMPTY[] = "";
-static const char LANG_UND[] = "und";
-static const char PRIVATEUSE_KEY[] = "x";
-static const char _POSIX[] = "_POSIX";
-static const char POSIX_KEY[] = "va";
-static const char POSIX_VALUE[] = "posix";
-static const char LOCALE_ATTRIBUTE_KEY[] = "attribute";
-static const char PRIVUSE_VARIANT_PREFIX[] = "lvariant";
-static const char LOCALE_TYPE_YES[] = "yes";
+constexpr char EMPTY[] = "";
+constexpr char LANG_UND[] = "und";
+constexpr char PRIVATEUSE_KEY[] = "x";
+constexpr char _POSIX[] = "_POSIX";
+constexpr char POSIX_KEY[] = "va";
+constexpr char POSIX_VALUE[] = "posix";
+constexpr char LOCALE_ATTRIBUTE_KEY[] = "attribute";
+constexpr char PRIVUSE_VARIANT_PREFIX[] = "lvariant";
+constexpr char LOCALE_TYPE_YES[] = "yes";
#define LANG_UND_LEN 3
@@ -106,7 +105,7 @@ static const char LOCALE_TYPE_YES[] = "yes";
values. They may have to be removed for the strict BCP 47 compliance.
*/
-static const char* const LEGACY[] = {
+constexpr const char* LEGACY[] = {
/* legacy preferred */
"art-lojban", "jbo",
"en-gb-oed", "en-gb-oxendict",
@@ -155,7 +154,7 @@ static const char* const LEGACY[] = {
a variant tag 'hepburn-heploc' has the preferred subtag, 'alaic97'.
*/
-static const char* const REDUNDANT[] = {
+constexpr const char* REDUNDANT[] = {
// redundant preferred
"sgn-br", "bzs",
"sgn-co", "csn",
@@ -197,7 +196,7 @@ static const char* const REDUNDANT[] = {
Make sure that 2-letter language subtags come before 3-letter subtags.
*/
-static const char DEPRECATEDLANGS[][4] = {
+constexpr char DEPRECATEDLANGS[][4] = {
/* deprecated new */
"in", "id",
"iw", "he",
@@ -287,7 +286,7 @@ static const char DEPRECATEDLANGS[][4] = {
grep -B1 'Preferred' | \
awk -n '/Subtag/ {printf(" \"%s\", ", $2);} /Preferred/ {printf("\"%s\",\n", $2);}'
*/
-static const char DEPRECATEDREGIONS[][3] = {
+constexpr char DEPRECATEDREGIONS[][3] = {
/* deprecated new */
"BU", "MM",
"DD", "DE",
@@ -305,55 +304,57 @@ static const char DEPRECATEDREGIONS[][3] = {
* -------------------------------------------------
*/
-static ULanguageTag*
-ultag_parse(const char* tag, int32_t tagLen, int32_t* parsedLen, UErrorCode* status);
+ULanguageTag*
+ultag_parse(const char* tag, int32_t tagLen, int32_t* parsedLen, UErrorCode& status);
-static void
+void
ultag_close(ULanguageTag* langtag);
-static const char*
+const char*
ultag_getLanguage(const ULanguageTag* langtag);
#if 0
-static const char*
+const char*
ultag_getJDKLanguage(const ULanguageTag* langtag);
#endif
-static const char*
+const char*
ultag_getExtlang(const ULanguageTag* langtag, int32_t idx);
-static int32_t
+int32_t
ultag_getExtlangSize(const ULanguageTag* langtag);
-static const char*
+const char*
ultag_getScript(const ULanguageTag* langtag);
-static const char*
+const char*
ultag_getRegion(const ULanguageTag* langtag);
-static const char*
+const char*
ultag_getVariant(const ULanguageTag* langtag, int32_t idx);
-static int32_t
+int32_t
ultag_getVariantsSize(const ULanguageTag* langtag);
-static const char*
+const char*
ultag_getExtensionKey(const ULanguageTag* langtag, int32_t idx);
-static const char*
+const char*
ultag_getExtensionValue(const ULanguageTag* langtag, int32_t idx);
-static int32_t
+int32_t
ultag_getExtensionsSize(const ULanguageTag* langtag);
-static const char*
+const char*
ultag_getPrivateUse(const ULanguageTag* langtag);
#if 0
-static const char*
+const char*
ultag_getLegacy(const ULanguageTag* langtag);
#endif
+} // namespace
+
U_NAMESPACE_BEGIN
/**
@@ -377,7 +378,9 @@ U_NAMESPACE_END
* -------------------------------------------------
*/
-static UBool
+namespace {
+
+bool
_isAlphaString(const char* s, int32_t len) {
int32_t i;
for (i = 0; i < len; i++) {
@@ -388,7 +391,7 @@ _isAlphaString(const char* s, int32_t len) {
return true;
}
-static UBool
+bool
_isNumericString(const char* s, int32_t len) {
int32_t i;
for (i = 0; i < len; i++) {
@@ -399,7 +402,7 @@ _isNumericString(const char* s, int32_t len) {
return true;
}
-static UBool
+bool
_isAlphaNumericString(const char* s, int32_t len) {
int32_t i;
for (i = 0; i < len; i++) {
@@ -410,7 +413,7 @@ _isAlphaNumericString(const char* s, int32_t len) {
return true;
}
-static UBool
+bool
_isAlphaNumericStringLimitedLength(const char* s, int32_t len, int32_t min, int32_t max) {
if (len < 0) {
len = (int32_t)uprv_strlen(s);
@@ -421,7 +424,9 @@ _isAlphaNumericStringLimitedLength(const char* s, int32_t len, int32_t min, int3
return false;
}
-U_CFUNC UBool
+} // namespace
+
+bool
ultag_isLanguageSubtag(const char* s, int32_t len) {
/*
* unicode_language_subtag = alpha{2,3} | alpha{5,8};
@@ -437,7 +442,9 @@ ultag_isLanguageSubtag(const char* s, int32_t len) {
return false;
}
-static UBool
+namespace {
+
+bool
_isExtlangSubtag(const char* s, int32_t len) {
/*
* extlang = 3ALPHA ; selected ISO 639 codes
@@ -452,7 +459,9 @@ _isExtlangSubtag(const char* s, int32_t len) {
return false;
}
-U_CFUNC UBool
+} // namespace
+
+bool
ultag_isScriptSubtag(const char* s, int32_t len) {
/*
* script = 4ALPHA ; ISO 15924 code
@@ -466,7 +475,7 @@ ultag_isScriptSubtag(const char* s, int32_t len) {
return false;
}
-U_CFUNC UBool
+bool
ultag_isRegionSubtag(const char* s, int32_t len) {
/*
* region = 2ALPHA ; ISO 3166-1 code
@@ -484,7 +493,9 @@ ultag_isRegionSubtag(const char* s, int32_t len) {
return false;
}
-static UBool
+namespace {
+
+bool
_isVariantSubtag(const char* s, int32_t len) {
/*
* variant = 5*8alphanum ; registered variants
@@ -502,8 +513,8 @@ _isVariantSubtag(const char* s, int32_t len) {
return false;
}
-static UBool
-_isSepListOf(UBool (*test)(const char*, int32_t), const char* s, int32_t len) {
+bool
+_isSepListOf(bool (*test)(const char*, int32_t), const char* s, int32_t len) {
const char *p = s;
const char *pSubtag = nullptr;
@@ -531,13 +542,17 @@ _isSepListOf(UBool (*test)(const char*, int32_t), const char* s, int32_t len) {
return test(pSubtag, (int32_t)(p - pSubtag));
}
-U_CFUNC UBool
+} // namespace
+
+bool
ultag_isVariantSubtags(const char* s, int32_t len) {
return _isSepListOf(&_isVariantSubtag, s, len);
}
+namespace {
+
// This is for the ICU-specific "lvariant" handling.
-static UBool
+bool
_isPrivateuseVariantSubtag(const char* s, int32_t len) {
/*
* variant = 1*8alphanum ; registered variants
@@ -546,7 +561,7 @@ _isPrivateuseVariantSubtag(const char* s, int32_t len) {
return _isAlphaNumericStringLimitedLength(s, len , 1, 8);
}
-static UBool
+bool
_isExtensionSingleton(const char* s, int32_t len) {
/*
* extension = singleton 1*("-" (2*8alphanum))
@@ -566,7 +581,7 @@ _isExtensionSingleton(const char* s, int32_t len) {
return false;
}
-static UBool
+bool
_isExtensionSubtag(const char* s, int32_t len) {
/*
* extension = singleton 1*("-" (2*8alphanum))
@@ -574,12 +589,16 @@ _isExtensionSubtag(const char* s, int32_t len) {
return _isAlphaNumericStringLimitedLength(s, len, 2, 8);
}
-U_CFUNC UBool
+} // namespace
+
+bool
ultag_isExtensionSubtags(const char* s, int32_t len) {
return _isSepListOf(&_isExtensionSubtag, s, len);
}
-static UBool
+namespace {
+
+bool
_isPrivateuseValueSubtag(const char* s, int32_t len) {
/*
* privateuse = "x" 1*("-" (1*8alphanum))
@@ -587,12 +606,14 @@ _isPrivateuseValueSubtag(const char* s, int32_t len) {
return _isAlphaNumericStringLimitedLength(s, len, 1, 8);
}
-U_CFUNC UBool
+} // namespace
+
+bool
ultag_isPrivateuseValueSubtags(const char* s, int32_t len) {
return _isSepListOf(&_isPrivateuseValueSubtag, s, len);
}
-U_CFUNC UBool
+bool
ultag_isUnicodeLocaleAttribute(const char* s, int32_t len) {
/*
* attribute = alphanum{3,8} ;
@@ -600,12 +621,12 @@ ultag_isUnicodeLocaleAttribute(const char* s, int32_t len) {
return _isAlphaNumericStringLimitedLength(s, len , 3, 8);
}
-U_CFUNC UBool
+bool
ultag_isUnicodeLocaleAttributes(const char* s, int32_t len) {
return _isSepListOf(&ultag_isUnicodeLocaleAttribute, s, len);
}
-U_CFUNC UBool
+bool
ultag_isUnicodeLocaleKey(const char* s, int32_t len) {
/*
* key = alphanum alpha ;
@@ -619,7 +640,7 @@ ultag_isUnicodeLocaleKey(const char* s, int32_t len) {
return false;
}
-U_CFUNC UBool
+bool
_isUnicodeLocaleTypeSubtag(const char*s, int32_t len) {
/*
* alphanum{3,8}
@@ -627,7 +648,7 @@ _isUnicodeLocaleTypeSubtag(const char*s, int32_t len) {
return _isAlphaNumericStringLimitedLength(s, len , 3, 8);
}
-U_CFUNC UBool
+bool
ultag_isUnicodeLocaleType(const char*s, int32_t len) {
/*
* type = alphanum{3,8} (sep alphanum{3,8})* ;
@@ -635,7 +656,9 @@ ultag_isUnicodeLocaleType(const char*s, int32_t len) {
return _isSepListOf(&_isUnicodeLocaleTypeSubtag, s, len);
}
-static UBool
+namespace {
+
+bool
_isTKey(const char* s, int32_t len)
{
/*
@@ -650,7 +673,9 @@ _isTKey(const char* s, int32_t len)
return false;
}
-U_CAPI const char * U_EXPORT2
+} // namespace
+
+const char*
ultag_getTKeyStart(const char *localeID) {
const char *result = localeID;
const char *sep;
@@ -666,7 +691,9 @@ ultag_getTKeyStart(const char *localeID) {
return nullptr;
}
-static UBool
+namespace {
+
+bool
_isTValue(const char* s, int32_t len)
{
/*
@@ -675,7 +702,7 @@ _isTValue(const char* s, int32_t len)
return _isAlphaNumericStringLimitedLength(s, len , 3, 8);
}
-static UBool
+bool
_isTransformedExtensionSubtag(int32_t& state, const char* s, int32_t len)
{
const int32_t kStart = 0; // Start, wait for unicode_language_subtag, tkey or end
@@ -748,7 +775,7 @@ _isTransformedExtensionSubtag(int32_t& state, const char* s, int32_t len)
return false;
}
-static UBool
+bool
_isUnicodeExtensionSubtag(int32_t& state, const char* s, int32_t len)
{
const int32_t kStart = 0; // Start, wait for a key or attribute or end
@@ -787,8 +814,8 @@ _isUnicodeExtensionSubtag(int32_t& state, const char* s, int32_t len)
return false;
}
-static UBool
-_isStatefulSepListOf(UBool (*test)(int32_t&, const char*, int32_t), const char* s, int32_t len)
+bool
+_isStatefulSepListOf(bool (*test)(int32_t&, const char*, int32_t), const char* s, int32_t len)
{
int32_t state = 0;
const char* p;
@@ -817,17 +844,20 @@ _isStatefulSepListOf(UBool (*test)(int32_t&, const char*, int32_t), const char*
return false;
}
-U_CFUNC UBool
+} // namespace
+
+bool
ultag_isTransformedExtensionSubtags(const char* s, int32_t len)
{
return _isStatefulSepListOf(&_isTransformedExtensionSubtag, s, len);
}
-U_CFUNC UBool
+bool
ultag_isUnicodeExtensionSubtags(const char* s, int32_t len) {
return _isStatefulSepListOf(&_isUnicodeExtensionSubtag, s, len);
}
+namespace {
/*
* -------------------------------------------------
@@ -837,7 +867,7 @@ ultag_isUnicodeExtensionSubtags(const char* s, int32_t len) {
* -------------------------------------------------
*/
-static UBool
+bool
_addVariantToList(VariantListEntry **first, icu::LocalPointer<VariantListEntry> var) {
if (*first == nullptr) {
var->next = nullptr;
@@ -870,9 +900,9 @@ _addVariantToList(VariantListEntry **first, icu::LocalPointer<VariantListEntry>
return true;
}
-static UBool
+bool
_addAttributeToList(AttributeListEntry **first, AttributeListEntry *attr) {
- UBool bAdded = true;
+ bool bAdded = true;
if (*first == nullptr) {
attr->next = nullptr;
@@ -913,10 +943,9 @@ _addAttributeToList(AttributeListEntry **first, AttributeListEntry *attr) {
return bAdded;
}
-
-static UBool
-_addExtensionToList(ExtensionListEntry **first, ExtensionListEntry *ext, UBool localeToBCP) {
- UBool bAdded = true;
+bool
+_addExtensionToList(ExtensionListEntry **first, ExtensionListEntry *ext, bool localeToBCP) {
+ bool bAdded = true;
if (*first == nullptr) {
ext->next = nullptr;
@@ -991,7 +1020,7 @@ _addExtensionToList(ExtensionListEntry **first, ExtensionListEntry *ext, UBool l
return bAdded;
}
-static void
+void
_initializeULanguageTag(ULanguageTag* langtag) {
int32_t i;
@@ -1012,18 +1041,18 @@ _initializeULanguageTag(ULanguageTag* langtag) {
langtag->privateuse = EMPTY;
}
-static void
-_appendLanguageToLanguageTag(const char* localeID, icu::ByteSink& sink, UBool strict, UErrorCode* status) {
+void
+_appendLanguageToLanguageTag(const char* localeID, icu::ByteSink& sink, bool strict, UErrorCode& status) {
UErrorCode tmpStatus = U_ZERO_ERROR;
- if (U_FAILURE(*status)) {
+ if (U_FAILURE(status)) {
return;
}
icu::CharString buf = ulocimp_getLanguage(localeID, tmpStatus);
if (U_FAILURE(tmpStatus)) {
if (strict) {
- *status = U_ILLEGAL_ARGUMENT_ERROR;
+ status = U_ILLEGAL_ARGUMENT_ERROR;
return;
}
}
@@ -1035,7 +1064,7 @@ _appendLanguageToLanguageTag(const char* localeID, icu::ByteSink& sink, UBool st
} else if (!ultag_isLanguageSubtag(buf.data(), buf.length())) {
/* invalid language code */
if (strict) {
- *status = U_ILLEGAL_ARGUMENT_ERROR;
+ status = U_ILLEGAL_ARGUMENT_ERROR;
return;
}
sink.Append(LANG_UND, LANG_UND_LEN);
@@ -1057,18 +1086,18 @@ _appendLanguageToLanguageTag(const char* localeID, icu::ByteSink& sink, UBool st
}
}
-static void
-_appendScriptToLanguageTag(const char* localeID, icu::ByteSink& sink, UBool strict, UErrorCode* status) {
+void
+_appendScriptToLanguageTag(const char* localeID, icu::ByteSink& sink, bool strict, UErrorCode& status) {
UErrorCode tmpStatus = U_ZERO_ERROR;
- if (U_FAILURE(*status)) {
+ if (U_FAILURE(status)) {
return;
}
icu::CharString buf = ulocimp_getScript(localeID, tmpStatus);
if (U_FAILURE(tmpStatus)) {
if (strict) {
- *status = U_ILLEGAL_ARGUMENT_ERROR;
+ status = U_ILLEGAL_ARGUMENT_ERROR;
}
return;
}
@@ -1077,7 +1106,7 @@ _appendScriptToLanguageTag(const char* localeID, icu::ByteSink& sink, UBool stri
if (!ultag_isScriptSubtag(buf.data(), buf.length())) {
/* invalid script code */
if (strict) {
- *status = U_ILLEGAL_ARGUMENT_ERROR;
+ status = U_ILLEGAL_ARGUMENT_ERROR;
}
return;
} else {
@@ -1087,18 +1116,18 @@ _appendScriptToLanguageTag(const char* localeID, icu::ByteSink& sink, UBool stri
}
}
-static void
-_appendRegionToLanguageTag(const char* localeID, icu::ByteSink& sink, UBool strict, UErrorCode* status) {
+void
+_appendRegionToLanguageTag(const char* localeID, icu::ByteSink& sink, bool strict, UErrorCode& status) {
UErrorCode tmpStatus = U_ZERO_ERROR;
- if (U_FAILURE(*status)) {
+ if (U_FAILURE(status)) {
return;
}
icu::CharString buf = ulocimp_getRegion(localeID, tmpStatus);
if (U_FAILURE(tmpStatus)) {
if (strict) {
- *status = U_ILLEGAL_ARGUMENT_ERROR;
+ status = U_ILLEGAL_ARGUMENT_ERROR;
}
return;
}
@@ -1107,7 +1136,7 @@ _appendRegionToLanguageTag(const char* localeID, icu::ByteSink& sink, UBool stri
if (!ultag_isRegionSubtag(buf.data(), buf.length())) {
/* invalid region code */
if (strict) {
- *status = U_ILLEGAL_ARGUMENT_ERROR;
+ status = U_ILLEGAL_ARGUMENT_ERROR;
}
return;
} else {
@@ -1125,7 +1154,7 @@ _appendRegionToLanguageTag(const char* localeID, icu::ByteSink& sink, UBool stri
}
}
-static void _sortVariants(VariantListEntry* first) {
+void _sortVariants(VariantListEntry* first) {
for (VariantListEntry* var1 = first; var1 != nullptr; var1 = var1->next) {
for (VariantListEntry* var2 = var1->next; var2 != nullptr; var2 = var2->next) {
// Swap var1->variant and var2->variant.
@@ -1138,25 +1167,25 @@ static void _sortVariants(VariantListEntry* first) {
}
}
-static void
-_appendVariantsToLanguageTag(const char* localeID, icu::ByteSink& sink, UBool strict, UBool *hadPosix, UErrorCode* status) {
+void
+_appendVariantsToLanguageTag(const char* localeID, icu::ByteSink& sink, bool strict, bool& hadPosix, UErrorCode& status) {
UErrorCode tmpStatus = U_ZERO_ERROR;
- if (U_FAILURE(*status)) {
+ if (U_FAILURE(status)) {
return;
}
icu::CharString buf = ulocimp_getVariant(localeID, tmpStatus);
if (U_FAILURE(tmpStatus) || tmpStatus == U_STRING_NOT_TERMINATED_WARNING) {
if (strict) {
- *status = U_ILLEGAL_ARGUMENT_ERROR;
+ status = U_ILLEGAL_ARGUMENT_ERROR;
}
return;
}
if (!buf.isEmpty()) {
char *p, *pVar;
- UBool bNext = true;
+ bool bNext = true;
VariantListEntry *varFirst = nullptr;
pVar = nullptr;
@@ -1170,7 +1199,7 @@ _appendVariantsToLanguageTag(const char* localeID, icu::ByteSink& sink, UBool st
}
if (pVar == nullptr) {
if (strict) {
- *status = U_ILLEGAL_ARGUMENT_ERROR;
+ status = U_ILLEGAL_ARGUMENT_ERROR;
break;
}
/* ignore empty variant */
@@ -1185,25 +1214,25 @@ _appendVariantsToLanguageTag(const char* localeID, icu::ByteSink& sink, UBool st
if (_isVariantSubtag(pVar, -1)) {
if (uprv_strcmp(pVar,POSIX_VALUE) || buf.length() != (int32_t)uprv_strlen(POSIX_VALUE)) {
/* emit the variant to the list */
- icu::LocalPointer<VariantListEntry> var(new VariantListEntry, *status);
- if (U_FAILURE(*status)) {
+ icu::LocalPointer<VariantListEntry> var(new VariantListEntry, status);
+ if (U_FAILURE(status)) {
break;
}
var->variant = pVar;
if (!_addVariantToList(&varFirst, std::move(var))) {
/* duplicated variant */
if (strict) {
- *status = U_ILLEGAL_ARGUMENT_ERROR;
+ status = U_ILLEGAL_ARGUMENT_ERROR;
break;
}
}
} else {
/* Special handling for POSIX variant, need to remember that we had it and then */
/* treat it like an extension later. */
- *hadPosix = true;
+ hadPosix = true;
}
} else if (strict) {
- *status = U_ILLEGAL_ARGUMENT_ERROR;
+ status = U_ILLEGAL_ARGUMENT_ERROR;
break;
} else if (_isPrivateuseValueSubtag(pVar, -1)) {
/* Handle private use subtags separately */
@@ -1218,7 +1247,7 @@ _appendVariantsToLanguageTag(const char* localeID, icu::ByteSink& sink, UBool st
p++;
}
- if (U_SUCCESS(*status)) {
+ if (U_SUCCESS(status)) {
if (varFirst != nullptr) {
int32_t varLen;
@@ -1243,20 +1272,20 @@ _appendVariantsToLanguageTag(const char* localeID, icu::ByteSink& sink, UBool st
var = tmpVar;
}
- if (U_FAILURE(*status)) {
+ if (U_FAILURE(status)) {
return;
}
}
}
-static void
-_appendKeywordsToLanguageTag(const char* localeID, icu::ByteSink& sink, UBool strict, UBool hadPosix, UErrorCode* status) {
+void
+_appendKeywordsToLanguageTag(const char* localeID, icu::ByteSink& sink, bool strict, bool hadPosix, UErrorCode& status) {
icu::MemoryPool<AttributeListEntry> attrPool;
icu::MemoryPool<ExtensionListEntry> extPool;
icu::MemoryPool<icu::CharString> strPool;
- icu::LocalUEnumerationPointer keywordEnum(uloc_openKeywords(localeID, status));
- if (U_FAILURE(*status) && !hadPosix) {
+ icu::LocalUEnumerationPointer keywordEnum(uloc_openKeywords(localeID, &status));
+ if (U_FAILURE(status) && !hadPosix) {
return;
}
if (keywordEnum.isValid() || hadPosix) {
@@ -1271,10 +1300,10 @@ _appendKeywordsToLanguageTag(const char* localeID, icu::ByteSink& sink, UBool st
const char *bcpKey=nullptr, *bcpValue=nullptr;
UErrorCode tmpStatus = U_ZERO_ERROR;
int32_t keylen;
- UBool isBcpUExt;
+ bool isBcpUExt;
while (true) {
- key = uenum_next(keywordEnum.getAlias(), nullptr, status);
+ key = uenum_next(keywordEnum.getAlias(), nullptr, &status);
if (key == nullptr) {
break;
}
@@ -1282,17 +1311,17 @@ _appendKeywordsToLanguageTag(const char* localeID, icu::ByteSink& sink, UBool st
icu::CharString buf;
{
icu::CharStringByteSink sink(&buf);
- ulocimp_getKeywordValue(localeID, key, sink, &tmpStatus);
+ ulocimp_getKeywordValue(localeID, key, sink, tmpStatus);
}
len = buf.length();
if (U_FAILURE(tmpStatus)) {
if (tmpStatus == U_MEMORY_ALLOCATION_ERROR) {
- *status = U_MEMORY_ALLOCATION_ERROR;
+ status = U_MEMORY_ALLOCATION_ERROR;
break;
}
if (strict) {
- *status = U_ILLEGAL_ARGUMENT_ERROR;
+ status = U_ILLEGAL_ARGUMENT_ERROR;
break;
}
/* ignore this keyword */
@@ -1311,13 +1340,13 @@ _appendKeywordsToLanguageTag(const char* localeID, icu::ByteSink& sink, UBool st
icu::CharString attrBuf;
for (; i < len; i++) {
if (buf[i] != '-') {
- attrBuf.append(buf[i], *status);
+ attrBuf.append(buf[i], status);
} else {
i++;
break;
}
}
- if (U_FAILURE(*status)) {
+ if (U_FAILURE(status)) {
return;
}
if (attrBuf.isEmpty() && i >= len) {
@@ -1327,21 +1356,21 @@ _appendKeywordsToLanguageTag(const char* localeID, icu::ByteSink& sink, UBool st
/* create AttributeListEntry */
attr = attrPool.create();
if (attr == nullptr) {
- *status = U_MEMORY_ALLOCATION_ERROR;
+ status = U_MEMORY_ALLOCATION_ERROR;
break;
}
if (icu::CharString* str =
- strPool.create(std::move(attrBuf), *status)) {
- if (U_FAILURE(*status)) { break; }
+ strPool.create(std::move(attrBuf), status)) {
+ if (U_FAILURE(status)) { break; }
attr->attribute = str->data();
} else {
- *status = U_MEMORY_ALLOCATION_ERROR;
+ status = U_MEMORY_ALLOCATION_ERROR;
break;
}
if (!_addAttributeToList(&firstAttr, attr)) {
if (strict) {
- *status = U_ILLEGAL_ARGUMENT_ERROR;
+ status = U_ILLEGAL_ARGUMENT_ERROR;
break;
}
}
@@ -1354,7 +1383,7 @@ _appendKeywordsToLanguageTag(const char* localeID, icu::ByteSink& sink, UBool st
bcpKey = uloc_toUnicodeLocaleKey(key);
if (bcpKey == nullptr) {
if (strict) {
- *status = U_ILLEGAL_ARGUMENT_ERROR;
+ status = U_ILLEGAL_ARGUMENT_ERROR;
break;
}
continue;
@@ -1364,7 +1393,7 @@ _appendKeywordsToLanguageTag(const char* localeID, icu::ByteSink& sink, UBool st
bcpValue = uloc_toUnicodeLocaleType(key, buf.data());
if (bcpValue == nullptr) {
if (strict) {
- *status = U_ILLEGAL_ARGUMENT_ERROR;
+ status = U_ILLEGAL_ARGUMENT_ERROR;
break;
}
continue;
@@ -1379,11 +1408,11 @@ _appendKeywordsToLanguageTag(const char* localeID, icu::ByteSink& sink, UBool st
icu::CharString* extBuf = extBufPool.create(buf, tmpStatus);
if (extBuf == nullptr) {
- *status = U_MEMORY_ALLOCATION_ERROR;
+ status = U_MEMORY_ALLOCATION_ERROR;
break;
}
if (U_FAILURE(tmpStatus)) {
- *status = tmpStatus;
+ status = tmpStatus;
break;
}
@@ -1394,7 +1423,7 @@ _appendKeywordsToLanguageTag(const char* localeID, icu::ByteSink& sink, UBool st
if (*key == PRIVATEUSE) {
if (!ultag_isPrivateuseValueSubtags(buf.data(), len)) {
if (strict) {
- *status = U_ILLEGAL_ARGUMENT_ERROR;
+ status = U_ILLEGAL_ARGUMENT_ERROR;
break;
}
continue;
@@ -1402,7 +1431,7 @@ _appendKeywordsToLanguageTag(const char* localeID, icu::ByteSink& sink, UBool st
} else {
if (!_isExtensionSingleton(key, keylen) || !ultag_isExtensionSubtags(buf.data(), len)) {
if (strict) {
- *status = U_ILLEGAL_ARGUMENT_ERROR;
+ status = U_ILLEGAL_ARGUMENT_ERROR;
break;
}
continue;
@@ -1412,11 +1441,11 @@ _appendKeywordsToLanguageTag(const char* localeID, icu::ByteSink& sink, UBool st
icu::CharString* extBuf =
extBufPool.create(buf.data(), len, tmpStatus);
if (extBuf == nullptr) {
- *status = U_MEMORY_ALLOCATION_ERROR;
+ status = U_MEMORY_ALLOCATION_ERROR;
break;
}
if (U_FAILURE(tmpStatus)) {
- *status = tmpStatus;
+ status = tmpStatus;
break;
}
bcpValue = extBuf->data();
@@ -1425,7 +1454,7 @@ _appendKeywordsToLanguageTag(const char* localeID, icu::ByteSink& sink, UBool st
/* create ExtensionListEntry */
ext = extPool.create();
if (ext == nullptr) {
- *status = U_MEMORY_ALLOCATION_ERROR;
+ status = U_MEMORY_ALLOCATION_ERROR;
break;
}
ext->key = bcpKey;
@@ -1433,7 +1462,7 @@ _appendKeywordsToLanguageTag(const char* localeID, icu::ByteSink& sink, UBool st
if (!_addExtensionToList(&firstExt, ext, true)) {
if (strict) {
- *status = U_ILLEGAL_ARGUMENT_ERROR;
+ status = U_ILLEGAL_ARGUMENT_ERROR;
break;
}
}
@@ -1444,7 +1473,7 @@ _appendKeywordsToLanguageTag(const char* localeID, icu::ByteSink& sink, UBool st
/* create ExtensionListEntry for POSIX */
ext = extPool.create();
if (ext == nullptr) {
- *status = U_MEMORY_ALLOCATION_ERROR;
+ status = U_MEMORY_ALLOCATION_ERROR;
return;
}
ext->key = POSIX_KEY;
@@ -1455,8 +1484,8 @@ _appendKeywordsToLanguageTag(const char* localeID, icu::ByteSink& sink, UBool st
}
}
- if (U_SUCCESS(*status) && (firstExt != nullptr || firstAttr != nullptr)) {
- UBool startLDMLExtension = false;
+ if (U_SUCCESS(status) && (firstExt != nullptr || firstAttr != nullptr)) {
+ bool startLDMLExtension = false;
for (ext = firstExt; ext; ext = ext->next) {
if (!startLDMLExtension && uprv_strlen(ext->key) > 1) {
/* first LDML u singlton extension */
@@ -1491,11 +1520,11 @@ _appendKeywordsToLanguageTag(const char* localeID, icu::ByteSink& sink, UBool st
* e.g. "u-ca-gregory-co-trad" -> {calendar = gregorian} {collation = traditional}
* Note: char* buf is used for storing keywords
*/
-static void
-_appendLDMLExtensionAsKeywords(const char* ldmlext, ExtensionListEntry** appendTo, icu::MemoryPool<ExtensionListEntry>& extPool, icu::MemoryPool<icu::CharString>& kwdBuf, UBool *posixVariant, UErrorCode *status) {
+void
+_appendLDMLExtensionAsKeywords(const char* ldmlext, ExtensionListEntry** appendTo, icu::MemoryPool<ExtensionListEntry>& extPool, icu::MemoryPool<icu::CharString>& kwdBuf, bool& posixVariant, UErrorCode& status) {
const char *pTag; /* beginning of current subtag */
const char *pKwds; /* beginning of key-type pairs */
- UBool variantExists = *posixVariant;
+ bool variantExists = posixVariant;
ExtensionListEntry *kwdFirst = nullptr; /* first LDML keyword */
ExtensionListEntry *kwd, *nextKwd;
@@ -1503,7 +1532,7 @@ _appendLDMLExtensionAsKeywords(const char* ldmlext, ExtensionListEntry** appendT
int32_t len;
/* Reset the posixVariant value */
- *posixVariant = false;
+ posixVariant = false;
pTag = ldmlext;
pKwds = nullptr;
@@ -1528,15 +1557,15 @@ _appendLDMLExtensionAsKeywords(const char* ldmlext, ExtensionListEntry** appendT
/* add this attribute to the list */
attr = attrPool.create();
if (attr == nullptr) {
- *status = U_MEMORY_ALLOCATION_ERROR;
+ status = U_MEMORY_ALLOCATION_ERROR;
return;
}
- if (icu::CharString* str = strPool.create(pTag, len, *status)) {
- if (U_FAILURE(*status)) { return; }
+ if (icu::CharString* str = strPool.create(pTag, len, status)) {
+ if (U_FAILURE(status)) { return; }
attr->attribute = str->data();
} else {
- *status = U_MEMORY_ALLOCATION_ERROR;
+ status = U_MEMORY_ALLOCATION_ERROR;
return;
}
@@ -1556,13 +1585,13 @@ _appendLDMLExtensionAsKeywords(const char* ldmlext, ExtensionListEntry** appendT
kwd = extPool.create();
if (kwd == nullptr) {
- *status = U_MEMORY_ALLOCATION_ERROR;
+ status = U_MEMORY_ALLOCATION_ERROR;
return;
}
icu::CharString* value = kwdBuf.create();
if (value == nullptr) {
- *status = U_MEMORY_ALLOCATION_ERROR;
+ status = U_MEMORY_ALLOCATION_ERROR;
return;
}
@@ -1571,12 +1600,12 @@ _appendLDMLExtensionAsKeywords(const char* ldmlext, ExtensionListEntry** appendT
while (attr != nullptr) {
nextAttr = attr->next;
if (attr != attrFirst) {
- value->append('-', *status);
+ value->append('-', status);
}
- value->append(attr->attribute, *status);
+ value->append(attr->attribute, status);
attr = nextAttr;
}
- if (U_FAILURE(*status)) {
+ if (U_FAILURE(status)) {
return;
}
@@ -1584,7 +1613,7 @@ _appendLDMLExtensionAsKeywords(const char* ldmlext, ExtensionListEntry** appendT
kwd->value = value->data();
if (!_addExtensionToList(&kwdFirst, kwd, false)) {
- *status = U_ILLEGAL_ARGUMENT_ERROR;
+ status = U_ILLEGAL_ARGUMENT_ERROR;
return;
}
}
@@ -1595,14 +1624,14 @@ _appendLDMLExtensionAsKeywords(const char* ldmlext, ExtensionListEntry** appendT
const char *pBcpType = nullptr; /* beginning of u extension type subtag(s) */
int32_t bcpKeyLen = 0;
int32_t bcpTypeLen = 0;
- UBool isDone = false;
+ bool isDone = false;
pTag = pKwds;
/* BCP47 representation of LDML key/type pairs */
while (!isDone) {
const char *pNextBcpKey = nullptr;
int32_t nextBcpKeyLen = 0;
- UBool emitKeyword = false;
+ bool emitKeyword = false;
if (*pTag) {
/* locate next separator char */
@@ -1650,7 +1679,7 @@ _appendLDMLExtensionAsKeywords(const char* ldmlext, ExtensionListEntry** appendT
if (bcpKeyLen >= (int32_t)sizeof(bcpKeyBuf)) {
/* the BCP key is invalid */
- *status = U_ILLEGAL_ARGUMENT_ERROR;
+ status = U_ILLEGAL_ARGUMENT_ERROR;
return;
}
U_ASSERT(bcpKeyLen <= 2);
@@ -1661,7 +1690,7 @@ _appendLDMLExtensionAsKeywords(const char* ldmlext, ExtensionListEntry** appendT
/* u extension key to LDML key */
pKey = uloc_toLegacyKey(bcpKeyBuf);
if (pKey == nullptr) {
- *status = U_ILLEGAL_ARGUMENT_ERROR;
+ status = U_ILLEGAL_ARGUMENT_ERROR;
return;
}
if (pKey == bcpKeyBuf) {
@@ -1670,27 +1699,27 @@ _appendLDMLExtensionAsKeywords(const char* ldmlext, ExtensionListEntry** appendT
We normalize the result key to lower case.
*/
T_CString_toLowerCase(bcpKeyBuf);
- icu::CharString* key = kwdBuf.create(bcpKeyBuf, bcpKeyLen, *status);
+ icu::CharString* key = kwdBuf.create(bcpKeyBuf, bcpKeyLen, status);
if (key == nullptr) {
- *status = U_MEMORY_ALLOCATION_ERROR;
+ status = U_MEMORY_ALLOCATION_ERROR;
return;
}
- if (U_FAILURE(*status)) {
+ if (U_FAILURE(status)) {
return;
}
pKey = key->data();
}
if (pBcpType) {
- icu::CharString bcpTypeBuf(pBcpType, bcpTypeLen, *status);
- if (U_FAILURE(*status)) {
+ icu::CharString bcpTypeBuf(pBcpType, bcpTypeLen, status);
+ if (U_FAILURE(status)) {
return;
}
/* BCP type to locale type */
pType = uloc_toLegacyType(pKey, bcpTypeBuf.data());
if (pType == nullptr) {
- *status = U_ILLEGAL_ARGUMENT_ERROR;
+ status = U_ILLEGAL_ARGUMENT_ERROR;
return;
}
if (pType == bcpTypeBuf.data()) {
@@ -1701,11 +1730,11 @@ _appendLDMLExtensionAsKeywords(const char* ldmlext, ExtensionListEntry** appendT
/* normalize to lower case */
T_CString_toLowerCase(bcpTypeBuf.data());
if (icu::CharString* type =
- kwdBuf.create(std::move(bcpTypeBuf), *status)) {
- if (U_FAILURE(*status)) { return; }
+ kwdBuf.create(std::move(bcpTypeBuf), status)) {
+ if (U_FAILURE(status)) { return; }
pType = type->data();
} else {
- *status = U_MEMORY_ALLOCATION_ERROR;
+ status = U_MEMORY_ALLOCATION_ERROR;
return;
}
}
@@ -1717,12 +1746,12 @@ _appendLDMLExtensionAsKeywords(const char* ldmlext, ExtensionListEntry** appendT
/* Special handling for u-va-posix, since we want to treat this as a variant,
not as a keyword */
if (!variantExists && !uprv_strcmp(pKey, POSIX_KEY) && !uprv_strcmp(pType, POSIX_VALUE) ) {
- *posixVariant = true;
+ posixVariant = true;
} else {
/* create an ExtensionListEntry for this keyword */
kwd = extPool.create();
if (kwd == nullptr) {
- *status = U_MEMORY_ALLOCATION_ERROR;
+ status = U_MEMORY_ALLOCATION_ERROR;
return;
}
@@ -1751,9 +1780,8 @@ _appendLDMLExtensionAsKeywords(const char* ldmlext, ExtensionListEntry** appendT
}
}
-
-static void
-_appendKeywords(ULanguageTag* langtag, icu::ByteSink& sink, UErrorCode* status) {
+void
+_appendKeywords(ULanguageTag* langtag, icu::ByteSink& sink, UErrorCode& status) {
int32_t i, n;
int32_t len;
ExtensionListEntry *kwdFirst = nullptr;
@@ -1761,9 +1789,9 @@ _appendKeywords(ULanguageTag* langtag, icu::ByteSink& sink, UErrorCode* status)
const char *key, *type;
icu::MemoryPool<ExtensionListEntry> extPool;
icu::MemoryPool<icu::CharString> kwdBuf;
- UBool posixVariant = false;
+ bool posixVariant = false;
- if (U_FAILURE(*status)) {
+ if (U_FAILURE(status)) {
return;
}
@@ -1779,37 +1807,37 @@ _appendKeywords(ULanguageTag* langtag, icu::ByteSink& sink, UErrorCode* status)
posixVariant = true;
}
- _appendLDMLExtensionAsKeywords(type, &kwdFirst, extPool, kwdBuf, &posixVariant, status);
- if (U_FAILURE(*status)) {
+ _appendLDMLExtensionAsKeywords(type, &kwdFirst, extPool, kwdBuf, posixVariant, status);
+ if (U_FAILURE(status)) {
break;
}
} else {
kwd = extPool.create();
if (kwd == nullptr) {
- *status = U_MEMORY_ALLOCATION_ERROR;
+ status = U_MEMORY_ALLOCATION_ERROR;
break;
}
kwd->key = key;
kwd->value = type;
if (!_addExtensionToList(&kwdFirst, kwd, false)) {
- *status = U_ILLEGAL_ARGUMENT_ERROR;
+ status = U_ILLEGAL_ARGUMENT_ERROR;
break;
}
}
}
- if (U_SUCCESS(*status)) {
+ if (U_SUCCESS(status)) {
type = ultag_getPrivateUse(langtag);
if ((int32_t)uprv_strlen(type) > 0) {
/* add private use as a keyword */
kwd = extPool.create();
if (kwd == nullptr) {
- *status = U_MEMORY_ALLOCATION_ERROR;
+ status = U_MEMORY_ALLOCATION_ERROR;
} else {
kwd->key = PRIVATEUSE_KEY;
kwd->value = type;
if (!_addExtensionToList(&kwdFirst, kwd, false)) {
- *status = U_ILLEGAL_ARGUMENT_ERROR;
+ status = U_ILLEGAL_ARGUMENT_ERROR;
}
}
}
@@ -1817,14 +1845,14 @@ _appendKeywords(ULanguageTag* langtag, icu::ByteSink& sink, UErrorCode* status)
/* If a POSIX variant was in the extensions, write it out before writing the keywords. */
- if (U_SUCCESS(*status) && posixVariant) {
+ if (U_SUCCESS(status) && posixVariant) {
len = (int32_t) uprv_strlen(_POSIX);
sink.Append(_POSIX, len);
}
- if (U_SUCCESS(*status) && kwdFirst != nullptr) {
+ if (U_SUCCESS(status) && kwdFirst != nullptr) {
/* write out the sorted keywords */
- UBool firstValue = true;
+ bool firstValue = true;
kwd = kwdFirst;
do {
if (firstValue) {
@@ -1848,28 +1876,28 @@ _appendKeywords(ULanguageTag* langtag, icu::ByteSink& sink, UErrorCode* status)
}
}
-static void
-_appendPrivateuseToLanguageTag(const char* localeID, icu::ByteSink& sink, UBool strict, UBool hadPosix, UErrorCode* status) {
+void
+_appendPrivateuseToLanguageTag(const char* localeID, icu::ByteSink& sink, bool strict, bool hadPosix, UErrorCode& status) {
(void)hadPosix;
UErrorCode tmpStatus = U_ZERO_ERROR;
- if (U_FAILURE(*status)) {
+ if (U_FAILURE(status)) {
return;
}
icu::CharString buf = ulocimp_getVariant(localeID, tmpStatus);
if (U_FAILURE(tmpStatus)) {
if (strict) {
- *status = U_ILLEGAL_ARGUMENT_ERROR;
+ status = U_ILLEGAL_ARGUMENT_ERROR;
}
return;
}
if (!buf.isEmpty()) {
char *p, *pPriv;
- UBool bNext = true;
- UBool firstValue = true;
- UBool writeValue;
+ bool bNext = true;
+ bool firstValue = true;
+ bool writeValue;
pPriv = nullptr;
p = buf.data();
@@ -1897,7 +1925,7 @@ _appendPrivateuseToLanguageTag(const char* localeID, icu::ByteSink& sink, UBool
writeValue = true;
}
} else if (strict) {
- *status = U_ILLEGAL_ARGUMENT_ERROR;
+ status = U_ILLEGAL_ARGUMENT_ERROR;
break;
} else {
break;
@@ -1956,8 +1984,8 @@ _appendPrivateuseToLanguageTag(const char* localeID, icu::ByteSink& sink, UBool
#pragma optimize( "", off )
#endif
-static ULanguageTag*
-ultag_parse(const char* tag, int32_t tagLen, int32_t* parsedLen, UErrorCode* status) {
+ULanguageTag*
+ultag_parse(const char* tag, int32_t tagLen, int32_t* parsedLen, UErrorCode& status) {
char *tagBuf;
int16_t next;
char *pSubtag, *pNext, *pLastGoodPosition;
@@ -1966,14 +1994,14 @@ ultag_parse(const char* tag, int32_t tagLen, int32_t* parsedLen, UErrorCode* sta
icu::LocalPointer<ExtensionListEntry> pExtension;
char *pExtValueSubtag, *pExtValueSubtagEnd;
int32_t i;
- UBool privateuseVar = false;
+ bool privateuseVar = false;
int32_t legacyLen = 0;
if (parsedLen != nullptr) {
*parsedLen = 0;
}
- if (U_FAILURE(*status)) {
+ if (U_FAILURE(status)) {
return nullptr;
}
@@ -1984,7 +2012,7 @@ ultag_parse(const char* tag, int32_t tagLen, int32_t* parsedLen, UErrorCode* sta
/* copy the entire string */
tagBuf = (char*)uprv_malloc(tagLen + 1);
if (tagBuf == nullptr) {
- *status = U_MEMORY_ALLOCATION_ERROR;
+ status = U_MEMORY_ALLOCATION_ERROR;
return nullptr;
}
@@ -1998,7 +2026,7 @@ ultag_parse(const char* tag, int32_t tagLen, int32_t* parsedLen, UErrorCode* sta
(ULanguageTag*)uprv_malloc(sizeof(ULanguageTag)));
if (t.isNull()) {
uprv_free(tagBuf);
- *status = U_MEMORY_ALLOCATION_ERROR;
+ status = U_MEMORY_ALLOCATION_ERROR;
return nullptr;
}
_initializeULanguageTag(t.getAlias());
@@ -2036,7 +2064,7 @@ ultag_parse(const char* tag, int32_t tagLen, int32_t* parsedLen, UErrorCode* sta
// the destructor of t when t is out of scope.
t->buf = tagBuf = (char*)uprv_malloc(newTagLength + 1);
if (tagBuf == nullptr) {
- *status = U_MEMORY_ALLOCATION_ERROR;
+ status = U_MEMORY_ALLOCATION_ERROR;
return nullptr;
}
tagLen = newTagLength;
@@ -2180,8 +2208,8 @@ ultag_parse(const char* tag, int32_t tagLen, int32_t* parsedLen, UErrorCode* sta
if (next & VART) {
if (_isVariantSubtag(pSubtag, subtagLen) ||
(privateuseVar && _isPrivateuseVariantSubtag(pSubtag, subtagLen))) {
- icu::LocalPointer<VariantListEntry> var(new VariantListEntry, *status);
- if (U_FAILURE(*status)) {
+ icu::LocalPointer<VariantListEntry> var(new VariantListEntry, status);
+ if (U_FAILURE(status)) {
return nullptr;
}
*pSep = 0;
@@ -2220,8 +2248,8 @@ ultag_parse(const char* tag, int32_t tagLen, int32_t* parsedLen, UErrorCode* sta
}
/* create a new extension */
- pExtension.adoptInsteadAndCheckErrorCode(new ExtensionListEntry, *status);
- if (U_FAILURE(*status)) {
+ pExtension.adoptInsteadAndCheckErrorCode(new ExtensionListEntry, status);
+ if (U_FAILURE(status)) {
return nullptr;
}
*pSep = 0;
@@ -2368,7 +2396,7 @@ ultag_parse(const char* tag, int32_t tagLen, int32_t* parsedLen, UErrorCode* sta
#pragma optimize( "", on )
#endif
-static void
+void
ultag_close(ULanguageTag* langtag) {
if (langtag == nullptr) {
@@ -2398,13 +2426,13 @@ ultag_close(ULanguageTag* langtag) {
uprv_free(langtag);
}
-static const char*
+const char*
ultag_getLanguage(const ULanguageTag* langtag) {
return langtag->language;
}
#if 0
-static const char*
+const char*
ultag_getJDKLanguage(const ULanguageTag* langtag) {
int32_t i;
for (i = 0; DEPRECATEDLANGS[i] != nullptr; i += 2) {
@@ -2416,7 +2444,7 @@ ultag_getJDKLanguage(const ULanguageTag* langtag) {
}
#endif
-static const char*
+const char*
ultag_getExtlang(const ULanguageTag* langtag, int32_t idx) {
if (idx >= 0 && idx < MAXEXTLANG) {
return langtag->extlang[idx];
@@ -2424,7 +2452,7 @@ ultag_getExtlang(const ULanguageTag* langtag, int32_t idx) {
return nullptr;
}
-static int32_t
+int32_t
ultag_getExtlangSize(const ULanguageTag* langtag) {
int32_t size = 0;
int32_t i;
@@ -2436,17 +2464,17 @@ ultag_getExtlangSize(const ULanguageTag* langtag) {
return size;
}
-static const char*
+const char*
ultag_getScript(const ULanguageTag* langtag) {
return langtag->script;
}
-static const char*
+const char*
ultag_getRegion(const ULanguageTag* langtag) {
return langtag->region;
}
-static const char*
+const char*
ultag_getVariant(const ULanguageTag* langtag, int32_t idx) {
const char *var = nullptr;
VariantListEntry *cur = langtag->variants;
@@ -2462,7 +2490,7 @@ ultag_getVariant(const ULanguageTag* langtag, int32_t idx) {
return var;
}
-static int32_t
+int32_t
ultag_getVariantsSize(const ULanguageTag* langtag) {
int32_t size = 0;
VariantListEntry *cur = langtag->variants;
@@ -2476,7 +2504,7 @@ ultag_getVariantsSize(const ULanguageTag* langtag) {
return size;
}
-static const char*
+const char*
ultag_getExtensionKey(const ULanguageTag* langtag, int32_t idx) {
const char *key = nullptr;
ExtensionListEntry *cur = langtag->extensions;
@@ -2492,7 +2520,7 @@ ultag_getExtensionKey(const ULanguageTag* langtag, int32_t idx) {
return key;
}
-static const char*
+const char*
ultag_getExtensionValue(const ULanguageTag* langtag, int32_t idx) {
const char *val = nullptr;
ExtensionListEntry *cur = langtag->extensions;
@@ -2508,7 +2536,7 @@ ultag_getExtensionValue(const ULanguageTag* langtag, int32_t idx) {
return val;
}
-static int32_t
+int32_t
ultag_getExtensionsSize(const ULanguageTag* langtag) {
int32_t size = 0;
ExtensionListEntry *cur = langtag->extensions;
@@ -2522,18 +2550,19 @@ ultag_getExtensionsSize(const ULanguageTag* langtag) {
return size;
}
-static const char*
+const char*
ultag_getPrivateUse(const ULanguageTag* langtag) {
return langtag->privateuse;
}
#if 0
-static const char*
+const char*
ultag_getLegacy(const ULanguageTag* langtag) {
return langtag->legacy;
}
#endif
+} // namespace
/*
* -------------------------------------------------
@@ -2553,7 +2582,7 @@ uloc_toLanguageTag(const char* localeID,
}
icu::CheckedArrayByteSink sink(langtag, langtagCapacity);
- ulocimp_toLanguageTag(localeID, sink, strict, status);
+ ulocimp_toLanguageTag(localeID, sink, strict, *status);
int32_t reslen = sink.NumberOfBytesAppended();
@@ -2571,23 +2600,23 @@ uloc_toLanguageTag(const char* localeID,
}
-U_CAPI void U_EXPORT2
+U_EXPORT void
ulocimp_toLanguageTag(const char* localeID,
icu::ByteSink& sink,
- UBool strict,
- UErrorCode* status) {
+ bool strict,
+ UErrorCode& status) {
icu::CharString canonical;
UErrorCode tmpStatus = U_ZERO_ERROR;
- UBool hadPosix = false;
+ bool hadPosix = false;
const char* pKeywordStart;
/* Note: uloc_canonicalize returns "en_US_POSIX" for input locale ID "". See #6835 */
{
icu::CharStringByteSink canonicalSink(&canonical);
- ulocimp_canonicalize(localeID, canonicalSink, &tmpStatus);
+ ulocimp_canonicalize(localeID, canonicalSink, tmpStatus);
}
if (U_FAILURE(tmpStatus)) {
- *status = tmpStatus;
+ status = tmpStatus;
return;
}
@@ -2595,7 +2624,7 @@ ulocimp_toLanguageTag(const char* localeID,
pKeywordStart = locale_getKeywordsStart(canonical.data());
if (pKeywordStart == canonical.data()) {
int kwdCnt = 0;
- UBool done = false;
+ bool done = false;
icu::LocalUEnumerationPointer kwdEnum(uloc_openKeywords(canonical.data(), &tmpStatus));
if (U_SUCCESS(tmpStatus)) {
@@ -2609,7 +2638,7 @@ ulocimp_toLanguageTag(const char* localeID,
icu::CharString buf;
{
icu::CharStringByteSink sink(&buf);
- ulocimp_getKeywordValue(localeID, key, sink, &tmpStatus);
+ ulocimp_getKeywordValue(localeID, key, sink, tmpStatus);
}
if (U_SUCCESS(tmpStatus)) {
if (ultag_isPrivateuseValueSubtags(buf.data(), buf.length())) {
@@ -2618,12 +2647,12 @@ ulocimp_toLanguageTag(const char* localeID,
sink.Append(buf.data(), buf.length());
done = true;
} else if (strict) {
- *status = U_ILLEGAL_ARGUMENT_ERROR;
+ status = U_ILLEGAL_ARGUMENT_ERROR;
done = true;
}
/* if not strict mode, then "und" will be returned */
} else {
- *status = U_ILLEGAL_ARGUMENT_ERROR;
+ status = U_ILLEGAL_ARGUMENT_ERROR;
done = true;
}
}
@@ -2637,7 +2666,7 @@ ulocimp_toLanguageTag(const char* localeID,
_appendLanguageToLanguageTag(canonical.data(), sink, strict, status);
_appendScriptToLanguageTag(canonical.data(), sink, strict, status);
_appendRegionToLanguageTag(canonical.data(), sink, strict, status);
- _appendVariantsToLanguageTag(canonical.data(), sink, strict, &hadPosix, status);
+ _appendVariantsToLanguageTag(canonical.data(), sink, strict, hadPosix, status);
_appendKeywordsToLanguageTag(canonical.data(), sink, strict, hadPosix, status);
_appendPrivateuseToLanguageTag(canonical.data(), sink, strict, hadPosix, status);
}
@@ -2654,7 +2683,7 @@ uloc_forLanguageTag(const char* langtag,
}
icu::CheckedArrayByteSink sink(localeID, localeIDCapacity);
- ulocimp_forLanguageTag(langtag, -1, sink, parsedLength, status);
+ ulocimp_forLanguageTag(langtag, -1, sink, parsedLength, *status);
int32_t reslen = sink.NumberOfBytesAppended();
@@ -2672,20 +2701,20 @@ uloc_forLanguageTag(const char* langtag,
}
-U_CAPI void U_EXPORT2
+U_EXPORT void
ulocimp_forLanguageTag(const char* langtag,
int32_t tagLen,
icu::ByteSink& sink,
int32_t* parsedLength,
- UErrorCode* status) {
- UBool isEmpty = true;
+ UErrorCode& status) {
+ bool isEmpty = true;
const char *subtag, *p;
int32_t len;
int32_t i, n;
- UBool noRegion = true;
+ bool noRegion = true;
icu::LocalULanguageTagPointer lt(ultag_parse(langtag, tagLen, parsedLength, status));
- if (U_FAILURE(*status)) {
+ if (U_FAILURE(status)) {
return;
}
diff --git a/icu4c/source/common/ulocimp.h b/icu4c/source/common/ulocimp.h
index 618c387..fc7d4dc 100644
--- a/icu4c/source/common/ulocimp.h
+++ b/icu4c/source/common/ulocimp.h
@@ -53,60 +53,60 @@ uloc_getCurrentCountryID(const char* oldID);
U_CFUNC const char*
uloc_getCurrentLanguageID(const char* oldID);
-U_CFUNC void
-ulocimp_getKeywords(const char *localeID,
- char prev,
- icu::ByteSink& sink,
- UBool valuesToo,
- UErrorCode *status);
+U_EXPORT void
+ulocimp_getKeywords(const char* localeID,
+ char prev,
+ icu::ByteSink& sink,
+ bool valuesToo,
+ UErrorCode& status);
-U_CAPI void U_EXPORT2
+U_EXPORT void
ulocimp_getName(const char* localeID,
icu::ByteSink& sink,
- UErrorCode* err);
+ UErrorCode& err);
-U_CAPI void U_EXPORT2
+U_EXPORT void
ulocimp_getBaseName(const char* localeID,
icu::ByteSink& sink,
- UErrorCode* err);
+ UErrorCode& err);
-U_CAPI void U_EXPORT2
+U_EXPORT void
ulocimp_canonicalize(const char* localeID,
icu::ByteSink& sink,
- UErrorCode* err);
+ UErrorCode& err);
-U_CAPI void U_EXPORT2
+U_EXPORT void
ulocimp_getKeywordValue(const char* localeID,
const char* keywordName,
icu::ByteSink& sink,
- UErrorCode* status);
+ UErrorCode& status);
-U_EXPORT icu::CharString U_EXPORT2
+U_EXPORT icu::CharString
ulocimp_getLanguage(const char* localeID, UErrorCode& status);
-U_EXPORT icu::CharString U_EXPORT2
+U_EXPORT icu::CharString
ulocimp_getScript(const char* localeID, UErrorCode& status);
-U_EXPORT icu::CharString U_EXPORT2
+U_EXPORT icu::CharString
ulocimp_getRegion(const char* localeID, UErrorCode& status);
-U_EXPORT icu::CharString U_EXPORT2
+U_EXPORT icu::CharString
ulocimp_getVariant(const char* localeID, UErrorCode& status);
-U_EXPORT void U_EXPORT2
+U_EXPORT void
ulocimp_setKeywordValue(const char* keywordName,
const char* keywordValue,
icu::CharString& localeID,
- UErrorCode* status);
+ UErrorCode& status);
-U_EXPORT int32_t U_EXPORT2
+U_EXPORT int32_t
ulocimp_setKeywordValue(const char* keywords,
const char* keywordName,
const char* keywordValue,
icu::ByteSink& sink,
- UErrorCode* status);
+ UErrorCode& status);
-U_EXPORT void U_EXPORT2
+U_EXPORT void
ulocimp_getSubtags(
const char* localeID,
icu::CharString* language,
@@ -116,7 +116,7 @@ ulocimp_getSubtags(
const char** pEnd,
UErrorCode& status);
-U_EXPORT void U_EXPORT2
+U_EXPORT void
ulocimp_getSubtags(
const char* localeID,
icu::ByteSink* language,
@@ -126,7 +126,7 @@ ulocimp_getSubtags(
const char** pEnd,
UErrorCode& status);
-inline void U_EXPORT2
+inline void
ulocimp_getSubtags(
const char* localeID,
std::nullptr_t,
@@ -145,10 +145,10 @@ ulocimp_getSubtags(
status);
}
-U_CAPI void U_EXPORT2
+U_EXPORT void
ulocimp_getParent(const char* localeID,
icu::ByteSink& sink,
- UErrorCode* err);
+ UErrorCode& err);
/**
* Writes a well-formed language tag for this locale ID.
@@ -169,11 +169,11 @@ ulocimp_getParent(const char* localeID,
*
* @internal ICU 64
*/
-U_CAPI void U_EXPORT2
+U_EXPORT void
ulocimp_toLanguageTag(const char* localeID,
icu::ByteSink& sink,
- UBool strict,
- UErrorCode* err);
+ bool strict,
+ UErrorCode& err);
/**
* Returns a locale ID for the specified BCP47 language tag string.
@@ -201,12 +201,12 @@ ulocimp_toLanguageTag(const char* localeID,
* failed.
* @internal ICU 63
*/
-U_CAPI void U_EXPORT2
+U_EXPORT void
ulocimp_forLanguageTag(const char* langtag,
int32_t tagLen,
icu::ByteSink& sink,
int32_t* parsedLength,
- UErrorCode* err);
+ UErrorCode& err);
/**
* Get the region to use for supplemental data lookup. Uses
@@ -228,9 +228,9 @@ ulocimp_forLanguageTag(const char* langtag,
* The region code found, empty if none found.
* @internal ICU 57
*/
-U_EXPORT icu::CharString U_EXPORT2
-ulocimp_getRegionForSupplementalData(const char *localeID, UBool inferRegion,
- UErrorCode* status);
+U_EXPORT icu::CharString
+ulocimp_getRegionForSupplementalData(const char *localeID, bool inferRegion,
+ UErrorCode& status);
/**
* Add the likely subtags for a provided locale ID, per the algorithm described
@@ -261,10 +261,10 @@ ulocimp_getRegionForSupplementalData(const char *localeID, UBool inferRegion,
* or the localeId is not well-formed, the error code is U_ILLEGAL_ARGUMENT_ERROR.
* @internal ICU 64
*/
-U_CAPI void U_EXPORT2
+U_EXPORT void
ulocimp_addLikelySubtags(const char* localeID,
icu::ByteSink& sink,
- UErrorCode* err);
+ UErrorCode& err);
/**
* Minimize the subtags for a provided locale ID, per the algorithm described
@@ -296,70 +296,72 @@ ulocimp_addLikelySubtags(const char* localeID,
* or the localeId is not well-formed, the error code is U_ILLEGAL_ARGUMENT_ERROR.
* @internal ICU 64
*/
-U_CAPI void U_EXPORT2
+U_EXPORT void
ulocimp_minimizeSubtags(const char* localeID,
icu::ByteSink& sink,
bool favorScript,
- UErrorCode* err);
+ UErrorCode& err);
U_CAPI const char * U_EXPORT2
locale_getKeywordsStart(const char *localeID);
-U_CFUNC UBool
+bool
ultag_isExtensionSubtags(const char* s, int32_t len);
-U_CFUNC UBool
+bool
ultag_isLanguageSubtag(const char* s, int32_t len);
-U_CFUNC UBool
+bool
ultag_isPrivateuseValueSubtags(const char* s, int32_t len);
-U_CFUNC UBool
+bool
ultag_isRegionSubtag(const char* s, int32_t len);
-U_CFUNC UBool
+bool
ultag_isScriptSubtag(const char* s, int32_t len);
-U_CFUNC UBool
+bool
ultag_isTransformedExtensionSubtags(const char* s, int32_t len);
-U_CFUNC UBool
+bool
ultag_isUnicodeExtensionSubtags(const char* s, int32_t len);
-U_CFUNC UBool
+bool
ultag_isUnicodeLocaleAttribute(const char* s, int32_t len);
-U_CFUNC UBool
+bool
ultag_isUnicodeLocaleAttributes(const char* s, int32_t len);
-U_CFUNC UBool
+bool
ultag_isUnicodeLocaleKey(const char* s, int32_t len);
-U_CFUNC UBool
+bool
ultag_isUnicodeLocaleType(const char* s, int32_t len);
-U_CFUNC UBool
+bool
ultag_isVariantSubtags(const char* s, int32_t len);
-U_CAPI const char * U_EXPORT2
-ultag_getTKeyStart(const char *localeID);
+const char*
+ultag_getTKeyStart(const char* localeID);
-U_CFUNC const char*
+U_EXPORT const char*
ulocimp_toBcpKey(const char* key);
-U_CFUNC const char*
+U_EXPORT const char*
ulocimp_toLegacyKey(const char* key);
-U_CFUNC const char*
-ulocimp_toBcpType(const char* key, const char* type, UBool* isKnownKey, UBool* isSpecialType);
+U_EXPORT const char*
+ulocimp_toBcpType(const char* key, const char* type, bool* isKnownKey, bool* isSpecialType);
-U_CFUNC const char*
-ulocimp_toLegacyType(const char* key, const char* type, UBool* isKnownKey, UBool* isSpecialType);
+U_EXPORT const char*
+ulocimp_toLegacyType(const char* key, const char* type, bool* isKnownKey, bool* isSpecialType);
/* Function for testing purpose */
-U_CAPI const char* const* ulocimp_getKnownCanonicalizedLocaleForTest(int32_t* length);
+U_EXPORT const char* const*
+ulocimp_getKnownCanonicalizedLocaleForTest(int32_t& length);
// Return true if the value is already canonicalized.
-U_CAPI bool ulocimp_isCanonicalizedLocaleForTest(const char* localeName);
+U_EXPORT bool
+ulocimp_isCanonicalizedLocaleForTest(const char* localeName);
#endif
diff --git a/icu4c/source/common/uresbund.cpp b/icu4c/source/common/uresbund.cpp
index 94bea38..5e5c224 100644
--- a/icu4c/source/common/uresbund.cpp
+++ b/icu4c/source/common/uresbund.cpp
@@ -2721,7 +2721,7 @@ ures_openWithType(UResourceBundle *r, const char* path, const char* localeID,
CharString canonLocaleID;
{
CharStringByteSink sink(&canonLocaleID);
- ulocimp_getBaseName(localeID, sink, status);
+ ulocimp_getBaseName(localeID, sink, *status);
}
if(U_FAILURE(*status)) {
*status = U_ILLEGAL_ARGUMENT_ERROR;
@@ -3062,7 +3062,7 @@ static void getParentForFunctionalEquivalent(const char* localeID,
parent.clear();
{
CharStringByteSink sink(&parent);
- ulocimp_getParent(localeID, sink, &subStatus);
+ ulocimp_getParent(localeID, sink, subStatus);
}
}
}
@@ -3086,14 +3086,14 @@ ures_getFunctionalEquivalent(char *result, int32_t resultCapacity,
CharString kwVal;
{
CharStringByteSink sink(&kwVal);
- ulocimp_getKeywordValue(locid, keyword, sink, &subStatus);
+ ulocimp_getKeywordValue(locid, keyword, sink, subStatus);
}
if(kwVal == DEFAULT_TAG) {
kwVal.clear();
}
{
CharStringByteSink sink(&base);
- ulocimp_getBaseName(locid, sink, &subStatus);
+ ulocimp_getBaseName(locid, sink, subStatus);
}
#if defined(URES_TREE_DEBUG)
fprintf(stderr, "getFunctionalEquivalent: \"%s\" [%s=%s] in %s - %s\n",
diff --git a/icu4c/source/common/uscript.cpp b/icu4c/source/common/uscript.cpp
index f1b808d..f9ae8df 100644
--- a/icu4c/source/common/uscript.cpp
+++ b/icu4c/source/common/uscript.cpp
@@ -135,7 +135,7 @@ uscript_getCode(const char* nameOrAbbrOrLocale,
icu::CharString likely;
{
icu::CharStringByteSink sink(&likely);
- ulocimp_addLikelySubtags(nameOrAbbrOrLocale, sink, &internalErrorCode);
+ ulocimp_addLikelySubtags(nameOrAbbrOrLocale, sink, internalErrorCode);
}
if(U_SUCCESS(internalErrorCode) && internalErrorCode != U_STRING_NOT_TERMINATED_WARNING) {
length = getCodesFromLocale(likely.data(), fillIn, capacity, err);
diff --git a/icu4c/source/i18n/calendar.cpp b/icu4c/source/i18n/calendar.cpp
index 3f33a63..3f7b9f5 100644
--- a/icu4c/source/i18n/calendar.cpp
+++ b/icu4c/source/i18n/calendar.cpp
@@ -262,7 +262,7 @@ static ECalType getCalendarTypeForLocale(const char *locid) {
CharString canonicalName;
{
CharStringByteSink sink(&canonicalName);
- ulocimp_canonicalize(locid, sink, &status);
+ ulocimp_canonicalize(locid, sink, status);
}
if (U_FAILURE(status)) {
return CALTYPE_GREGORIAN;
@@ -271,7 +271,7 @@ static ECalType getCalendarTypeForLocale(const char *locid) {
CharString calTypeBuf;
{
CharStringByteSink sink(&calTypeBuf);
- ulocimp_getKeywordValue(canonicalName.data(), "calendar", sink, &status);
+ ulocimp_getKeywordValue(canonicalName.data(), "calendar", sink, status);
}
if (U_SUCCESS(status)) {
calType = getCalendarType(calTypeBuf.data());
@@ -283,7 +283,7 @@ static ECalType getCalendarTypeForLocale(const char *locid) {
// when calendar keyword is not available or not supported, read supplementalData
// to get the default calendar type for the locale's region
- CharString region = ulocimp_getRegionForSupplementalData(canonicalName.data(), true, &status);
+ CharString region = ulocimp_getRegionForSupplementalData(canonicalName.data(), true, status);
if (U_FAILURE(status)) {
return CALTYPE_GREGORIAN;
}
@@ -4035,7 +4035,7 @@ Calendar::setWeekData(const Locale& desiredLocale, const char *type, UErrorCode&
return;
}
- CharString region = ulocimp_getRegionForSupplementalData(desiredLocale.getName(), true, &status);
+ CharString region = ulocimp_getRegionForSupplementalData(desiredLocale.getName(), true, status);
// Read week data values from supplementalData week data
UResourceBundle *rb = ures_openDirect(nullptr, "supplementalData", &status);
diff --git a/icu4c/source/i18n/collationruleparser.cpp b/icu4c/source/i18n/collationruleparser.cpp
index ba740e8..b062f16 100644
--- a/icu4c/source/i18n/collationruleparser.cpp
+++ b/icu4c/source/i18n/collationruleparser.cpp
@@ -610,7 +610,7 @@ CollationRuleParser::parseSetting(UErrorCode &errorCode) {
int32_t parsedLength;
{
CharStringByteSink sink(&localeID);
- ulocimp_forLanguageTag(lang.data(), -1, sink, &parsedLength, &errorCode);
+ ulocimp_forLanguageTag(lang.data(), -1, sink, &parsedLength, errorCode);
}
if(U_FAILURE(errorCode) || parsedLength != lang.length()) {
errorCode = U_ZERO_ERROR;
@@ -635,7 +635,7 @@ CollationRuleParser::parseSetting(UErrorCode &errorCode) {
CharString collationType;
{
CharStringByteSink sink(&collationType);
- ulocimp_getKeywordValue(localeID.data(), "collation", sink, &errorCode);
+ ulocimp_getKeywordValue(localeID.data(), "collation", sink, errorCode);
}
if(U_FAILURE(errorCode)) {
errorCode = U_ZERO_ERROR;
diff --git a/icu4c/source/i18n/dayperiodrules.cpp b/icu4c/source/i18n/dayperiodrules.cpp
index 294390c..77d4db4 100644
--- a/icu4c/source/i18n/dayperiodrules.cpp
+++ b/icu4c/source/i18n/dayperiodrules.cpp
@@ -363,7 +363,7 @@ const DayPeriodRules *DayPeriodRules::getInstance(const Locale &locale, UErrorCo
if (ruleSetNum == 0) {
CharString parent;
CharStringByteSink sink(&parent);
- ulocimp_getParent(name, sink, &errorCode);
+ ulocimp_getParent(name, sink, errorCode);
if (parent.isEmpty()) {
// Saves a lookup in the hash table.
break;
diff --git a/icu4c/source/i18n/dtitvinf.cpp b/icu4c/source/i18n/dtitvinf.cpp
index c4b6bbc..ed5f609 100644
--- a/icu4c/source/i18n/dtitvinf.cpp
+++ b/icu4c/source/i18n/dtitvinf.cpp
@@ -408,7 +408,7 @@ DateIntervalInfo::initializeData(const Locale& locale, UErrorCode& status)
CharString calendarType;
{
CharStringByteSink sink(&calendarType);
- ulocimp_getKeywordValue(localeWithCalendarKey, "calendar", sink, &status);
+ ulocimp_getKeywordValue(localeWithCalendarKey, "calendar", sink, status);
}
if (U_SUCCESS(status)) {
calendarTypeToUse = calendarType.data();
diff --git a/icu4c/source/i18n/dtptngen.cpp b/icu4c/source/i18n/dtptngen.cpp
index 31e851d..138762a 100644
--- a/icu4c/source/i18n/dtptngen.cpp
+++ b/icu4c/source/i18n/dtptngen.cpp
@@ -658,7 +658,7 @@ void DateTimePatternGenerator::getAllowedHourFormats(const Locale &locale, UErro
if (U_FAILURE(status)) { return; }
const char *language = locale.getLanguage();
- CharString baseCountry = ulocimp_getRegionForSupplementalData(locale.getName(), false, &status);
+ CharString baseCountry = ulocimp_getRegionForSupplementalData(locale.getName(), false, status);
const char* country = baseCountry.data();
Locale maxLocale; // must be here for correct lifetime
@@ -911,7 +911,7 @@ DateTimePatternGenerator::getCalendarTypeToUse(const Locale& locale, CharString&
localeWithCalendarKey,
"calendar",
sink,
- &localStatus);
+ localStatus);
}
// If the input locale was invalid, don't fail with missing resource error, instead
// continue with default of Gregorian.
diff --git a/icu4c/source/i18n/gender.cpp b/icu4c/source/i18n/gender.cpp
index d023b50..b4fe4d3 100644
--- a/icu4c/source/i18n/gender.cpp
+++ b/icu4c/source/i18n/gender.cpp
@@ -158,7 +158,7 @@ const GenderInfo* GenderInfo::loadInstance(const Locale& locale, UErrorCode& sta
{
CharString tmp;
CharStringByteSink sink(&tmp);
- ulocimp_getParent(parentLocaleName.data(), sink, &status);
+ ulocimp_getParent(parentLocaleName.data(), sink, status);
if (tmp.isEmpty()) break;
parentLocaleName = std::move(tmp);
}
diff --git a/icu4c/source/i18n/plurrule.cpp b/icu4c/source/i18n/plurrule.cpp
index cd460bd..55ce7b5 100644
--- a/icu4c/source/i18n/plurrule.cpp
+++ b/icu4c/source/i18n/plurrule.cpp
@@ -863,7 +863,7 @@ PluralRules::getRuleFromResource(const Locale& locale, UPluralType type, UErrorC
{
CharString tmp;
CharStringByteSink sink(&tmp);
- ulocimp_getParent(parentLocaleName.data(), sink, &status);
+ ulocimp_getParent(parentLocaleName.data(), sink, status);
if (tmp.isEmpty()) break;
parentLocaleName = std::move(tmp);
}
diff --git a/icu4c/source/i18n/rulebasedcollator.cpp b/icu4c/source/i18n/rulebasedcollator.cpp
index 694ea58..acc44c2 100644
--- a/icu4c/source/i18n/rulebasedcollator.cpp
+++ b/icu4c/source/i18n/rulebasedcollator.cpp
@@ -1583,7 +1583,7 @@ RuleBasedCollator::internalGetShortDefinitionString(const char *locale,
{
CharString collation;
CharStringByteSink sink(&collation);
- ulocimp_getKeywordValue(resultLocale, "collation", sink, &errorCode);
+ ulocimp_getKeywordValue(resultLocale, "collation", sink, errorCode);
appendSubtag(result, 'K', collation.data(), collation.length(), errorCode);
}
CharString language;
diff --git a/icu4c/source/i18n/tmutfmt.cpp b/icu4c/source/i18n/tmutfmt.cpp
index dc48b2e..8b52c61 100644
--- a/icu4c/source/i18n/tmutfmt.cpp
+++ b/icu4c/source/i18n/tmutfmt.cpp
@@ -566,7 +566,7 @@ TimeUnitFormat::searchInLocaleChain(UTimeUnitFormatStyle style, const char* key,
{
CharString tmp;
CharStringByteSink sink(&tmp);
- ulocimp_getParent(parentLocale.data(), sink, &status);
+ ulocimp_getParent(parentLocale.data(), sink, status);
parentLocale = std::move(tmp);
}
// look for pattern for srcPluralCount in locale tree
diff --git a/icu4c/source/i18n/tzfmt.cpp b/icu4c/source/i18n/tzfmt.cpp
index 6891d35..5433113 100644
--- a/icu4c/source/i18n/tzfmt.cpp
+++ b/icu4c/source/i18n/tzfmt.cpp
@@ -331,7 +331,7 @@ TimeZoneFormat::TimeZoneFormat(const Locale& locale, UErrorCode& status)
CharString loc;
{
CharStringByteSink sink(&loc);
- ulocimp_addLikelySubtags(fLocale.getName(), sink, &tempStatus);
+ ulocimp_addLikelySubtags(fLocale.getName(), sink, tempStatus);
}
regionLen = uloc_getCountry(loc.data(), fTargetRegion, sizeof(fTargetRegion), &tempStatus);
diff --git a/icu4c/source/i18n/tzgnames.cpp b/icu4c/source/i18n/tzgnames.cpp
index 4cb5848..631ebd4 100644
--- a/icu4c/source/i18n/tzgnames.cpp
+++ b/icu4c/source/i18n/tzgnames.cpp
@@ -413,7 +413,7 @@ TZGNCore::initialize(const Locale& locale, UErrorCode& status) {
CharString loc;
{
CharStringByteSink sink(&loc);
- ulocimp_addLikelySubtags(fLocale.getName(), sink, &status);
+ ulocimp_addLikelySubtags(fLocale.getName(), sink, status);
}
ulocimp_getSubtags(loc.data(), nullptr, nullptr, &fTargetRegion, nullptr, nullptr, status);
diff --git a/icu4c/source/i18n/tznames_impl.cpp b/icu4c/source/i18n/tznames_impl.cpp
index c315d2b..a313a26 100644
--- a/icu4c/source/i18n/tznames_impl.cpp
+++ b/icu4c/source/i18n/tznames_impl.cpp
@@ -2164,7 +2164,7 @@ TZDBTimeZoneNames::TZDBTimeZoneNames(const Locale& locale)
CharString loc;
{
CharStringByteSink sink(&loc);
- ulocimp_addLikelySubtags(fLocale.getName(), sink, &status);
+ ulocimp_addLikelySubtags(fLocale.getName(), sink, status);
}
ulocimp_getSubtags(loc.data(), nullptr, nullptr, &fRegion, nullptr, nullptr, status);
if (U_SUCCESS(status)) {
diff --git a/icu4c/source/i18n/ucal.cpp b/icu4c/source/i18n/ucal.cpp
index 8b07bd1..05c97f6 100644
--- a/icu4c/source/i18n/ucal.cpp
+++ b/icu4c/source/i18n/ucal.cpp
@@ -172,7 +172,7 @@ ucal_open( const char16_t* zoneID,
locale = uloc_getDefault();
}
CharString localeBuf(locale, *status);
- ulocimp_setKeywordValue("calendar", "gregorian", localeBuf, status);
+ ulocimp_setKeywordValue("calendar", "gregorian", localeBuf, *status);
if (U_FAILURE(*status)) {
return nullptr;
}
@@ -716,7 +716,7 @@ static const char * const CAL_TYPES[] = {
U_CAPI UEnumeration* U_EXPORT2
ucal_getKeywordValuesForLocale(const char * /* key */, const char* locale, UBool commonlyUsed, UErrorCode *status) {
// Resolve region
- CharString prefRegion = ulocimp_getRegionForSupplementalData(locale, true, status);
+ CharString prefRegion = ulocimp_getRegionForSupplementalData(locale, true, *status);
// Read preferred calendar values from supplementalData calendarPreference
UResourceBundle *rb = ures_openDirect(nullptr, "supplementalData", status);
diff --git a/icu4c/source/i18n/ucol_sit.cpp b/icu4c/source/i18n/ucol_sit.cpp
index 2e5bce2..b05b266 100644
--- a/icu4c/source/i18n/ucol_sit.cpp
+++ b/icu4c/source/i18n/ucol_sit.cpp
@@ -454,7 +454,7 @@ ucol_prepareShortStringOpen( const char *definition,
CharString buffer;
{
CharStringByteSink sink(&buffer);
- ulocimp_canonicalize(s.locale.data(), sink, status);
+ ulocimp_canonicalize(s.locale.data(), sink, *status);
}
UResourceBundle *b = ures_open(U_ICUDATA_COLL, buffer.data(), status);
@@ -465,7 +465,7 @@ ucol_prepareShortStringOpen( const char *definition,
{
// if there is a keyword, we pick it up and try to get elements
CharStringByteSink sink(&keyBuffer);
- ulocimp_getKeywordValue(buffer.data(), "collation", sink, status);
+ ulocimp_getKeywordValue(buffer.data(), "collation", sink, *status);
}
if(keyBuffer.isEmpty()) {
// no keyword
@@ -526,7 +526,7 @@ ucol_openFromShortString( const char *definition,
CharString buffer;
{
CharStringByteSink sink(&buffer);
- ulocimp_canonicalize(s.locale.data(), sink, status);
+ ulocimp_canonicalize(s.locale.data(), sink, *status);
}
UCollator *result = ucol_open(buffer.data(), status);
diff --git a/icu4c/source/i18n/ulocdata.cpp b/icu4c/source/i18n/ulocdata.cpp
index 7bb6b3b..a6854a5 100644
--- a/icu4c/source/i18n/ulocdata.cpp
+++ b/icu4c/source/i18n/ulocdata.cpp
@@ -198,11 +198,13 @@ ulocdata_getDelimiter(ULocaleData *uld, ULocaleDataDelimiterType type,
return len;
}
-static UResourceBundle * measurementTypeBundleForLocale(const char *localeID, const char *measurementType, UErrorCode *status){
+namespace {
+
+UResourceBundle * measurementTypeBundleForLocale(const char *localeID, const char *measurementType, UErrorCode *status){
UResourceBundle *rb;
UResourceBundle *measTypeBundle = nullptr;
- icu::CharString region = ulocimp_getRegionForSupplementalData(localeID, true, status);
+ icu::CharString region = ulocimp_getRegionForSupplementalData(localeID, true, *status);
rb = ures_openDirect(nullptr, "supplementalData", status);
ures_getByKey(rb, "measurementData", rb, status);
@@ -225,6 +227,8 @@ static UResourceBundle * measurementTypeBundleForLocale(const char *localeID, co
return measTypeBundle;
}
+} // namespace
+
U_CAPI UMeasurementSystem U_EXPORT2
ulocdata_getMeasurementSystem(const char *localeID, UErrorCode *status){
diff --git a/icu4c/source/i18n/units_data.cpp b/icu4c/source/i18n/units_data.cpp
index 24bbb19..2285927 100644
--- a/icu4c/source/i18n/units_data.cpp
+++ b/icu4c/source/i18n/units_data.cpp
@@ -444,7 +444,7 @@ MaybeStackVector<UnitPreference>
}
}
- CharString region = ulocimp_getRegionForSupplementalData(locale.getName(), false, &status);
+ CharString region = ulocimp_getRegionForSupplementalData(locale.getName(), false, status);
// Check the locale system tag, e.g `ms=metric`.
UErrorCode internalMeasureTagStatus = U_ZERO_ERROR;
diff --git a/icu4c/source/i18n/windtfmt.cpp b/icu4c/source/i18n/windtfmt.cpp
index 6d705b2..d180d1b 100644
--- a/icu4c/source/i18n/windtfmt.cpp
+++ b/icu4c/source/i18n/windtfmt.cpp
@@ -107,7 +107,7 @@ static UErrorCode GetEquivalentWindowsLocaleName(const Locale& locale, UnicodeSt
CharString asciiBCP47Tag;
{
CharStringByteSink sink(&asciiBCP47Tag);
- ulocimp_toLanguageTag(locale.getName(), sink, false, &status);
+ ulocimp_toLanguageTag(locale.getName(), sink, false, status);
}
if (U_SUCCESS(status))
@@ -412,4 +412,3 @@ U_NAMESPACE_END
#endif /* #if !UCONFIG_NO_FORMATTING */
#endif // U_PLATFORM_USES_ONLY_WIN32_API
-
diff --git a/icu4c/source/i18n/winnmfmt.cpp b/icu4c/source/i18n/winnmfmt.cpp
index bf0bd20..e6156ac 100644
--- a/icu4c/source/i18n/winnmfmt.cpp
+++ b/icu4c/source/i18n/winnmfmt.cpp
@@ -152,7 +152,7 @@ static UErrorCode GetEquivalentWindowsLocaleName(const Locale& locale, UnicodeSt
CharString asciiBCP47Tag;
{
CharStringByteSink sink(&asciiBCP47Tag);
- ulocimp_toLanguageTag(locale.getName(), sink, false, &status);
+ ulocimp_toLanguageTag(locale.getName(), sink, false, status);
}
if (U_SUCCESS(status))
diff --git a/icu4c/source/test/intltest/loctest.cpp b/icu4c/source/test/intltest/loctest.cpp
index 8134fca..0238f1b 100644
--- a/icu4c/source/test/intltest/loctest.cpp
+++ b/icu4c/source/test/intltest/loctest.cpp
@@ -5790,7 +5790,7 @@ void LocaleTest::TestKnownCanonicalizedListCorrect()
IcuTestErrorCode status(*this, "TestKnownCanonicalizedListCorrect");
int32_t numOfKnownCanonicalized;
const char* const* knownCanonicalized =
- ulocimp_getKnownCanonicalizedLocaleForTest(&numOfKnownCanonicalized);
+ ulocimp_getKnownCanonicalizedLocaleForTest(numOfKnownCanonicalized);
for (int32_t i = 0; i < numOfKnownCanonicalized; i++) {
std::string msg("Known Canonicalized Locale is not canonicalized: ");
assertTrue((msg + knownCanonicalized[i]).c_str(),