diff --git a/icu4c/source/common/wintz.c b/icu4c/source/common/wintz.c index 5959194378..4b22ca27dd 100644 --- a/icu4c/source/common/wintz.c +++ b/icu4c/source/common/wintz.c @@ -252,12 +252,13 @@ uprv_detectWindowsTimeZone() { char* icuid = NULL; UChar apiStd[MAX_LENGTH_ID]; char apiStdName[MAX_LENGTH_ID]; - char regStdName[MAX_LENGTH_ID]; + char regStdName[MAX_LENGTH_ID]; char tmpid[MAX_LENGTH_ID]; int32_t apiStdLength = 0; int32_t len; - int id; - char ISOcode[3]; //2 letter iso code + int id; + int errorCode; + char ISOcode[3]; //2 letter iso code LONG result; TZI tziKey; @@ -283,9 +284,9 @@ uprv_detectWindowsTimeZone() { u_austrncpy(apiStdName, apiStd, apiStdLength); tmpid[0] = 0; - - id = GetUserGeoID(GEOCLASS_NATION); - GetGeoInfo(id,GEO_ISO2,ISOcode,3,0); + + id = GetUserGeoID(GEOCLASS_NATION); + errorCode = GetGeoInfo(id,GEO_ISO2,ISOcode,3,0); bundle = ures_openDirect(NULL, "windowsZones", &status); ures_getByKey(bundle, "mapTimezones", bundle, &status); @@ -309,13 +310,15 @@ uprv_detectWindowsTimeZone() { tziKey.daylightBias = tziReg.daylightBias; if (uprv_memcmp((char *)&tziKey, (char*)&tziReg, sizeof(tziKey)) == 0) { - const UChar* icuTZ = ures_getStringByKey(winTZ, ISOcode, &len, &status); - - if (icuTZ==NULL) { - //fallback to default "001" and reset status - status = U_ZERO_ERROR; - icuTZ = ures_getStringByKey(winTZ, "001", &len, &status); - } + const UChar* icuTZ; + if (errorCode != 0) { + icuTZ = ures_getStringByKey(winTZ, ISOcode, &len, &status); + } + if (errorCode==0 || icuTZ==NULL) { + //fallback to default "001" and reset status + status = U_ZERO_ERROR; + icuTZ = ures_getStringByKey(winTZ, "001", &len, &status); + } if (U_SUCCESS(status)) { /* Get the standard name from the registry key to compare with @@ -333,15 +336,12 @@ uprv_detectWindowsTimeZone() { * the current time zone information) */ if (idFound || tmpid[0] == 0) { - //if icuTZ has more than one city, take only the first (i.e. terminate icuTZ at first space) - int index=0; - while (! (*icuTZ == '\0' || *icuTZ ==' ')) { - tmpid[index++]=*icuTZ++; - } - tmpid[index]='\0'; - - //uprv_memset(tmpid, 0, sizeof(tmpid)); - //u_austrncpy(tmpid, icuTZ, len); + //if icuTZ has more than one city, take only the first (i.e. terminate icuTZ at first space) + int index=0; + while (! (*icuTZ == '\0' || *icuTZ ==' ')) { + tmpid[index++]=*icuTZ++; + } + tmpid[index]='\0'; } } } @@ -365,7 +365,7 @@ uprv_detectWindowsTimeZone() { ures_close(bundle); - return icuid; + return icuid; } #endif /* U_PLATFORM_HAS_WIN32_API */