@@ -1133,99 +1133,71 @@ Boolean _CFTimeZoneInitWithTimeIntervalFromGMT(CFTimeZoneRef result, CFTimeInter
1133
1133
}
1134
1134
1135
1135
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 ();
1156
1146
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 );
1175
1177
}
1176
1178
}
1177
1179
}
1178
1180
}
1179
1181
}
1180
1182
}
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 ;
1189
1192
#if TARGET_OS_WIN32
1190
- baseURL = CFURLCreateWithFileSystemPath (kCFAllocatorSystemDefault , __tzZoneInfo , kCFURLWindowsPathStyle , true);
1193
+ baseURL = CFURLCreateWithFileSystemPath (kCFAllocatorSystemDefault , __tzZoneInfo , kCFURLWindowsPathStyle , true);
1191
1194
#else
1192
- baseURL = CFURLCreateWithFileSystemPath (kCFAllocatorSystemDefault , __tzZoneInfo , kCFURLPOSIXPathStyle , true);
1195
+ baseURL = CFURLCreateWithFileSystemPath (kCFAllocatorSystemDefault , __tzZoneInfo , kCFURLPOSIXPathStyle , true);
1193
1196
#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 ) {
1229
1201
tempURL = CFURLCreateCopyAppendingPathComponent (kCFAllocatorSystemDefault , baseURL , tzName , false);
1230
1202
if (NULL != tempURL ) {
1231
1203
if (_CFReadBytesFromFile (kCFAllocatorSystemDefault , tempURL , & bytes , & length , 0 , 0 )) {
@@ -1234,15 +1206,44 @@ Boolean _CFTimeZoneInit(CFTimeZoneRef timeZone, CFStringRef name, CFDataRef data
1234
1206
CFRelease (tempURL );
1235
1207
}
1236
1208
}
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;
1241
1228
}
1242
- return result ;
1243
1229
}
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 ;
1244
1246
}
1245
- return false;
1246
1247
}
1247
1248
1248
1249
CFTimeZoneRef CFTimeZoneCreate (CFAllocatorRef allocator , CFStringRef name , CFDataRef data ) {
0 commit comments