| Index: source/common/putil.cpp
|
| diff --git a/source/common/putil.cpp b/source/common/putil.cpp
|
| index c87b60e3828814edcafe930b82a3d0e735d6c76a..ca1dd445b37019e0c173fde7d893dfa44664f7d9 100644
|
| --- a/source/common/putil.cpp
|
| +++ b/source/common/putil.cpp
|
| @@ -1,7 +1,9 @@
|
| +// Copyright (C) 2016 and later: Unicode, Inc. and others.
|
| +// License & terms of use: http://www.unicode.org/copyright.html
|
| /*
|
| ******************************************************************************
|
| *
|
| -* Copyright (C) 1997-2014, International Business Machines
|
| +* Copyright (C) 1997-2016, International Business Machines
|
| * Corporation and others. All Rights Reserved.
|
| *
|
| ******************************************************************************
|
| @@ -1009,6 +1011,10 @@ uprv_tzname(int n)
|
| && uprv_strcmp(tzid, TZ_ENV_CHECK) != 0
|
| #endif
|
| ) {
|
| + /* The colon forces tzset() to treat the remainder as zoneinfo path */
|
| + if (tzid[0] == ':') {
|
| + tzid++;
|
| + }
|
| /* This might be a good Olson ID. */
|
| skipZoneIDPrefix(&tzid);
|
| return tzid;
|
| @@ -1024,7 +1030,7 @@ uprv_tzname(int n)
|
| because the tzfile contents is underspecified.
|
| This isn't guaranteed to work because it may not be a symlink.
|
| */
|
| - int32_t ret = (int32_t)readlink(TZDEFAULT, gTimeZoneBuffer, sizeof(gTimeZoneBuffer));
|
| + int32_t ret = (int32_t)readlink(TZDEFAULT, gTimeZoneBuffer, sizeof(gTimeZoneBuffer)-1);
|
| if (0 < ret) {
|
| int32_t tzZoneInfoLen = uprv_strlen(TZZONEINFO);
|
| gTimeZoneBuffer[ret] = 0;
|
| @@ -1392,9 +1398,18 @@ static const char *uprv_getPOSIXIDForCategory(int category)
|
| {
|
| /* Maybe we got some garbage. Try something more reasonable */
|
| posixID = getenv("LC_ALL");
|
| + /* Solaris speaks POSIX - See IEEE Std 1003.1-2008
|
| + * This is needed to properly handle empty env. variables
|
| + */
|
| +#if U_PLATFORM == U_PF_SOLARIS
|
| + if ((posixID == 0) || (posixID[0] == '\0')) {
|
| + posixID = getenv(category == LC_MESSAGES ? "LC_MESSAGES" : "LC_CTYPE");
|
| + if ((posixID == 0) || (posixID[0] == '\0')) {
|
| +#else
|
| if (posixID == 0) {
|
| posixID = getenv(category == LC_MESSAGES ? "LC_MESSAGES" : "LC_CTYPE");
|
| if (posixID == 0) {
|
| +#endif
|
| posixID = getenv("LANG");
|
| }
|
| }
|
| @@ -1886,7 +1901,10 @@ int_getDefaultCodepage()
|
|
|
| localeName = uprv_getPOSIXIDForDefaultCodepage();
|
| uprv_memset(codesetName, 0, sizeof(codesetName));
|
| -#if U_HAVE_NL_LANGINFO_CODESET
|
| + /* On Solaris nl_langinfo returns C locale values unless setlocale
|
| + * was called earlier.
|
| + */
|
| +#if (U_HAVE_NL_LANGINFO_CODESET && U_PLATFORM != U_PF_SOLARIS)
|
| /* When available, check nl_langinfo first because it usually gives more
|
| useful names. It depends on LC_CTYPE.
|
| nl_langinfo may use the same buffer as setlocale. */
|
| @@ -2197,6 +2215,7 @@ uprv_dlsym_func(void *lib, const char* sym, UErrorCode *status) {
|
|
|
| U_INTERNAL void * U_EXPORT2
|
| uprv_dl_open(const char *libName, UErrorCode *status) {
|
| + (void)libName;
|
| if(U_FAILURE(*status)) return NULL;
|
| *status = U_UNSUPPORTED_ERROR;
|
| return NULL;
|
| @@ -2204,6 +2223,7 @@ uprv_dl_open(const char *libName, UErrorCode *status) {
|
|
|
| U_INTERNAL void U_EXPORT2
|
| uprv_dl_close(void *lib, UErrorCode *status) {
|
| + (void)lib;
|
| if(U_FAILURE(*status)) return;
|
| *status = U_UNSUPPORTED_ERROR;
|
| return;
|
| @@ -2212,6 +2232,8 @@ uprv_dl_close(void *lib, UErrorCode *status) {
|
|
|
| U_INTERNAL UVoidFunction* U_EXPORT2
|
| uprv_dlsym_func(void *lib, const char* sym, UErrorCode *status) {
|
| + (void)lib;
|
| + (void)sym;
|
| if(U_SUCCESS(*status)) {
|
| *status = U_UNSUPPORTED_ERROR;
|
| }
|
|
|