@@ -198,7 +198,11 @@ static Boolean __CFLocaleEqual(CFTypeRef cf1, CFTypeRef cf2) {
198
198
if (__CFLocaleGetType (locale1 ) != __CFLocaleGetType (locale2 )) return false;
199
199
if (!CFEqual (locale1 -> _identifier , locale2 -> _identifier )) return false;
200
200
if (__kCFLocaleUser == __CFLocaleGetType (locale1 )) {
201
- return CFEqual (locale1 -> _prefs , locale2 -> _prefs );
201
+ if (locale1 -> _prefs && locale2 -> _prefs ) {
202
+ return CFEqual (locale1 -> _prefs , locale2 -> _prefs );
203
+ } else {
204
+ return locale1 -> _prefs == locale2 -> _prefs ;
205
+ }
202
206
}
203
207
return true;
204
208
}
@@ -447,6 +451,7 @@ CFLocaleRef CFLocaleCreate(CFAllocatorRef allocator, CFStringRef identifier) {
447
451
uint32_t size = sizeof (struct __CFLocale ) - sizeof (CFRuntimeBase );
448
452
locale = (struct __CFLocale * )_CFRuntimeCreateInstance (allocator , CFLocaleGetTypeID (), size , NULL );
449
453
if (NULL == locale ) {
454
+ __CFUnlock (& __CFLocaleCacheLock );
450
455
if (localeIdentifier ) { CFRelease (localeIdentifier ); }
451
456
return NULL ;
452
457
}
@@ -1171,7 +1176,7 @@ static void __CFLocaleGetMeasurementSystemGuts(CFLocaleRef locale, bool user, UM
1171
1176
UMeasurementSystem output = UMS_SI ; // Default is Metric
1172
1177
bool done = false;
1173
1178
#if DEPLOYMENT_TARGET_MACOSX || DEPLOYMENT_TARGET_EMBEDDED
1174
- if (user ) {
1179
+ if (user && locale -> _prefs ) {
1175
1180
CFTypeRef metricPref = CFDictionaryGetValue (locale -> _prefs , CFSTR ("AppleMetricUnits" ));
1176
1181
CFTypeRef measurementPref = CFDictionaryGetValue (locale -> _prefs , CFSTR ("AppleMeasurementUnits" ));
1177
1182
if (metricPref || measurementPref ) {
@@ -1252,7 +1257,7 @@ static bool __CFLocaleCopyTemperatureUnit(CFLocaleRef locale, bool user, CFTypeR
1252
1257
bool celsius = true; // Default is Celsius
1253
1258
bool done = false;
1254
1259
#if DEPLOYMENT_TARGET_MACOSX || DEPLOYMENT_TARGET_EMBEDDED
1255
- if (user ) {
1260
+ if (user && locale -> _prefs ) {
1256
1261
CFTypeRef temperatureUnitPref = CFDictionaryGetValue (locale -> _prefs , CFSTR ("AppleTemperatureUnit" ));
1257
1262
if (temperatureUnitPref ) {
1258
1263
if (CFEqual (temperatureUnitPref , kCFLocaleTemperatureUnitFahrenheit )) {
@@ -1426,7 +1431,7 @@ static bool __CFLocaleFullName(const char *locale, const char *value, CFStringRe
1426
1431
int32_t localSize ;
1427
1432
UChar localName [kMaxICUNameSize ];
1428
1433
localSize = uloc_getDisplayLanguage (value , locale , localName , kMaxICUNameSize , & localStatus );
1429
- if (U_FAILURE (localStatus ) || size <= 0 || localStatus == U_USING_DEFAULT_WARNING )
1434
+ if (U_FAILURE (localStatus ) || localSize <= 0 || localStatus == U_USING_DEFAULT_WARNING )
1430
1435
return false;
1431
1436
}
1432
1437
0 commit comments