Skip to content

Commit ab7f3b2

Browse files
committed
NumberDate: use early return in _CFTimeZoneInit
Use an early return to reduce indentation. NFC.
1 parent 8e587b8 commit ab7f3b2

File tree

1 file changed

+90
-89
lines changed

1 file changed

+90
-89
lines changed

Diff for: CoreFoundation/NumberDate.subproj/CFTimeZone.c

+90-89
Original file line numberDiff line numberDiff line change
@@ -1133,99 +1133,71 @@ Boolean _CFTimeZoneInitWithTimeIntervalFromGMT(CFTimeZoneRef result, CFTimeInter
11331133
}
11341134

11351135
Boolean _CFTimeZoneInit(CFTimeZoneRef timeZone, CFStringRef name, CFDataRef data) {
1136-
if (name && __nameStringOK(name)) {
1137-
if (data) {
1138-
CFTZPeriod *tzp = NULL;
1139-
CFIndex cnt = 0;
1140-
__CFTimeZoneLockGlobal();
1141-
if (__CFParseTimeZoneData(kCFAllocatorSystemDefault, data, &tzp, &cnt)) {
1142-
__CFTimeZoneUnlockGlobal();
1143-
1144-
} else {
1145-
__CFTimeZoneUnlockGlobal();
1146-
return false;
1147-
}
1148-
((struct __CFTimeZone *)timeZone)->_name = (CFStringRef)CFStringCreateCopy(kCFAllocatorSystemDefault, name);
1149-
((struct __CFTimeZone *)timeZone)->_data = CFDataCreateCopy(kCFAllocatorSystemDefault, data);
1150-
((struct __CFTimeZone *)timeZone)->_periods = tzp;
1151-
((struct __CFTimeZone *)timeZone)->_periodCnt = cnt;
1152-
return true;
1153-
} else {
1154-
CFStringRef tzName = NULL;
1155-
CFDataRef data = NULL;
1136+
if (!name || !__nameStringOK(name)) {
1137+
return false;
1138+
}
1139+
1140+
if (data) {
1141+
CFTZPeriod *tzp = NULL;
1142+
CFIndex cnt = 0;
1143+
__CFTimeZoneLockGlobal();
1144+
if (__CFParseTimeZoneData(kCFAllocatorSystemDefault, data, &tzp, &cnt)) {
1145+
__CFTimeZoneUnlockGlobal();
11561146

1157-
CFIndex len = CFStringGetLength(name);
1158-
if (6 == len || 8 == len) {
1159-
UniChar buffer[8];
1160-
CFStringGetCharacters(name, CFRangeMake(0, len), buffer);
1161-
if ('G' == buffer[0] && 'M' == buffer[1] && 'T' == buffer[2] && ('+' == buffer[3] || '-' == buffer[3])) {
1162-
if (('0' <= buffer[4] && buffer[4] <= '9') && ('0' <= buffer[5] && buffer[5] <= '9')) {
1163-
int32_t hours = (buffer[4] - '0') * 10 + (buffer[5] - '0');
1164-
if (-14 <= hours && hours <= 14) {
1165-
CFTimeInterval ti = hours * 3600.0;
1166-
if (6 == len) {
1167-
return _CFTimeZoneInitWithTimeIntervalFromGMT(timeZone, ('-' == buffer[3] ? -1.0 : 1.0) * ti);
1168-
} else {
1169-
if (('0' <= buffer[6] && buffer[6] <= '9') && ('0' <= buffer[7] && buffer[7] <= '9')) {
1170-
int32_t minutes = (buffer[6] - '0') * 10 + (buffer[7] - '0');
1171-
if ((-14 == hours && 0 == minutes) || (14 == hours && 0 == minutes) || (0 <= minutes && minutes <= 59)) {
1172-
ti = ti + minutes * 60.0;
1173-
return _CFTimeZoneInitWithTimeIntervalFromGMT(timeZone, ('-' == buffer[3] ? -1.0 : 1.0) * ti);
1174-
}
1147+
} else {
1148+
__CFTimeZoneUnlockGlobal();
1149+
return false;
1150+
}
1151+
((struct __CFTimeZone *)timeZone)->_name = (CFStringRef)CFStringCreateCopy(kCFAllocatorSystemDefault, name);
1152+
((struct __CFTimeZone *)timeZone)->_data = CFDataCreateCopy(kCFAllocatorSystemDefault, data);
1153+
((struct __CFTimeZone *)timeZone)->_periods = tzp;
1154+
((struct __CFTimeZone *)timeZone)->_periodCnt = cnt;
1155+
return true;
1156+
} else {
1157+
CFStringRef tzName = NULL;
1158+
CFDataRef data = NULL;
1159+
1160+
CFIndex len = CFStringGetLength(name);
1161+
if (6 == len || 8 == len) {
1162+
UniChar buffer[8];
1163+
CFStringGetCharacters(name, CFRangeMake(0, len), buffer);
1164+
if ('G' == buffer[0] && 'M' == buffer[1] && 'T' == buffer[2] && ('+' == buffer[3] || '-' == buffer[3])) {
1165+
if (('0' <= buffer[4] && buffer[4] <= '9') && ('0' <= buffer[5] && buffer[5] <= '9')) {
1166+
int32_t hours = (buffer[4] - '0') * 10 + (buffer[5] - '0');
1167+
if (-14 <= hours && hours <= 14) {
1168+
CFTimeInterval ti = hours * 3600.0;
1169+
if (6 == len) {
1170+
return _CFTimeZoneInitWithTimeIntervalFromGMT(timeZone, ('-' == buffer[3] ? -1.0 : 1.0) * ti);
1171+
} else {
1172+
if (('0' <= buffer[6] && buffer[6] <= '9') && ('0' <= buffer[7] && buffer[7] <= '9')) {
1173+
int32_t minutes = (buffer[6] - '0') * 10 + (buffer[7] - '0');
1174+
if ((-14 == hours && 0 == minutes) || (14 == hours && 0 == minutes) || (0 <= minutes && minutes <= 59)) {
1175+
ti = ti + minutes * 60.0;
1176+
return _CFTimeZoneInitWithTimeIntervalFromGMT(timeZone, ('-' == buffer[3] ? -1.0 : 1.0) * ti);
11751177
}
11761178
}
11771179
}
11781180
}
11791181
}
11801182
}
1181-
Boolean tryAbbrev = true;
1182-
CFURLRef baseURL, tempURL;
1183-
void *bytes;
1184-
CFIndex length;
1185-
Boolean result = false;
1186-
1187-
if (!__tzZoneInfo) __InitTZStrings();
1188-
if (!__tzZoneInfo) return NULL;
1183+
}
1184+
Boolean tryAbbrev = true;
1185+
CFURLRef baseURL, tempURL;
1186+
void *bytes;
1187+
CFIndex length;
1188+
Boolean result = false;
1189+
1190+
if (!__tzZoneInfo) __InitTZStrings();
1191+
if (!__tzZoneInfo) return NULL;
11891192
#if TARGET_OS_WIN32
1190-
baseURL = CFURLCreateWithFileSystemPath(kCFAllocatorSystemDefault, __tzZoneInfo, kCFURLWindowsPathStyle, true);
1193+
baseURL = CFURLCreateWithFileSystemPath(kCFAllocatorSystemDefault, __tzZoneInfo, kCFURLWindowsPathStyle, true);
11911194
#else
1192-
baseURL = CFURLCreateWithFileSystemPath(kCFAllocatorSystemDefault, __tzZoneInfo, kCFURLPOSIXPathStyle, true);
1195+
baseURL = CFURLCreateWithFileSystemPath(kCFAllocatorSystemDefault, __tzZoneInfo, kCFURLPOSIXPathStyle, true);
11931196
#endif
1194-
if (tryAbbrev) {
1195-
CFDictionaryRef abbrevs = CFTimeZoneCopyAbbreviationDictionary();
1196-
tzName = CFDictionaryGetValue(abbrevs, name);
1197-
if (NULL != tzName) {
1198-
tempURL = CFURLCreateCopyAppendingPathComponent(kCFAllocatorSystemDefault, baseURL, tzName, false);
1199-
if (NULL != tempURL) {
1200-
if (_CFReadBytesFromFile(kCFAllocatorSystemDefault, tempURL, &bytes, &length, 0, 0)) {
1201-
data = CFDataCreateWithBytesNoCopy(kCFAllocatorSystemDefault, bytes, length, kCFAllocatorSystemDefault);
1202-
}
1203-
CFRelease(tempURL);
1204-
}
1205-
}
1206-
CFRelease(abbrevs);
1207-
}
1208-
if (NULL == data) {
1209-
CFDictionaryRef dict = __CFTimeZoneCopyCompatibilityDictionary();
1210-
CFStringRef mapping = CFDictionaryGetValue(dict, name);
1211-
if (mapping) {
1212-
name = mapping;
1213-
} else if (CFStringHasPrefix(name, __tzZoneInfo)) {
1214-
CFMutableStringRef unprefixed = CFStringCreateMutableCopy(kCFAllocatorSystemDefault, CFStringGetLength(name), name);
1215-
CFStringDelete(unprefixed, CFRangeMake(0, CFStringGetLength(__tzZoneInfo)));
1216-
mapping = CFDictionaryGetValue(dict, unprefixed);
1217-
if (mapping) {
1218-
name = mapping;
1219-
}
1220-
CFRelease(unprefixed);
1221-
}
1222-
CFRelease(dict);
1223-
if (CFEqual(CFSTR(""), name)) {
1224-
return false;
1225-
}
1226-
}
1227-
if (NULL == data) {
1228-
tzName = name;
1197+
if (tryAbbrev) {
1198+
CFDictionaryRef abbrevs = CFTimeZoneCopyAbbreviationDictionary();
1199+
tzName = CFDictionaryGetValue(abbrevs, name);
1200+
if (NULL != tzName) {
12291201
tempURL = CFURLCreateCopyAppendingPathComponent(kCFAllocatorSystemDefault, baseURL, tzName, false);
12301202
if (NULL != tempURL) {
12311203
if (_CFReadBytesFromFile(kCFAllocatorSystemDefault, tempURL, &bytes, &length, 0, 0)) {
@@ -1234,15 +1206,44 @@ Boolean _CFTimeZoneInit(CFTimeZoneRef timeZone, CFStringRef name, CFDataRef data
12341206
CFRelease(tempURL);
12351207
}
12361208
}
1237-
CFRelease(baseURL);
1238-
if (NULL != data) {
1239-
result = _CFTimeZoneInit(timeZone, tzName, data);
1240-
CFRelease(data);
1209+
CFRelease(abbrevs);
1210+
}
1211+
if (NULL == data) {
1212+
CFDictionaryRef dict = __CFTimeZoneCopyCompatibilityDictionary();
1213+
CFStringRef mapping = CFDictionaryGetValue(dict, name);
1214+
if (mapping) {
1215+
name = mapping;
1216+
} else if (CFStringHasPrefix(name, __tzZoneInfo)) {
1217+
CFMutableStringRef unprefixed = CFStringCreateMutableCopy(kCFAllocatorSystemDefault, CFStringGetLength(name), name);
1218+
CFStringDelete(unprefixed, CFRangeMake(0, CFStringGetLength(__tzZoneInfo)));
1219+
mapping = CFDictionaryGetValue(dict, unprefixed);
1220+
if (mapping) {
1221+
name = mapping;
1222+
}
1223+
CFRelease(unprefixed);
1224+
}
1225+
CFRelease(dict);
1226+
if (CFEqual(CFSTR(""), name)) {
1227+
return false;
12411228
}
1242-
return result;
12431229
}
1230+
if (NULL == data) {
1231+
tzName = name;
1232+
tempURL = CFURLCreateCopyAppendingPathComponent(kCFAllocatorSystemDefault, baseURL, tzName, false);
1233+
if (NULL != tempURL) {
1234+
if (_CFReadBytesFromFile(kCFAllocatorSystemDefault, tempURL, &bytes, &length, 0, 0)) {
1235+
data = CFDataCreateWithBytesNoCopy(kCFAllocatorSystemDefault, bytes, length, kCFAllocatorSystemDefault);
1236+
}
1237+
CFRelease(tempURL);
1238+
}
1239+
}
1240+
CFRelease(baseURL);
1241+
if (NULL != data) {
1242+
result = _CFTimeZoneInit(timeZone, tzName, data);
1243+
CFRelease(data);
1244+
}
1245+
return result;
12441246
}
1245-
return false;
12461247
}
12471248

12481249
CFTimeZoneRef CFTimeZoneCreate(CFAllocatorRef allocator, CFStringRef name, CFDataRef data) {

0 commit comments

Comments
 (0)