OLD | NEW |
1 /* | 1 /* |
2 ********************************************************************** | 2 ********************************************************************** |
3 * Copyright (C) 1997-2012, International Business Machines | 3 * Copyright (C) 1997-2012, International Business Machines |
4 * Corporation and others. All Rights Reserved. | 4 * Corporation and others. All Rights Reserved. |
5 ********************************************************************** | 5 ********************************************************************** |
6 * | 6 * |
7 * File locid.cpp | 7 * File locid.cpp |
8 * | 8 * |
9 * Created by: Richard Gillam | 9 * Created by: Richard Gillam |
10 * | 10 * |
(...skipping 466 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
477 UErrorCode err; | 477 UErrorCode err; |
478 | 478 |
479 if(localeID == NULL) { | 479 if(localeID == NULL) { |
480 // not an error, just set the default locale | 480 // not an error, just set the default locale |
481 return *this = getDefault(); | 481 return *this = getDefault(); |
482 } | 482 } |
483 | 483 |
484 /* preset all fields to empty */ | 484 /* preset all fields to empty */ |
485 language[0] = script[0] = country[0] = 0; | 485 language[0] = script[0] = country[0] = 0; |
486 | 486 |
| 487 // Need to reset baseName. Otherwise, when a Locale object created with |
| 488 // the default constructor is changed with setFromPOSIXID() later |
| 489 // (e.g. locales obtained with getAvailableLocales()), |
| 490 // baseName will be still that of the default locale instead of one |
| 491 // corresponding to localeID. |
| 492 baseName = NULL; |
| 493 |
487 // "canonicalize" the locale ID to ICU/Java format | 494 // "canonicalize" the locale ID to ICU/Java format |
488 err = U_ZERO_ERROR; | 495 err = U_ZERO_ERROR; |
489 length = canonicalize ? | 496 length = canonicalize ? |
490 uloc_canonicalize(localeID, fullName, sizeof(fullNameBuffer), &err)
: | 497 uloc_canonicalize(localeID, fullName, sizeof(fullNameBuffer), &err)
: |
491 uloc_getName(localeID, fullName, sizeof(fullNameBuffer), &err); | 498 uloc_getName(localeID, fullName, sizeof(fullNameBuffer), &err); |
492 | 499 |
493 if(err == U_BUFFER_OVERFLOW_ERROR || length >= (int32_t)sizeof(fullNameB
uffer)) { | 500 if(err == U_BUFFER_OVERFLOW_ERROR || length >= (int32_t)sizeof(fullNameB
uffer)) { |
494 /*Go to heap for the fullName if necessary*/ | 501 /*Go to heap for the fullName if necessary*/ |
495 fullName = (char *)uprv_malloc(sizeof(char)*(length + 1)); | 502 fullName = (char *)uprv_malloc(sizeof(char)*(length + 1)); |
496 if(fullName == 0) { | 503 if(fullName == 0) { |
(...skipping 531 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1028 // the length of the baseName. Patch around this for now. | 1035 // the length of the baseName. Patch around this for now. |
1029 if (variantBegin == (int32_t)uprv_strlen(fullName)) { | 1036 if (variantBegin == (int32_t)uprv_strlen(fullName)) { |
1030 ((Locale*)this)->variantBegin = baseNameSize; | 1037 ((Locale*)this)->variantBegin = baseNameSize; |
1031 } | 1038 } |
1032 } | 1039 } |
1033 return baseName; | 1040 return baseName; |
1034 } | 1041 } |
1035 | 1042 |
1036 //eof | 1043 //eof |
1037 U_NAMESPACE_END | 1044 U_NAMESPACE_END |
OLD | NEW |