Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(211)

Side by Side Diff: source/common/uloc_tag.c

Issue 1621843002: ICU 56 update step 1 (Closed) Base URL: https://chromium.googlesource.com/chromium/deps/icu.git@561
Patch Set: Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « source/common/uloc.cpp ('k') | source/common/umutex.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 ********************************************************************** 2 **********************************************************************
3 * Copyright (C) 2009-2014, International Business Machines 3 * Copyright (C) 2009-2015, International Business Machines
4 * Corporation and others. All Rights Reserved. 4 * Corporation and others. All Rights Reserved.
5 ********************************************************************** 5 **********************************************************************
6 */ 6 */
7 7
8 #include "unicode/utypes.h" 8 #include "unicode/utypes.h"
9 #include "unicode/ures.h" 9 #include "unicode/ures.h"
10 #include "unicode/putil.h" 10 #include "unicode/putil.h"
11 #include "unicode/uloc.h" 11 #include "unicode/uloc.h"
12 #include "ustr_imp.h" 12 #include "ustr_imp.h"
13 #include "cmemory.h" 13 #include "cmemory.h"
(...skipping 1299 matching lines...) Expand 10 before | Expand all | Expand 10 after
1313 const char *pBcpKey = NULL; /* u extenstion key subtag */ 1313 const char *pBcpKey = NULL; /* u extenstion key subtag */
1314 const char *pBcpType = NULL; /* beginning of u extension type subtag( s) */ 1314 const char *pBcpType = NULL; /* beginning of u extension type subtag( s) */
1315 int32_t bcpKeyLen = 0; 1315 int32_t bcpKeyLen = 0;
1316 int32_t bcpTypeLen = 0; 1316 int32_t bcpTypeLen = 0;
1317 UBool isDone = FALSE; 1317 UBool isDone = FALSE;
1318 1318
1319 pTag = pKwds; 1319 pTag = pKwds;
1320 /* BCP47 representation of LDML key/type pairs */ 1320 /* BCP47 representation of LDML key/type pairs */
1321 while (!isDone) { 1321 while (!isDone) {
1322 const char *pNextBcpKey = NULL; 1322 const char *pNextBcpKey = NULL;
1323 int32_t nextBcpKeyLen; 1323 int32_t nextBcpKeyLen = 0;
1324 UBool emitKeyword = FALSE; 1324 UBool emitKeyword = FALSE;
1325 1325
1326 if (*pTag) { 1326 if (*pTag) {
1327 /* locate next separator char */ 1327 /* locate next separator char */
1328 for (len = 0; *(pTag + len) && *(pTag + len) != SEP; len++); 1328 for (len = 0; *(pTag + len) && *(pTag + len) != SEP; len++);
1329 1329
1330 if (ultag_isUnicodeLocaleKey(pTag, len)) { 1330 if (ultag_isUnicodeLocaleKey(pTag, len)) {
1331 if (pBcpKey) { 1331 if (pBcpKey) {
1332 emitKeyword = TRUE; 1332 emitKeyword = TRUE;
1333 pNextBcpKey = pTag; 1333 pNextBcpKey = pTag;
(...skipping 492 matching lines...) Expand 10 before | Expand all | Expand 10 after
1826 if (uprv_stricmp(GRANDFATHERED[i], tagBuf) == 0) { 1826 if (uprv_stricmp(GRANDFATHERED[i], tagBuf) == 0) {
1827 int32_t newTagLength; 1827 int32_t newTagLength;
1828 1828
1829 grandfatheredLen = tagLen; /* back up for output parsedLen */ 1829 grandfatheredLen = tagLen; /* back up for output parsedLen */
1830 newTagLength = uprv_strlen(GRANDFATHERED[i+1]); 1830 newTagLength = uprv_strlen(GRANDFATHERED[i+1]);
1831 if (tagLen < newTagLength) { 1831 if (tagLen < newTagLength) {
1832 uprv_free(tagBuf); 1832 uprv_free(tagBuf);
1833 tagBuf = (char*)uprv_malloc(newTagLength + 1); 1833 tagBuf = (char*)uprv_malloc(newTagLength + 1);
1834 if (tagBuf == NULL) { 1834 if (tagBuf == NULL) {
1835 *status = U_MEMORY_ALLOCATION_ERROR; 1835 *status = U_MEMORY_ALLOCATION_ERROR;
1836 ultag_close(t);
1836 return NULL; 1837 return NULL;
1837 } 1838 }
1838 t->buf = tagBuf; 1839 t->buf = tagBuf;
1839 tagLen = newTagLength; 1840 tagLen = newTagLength;
1840 } 1841 }
1841 uprv_strcpy(t->buf, GRANDFATHERED[i + 1]); 1842 uprv_strcpy(t->buf, GRANDFATHERED[i + 1]);
1842 break; 1843 break;
1843 } 1844 }
1844 } 1845 }
1845 1846
(...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after
2122 } 2123 }
2123 } 2124 }
2124 2125
2125 if (parsedLen != NULL) { 2126 if (parsedLen != NULL) {
2126 *parsedLen = (grandfatheredLen > 0) ? grandfatheredLen : (int32_t)(pLast GoodPosition - t->buf); 2127 *parsedLen = (grandfatheredLen > 0) ? grandfatheredLen : (int32_t)(pLast GoodPosition - t->buf);
2127 } 2128 }
2128 2129
2129 return t; 2130 return t;
2130 2131
2131 error: 2132 error:
2132 uprv_free(t); 2133 ultag_close(t);
2133 return NULL; 2134 return NULL;
2134 } 2135 }
2135 2136
2136 static void 2137 static void
2137 ultag_close(ULanguageTag* langtag) { 2138 ultag_close(ULanguageTag* langtag) {
2138 2139
2139 if (langtag == NULL) { 2140 if (langtag == NULL) {
2140 return; 2141 return;
2141 } 2142 }
2142 2143
(...skipping 358 matching lines...) Expand 10 before | Expand all | Expand 10 after
2501 } 2502 }
2502 len = _appendKeywords(lt, localeID + reslen, localeIDCapacity - reslen, status); 2503 len = _appendKeywords(lt, localeID + reslen, localeIDCapacity - reslen, status);
2503 reslen += len; 2504 reslen += len;
2504 } 2505 }
2505 2506
2506 ultag_close(lt); 2507 ultag_close(lt);
2507 return u_terminateChars(localeID, localeIDCapacity, reslen, status); 2508 return u_terminateChars(localeID, localeIDCapacity, reslen, status);
2508 } 2509 }
2509 2510
2510 2511
OLDNEW
« no previous file with comments | « source/common/uloc.cpp ('k') | source/common/umutex.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698