@@ -1132,103 +1132,77 @@ Boolean _CFTimeZoneInitWithTimeIntervalFromGMT(CFTimeZoneRef result, CFTimeInter
1132
1132
return true;
1133
1133
}
1134
1134
1135
+ Boolean _CFTimeZoneInitInternal (CFTimeZoneRef timezone , CFStringRef name , CFDataRef data ) {
1136
+ CFTZPeriod * tzp = NULL ;
1137
+ CFIndex cnt = 0 ;
1138
+ Boolean success = false;
1139
+
1140
+ __CFTimeZoneLockGlobal ();
1141
+ success = __CFParseTimeZoneData (kCFAllocatorSystemDefault , data , & tzp , & cnt );
1142
+ __CFTimeZoneUnlockGlobal ();
1143
+
1144
+ if (success ) {
1145
+ ((struct __CFTimeZone * )timeZone )-> _name = (CFStringRef )CFStringCreateCopy (kCFAllocatorSystemDefault , name );
1146
+ ((struct __CFTimeZone * )timeZone )-> _data = CFDataCreateCopy (kCFAllocatorSystemDefault , data );
1147
+ ((struct __CFTimeZone * )timeZone )-> _periods = tzp ;
1148
+ ((struct __CFTimeZone * )timeZone )-> _periodCnt = cnt ;
1149
+ }
1150
+
1151
+ return success ;
1152
+ }
1153
+
1135
1154
Boolean _CFTimeZoneInit (CFTimeZoneRef timeZone , CFStringRef name , CFDataRef data ) {
1136
1155
if (!name || !__nameStringOK (name )) {
1137
1156
return false;
1138
1157
}
1139
1158
1140
1159
if (data ) {
1141
- CFTZPeriod * tzp = NULL ;
1142
- CFIndex cnt = 0 ;
1143
- __CFTimeZoneLockGlobal ();
1144
- if (__CFParseTimeZoneData (kCFAllocatorSystemDefault , data , & tzp , & cnt )) {
1145
- __CFTimeZoneUnlockGlobal ();
1146
-
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 );
1177
- }
1160
+ return _CFTimeZoneInitInternal (timeZone , name , data );
1161
+ }
1162
+
1163
+ CFIndex len = CFStringGetLength (name );
1164
+ if (6 == len || 8 == len ) {
1165
+ UniChar buffer [8 ];
1166
+ CFStringGetCharacters (name , CFRangeMake (0 , len ), buffer );
1167
+ if ('G' == buffer [0 ] && 'M' == buffer [1 ] && 'T' == buffer [2 ] && ('+' == buffer [3 ] || '-' == buffer [3 ])) {
1168
+ if (('0' <= buffer [4 ] && buffer [4 ] <= '9' ) && ('0' <= buffer [5 ] && buffer [5 ] <= '9' )) {
1169
+ int32_t hours = (buffer [4 ] - '0' ) * 10 + (buffer [5 ] - '0' );
1170
+ if (-14 <= hours && hours <= 14 ) {
1171
+ CFTimeInterval ti = hours * 3600.0 ;
1172
+ if (6 == len ) {
1173
+ return _CFTimeZoneInitWithTimeIntervalFromGMT (timeZone , ('-' == buffer [3 ] ? -1.0 : 1.0 ) * ti );
1174
+ } else {
1175
+ if (('0' <= buffer [6 ] && buffer [6 ] <= '9' ) && ('0' <= buffer [7 ] && buffer [7 ] <= '9' )) {
1176
+ int32_t minutes = (buffer [6 ] - '0' ) * 10 + (buffer [7 ] - '0' );
1177
+ if ((-14 == hours && 0 == minutes ) || (14 == hours && 0 == minutes ) || (0 <= minutes && minutes <= 59 )) {
1178
+ ti = ti + minutes * 60.0 ;
1179
+ return _CFTimeZoneInitWithTimeIntervalFromGMT (timeZone , ('-' == buffer [3 ] ? -1.0 : 1.0 ) * ti );
1178
1180
}
1179
1181
}
1180
1182
}
1181
1183
}
1182
1184
}
1183
1185
}
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 ;
1186
+ }
1187
+
1188
+ CFStringRef tzName = NULL ;
1189
+ Boolean tryAbbrev = true;
1190
+ CFURLRef baseURL , tempURL ;
1191
+ void * bytes ;
1192
+ CFIndex length ;
1193
+ Boolean result = false;
1194
+
1195
+ if (!__tzZoneInfo ) __InitTZStrings ();
1196
+ if (!__tzZoneInfo ) return NULL ;
1192
1197
#if TARGET_OS_WIN32
1193
- baseURL = CFURLCreateWithFileSystemPath (kCFAllocatorSystemDefault , __tzZoneInfo , kCFURLWindowsPathStyle , true);
1198
+ baseURL = CFURLCreateWithFileSystemPath (kCFAllocatorSystemDefault , __tzZoneInfo , kCFURLWindowsPathStyle , true);
1194
1199
#else
1195
- baseURL = CFURLCreateWithFileSystemPath (kCFAllocatorSystemDefault , __tzZoneInfo , kCFURLPOSIXPathStyle , true);
1200
+ baseURL = CFURLCreateWithFileSystemPath (kCFAllocatorSystemDefault , __tzZoneInfo , kCFURLPOSIXPathStyle , true);
1196
1201
#endif
1197
- if (tryAbbrev ) {
1198
- CFDictionaryRef abbrevs = CFTimeZoneCopyAbbreviationDictionary ();
1199
- tzName = CFDictionaryGetValue (abbrevs , name );
1200
- if (NULL != tzName ) {
1201
- tempURL = CFURLCreateCopyAppendingPathComponent (kCFAllocatorSystemDefault , baseURL , tzName , false);
1202
- if (NULL != tempURL ) {
1203
- if (_CFReadBytesFromFile (kCFAllocatorSystemDefault , tempURL , & bytes , & length , 0 , 0 )) {
1204
- data = CFDataCreateWithBytesNoCopy (kCFAllocatorSystemDefault , bytes , length , kCFAllocatorSystemDefault );
1205
- }
1206
- CFRelease (tempURL );
1207
- }
1208
- }
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;
1228
- }
1229
- }
1230
- if (NULL == data ) {
1231
- tzName = name ;
1202
+ if (tryAbbrev ) {
1203
+ CFDictionaryRef abbrevs = CFTimeZoneCopyAbbreviationDictionary ();
1204
+ tzName = CFDictionaryGetValue (abbrevs , name );
1205
+ if (NULL != tzName ) {
1232
1206
tempURL = CFURLCreateCopyAppendingPathComponent (kCFAllocatorSystemDefault , baseURL , tzName , false);
1233
1207
if (NULL != tempURL ) {
1234
1208
if (_CFReadBytesFromFile (kCFAllocatorSystemDefault , tempURL , & bytes , & length , 0 , 0 )) {
@@ -1237,13 +1211,43 @@ Boolean _CFTimeZoneInit(CFTimeZoneRef timeZone, CFStringRef name, CFDataRef data
1237
1211
CFRelease (tempURL );
1238
1212
}
1239
1213
}
1240
- CFRelease (baseURL );
1241
- if (NULL != data ) {
1242
- result = _CFTimeZoneInit (timeZone , tzName , data );
1243
- CFRelease (data );
1214
+ CFRelease (abbrevs );
1215
+ }
1216
+ if (NULL == data ) {
1217
+ CFDictionaryRef dict = __CFTimeZoneCopyCompatibilityDictionary ();
1218
+ CFStringRef mapping = CFDictionaryGetValue (dict , name );
1219
+ if (mapping ) {
1220
+ name = mapping ;
1221
+ } else if (CFStringHasPrefix (name , __tzZoneInfo )) {
1222
+ CFMutableStringRef unprefixed = CFStringCreateMutableCopy (kCFAllocatorSystemDefault , CFStringGetLength (name ), name );
1223
+ CFStringDelete (unprefixed , CFRangeMake (0 , CFStringGetLength (__tzZoneInfo )));
1224
+ mapping = CFDictionaryGetValue (dict , unprefixed );
1225
+ if (mapping ) {
1226
+ name = mapping ;
1227
+ }
1228
+ CFRelease (unprefixed );
1229
+ }
1230
+ CFRelease (dict );
1231
+ if (CFEqual (CFSTR ("" ), name )) {
1232
+ return false;
1233
+ }
1234
+ }
1235
+ if (NULL == data ) {
1236
+ tzName = name ;
1237
+ tempURL = CFURLCreateCopyAppendingPathComponent (kCFAllocatorSystemDefault , baseURL , tzName , false);
1238
+ if (NULL != tempURL ) {
1239
+ if (_CFReadBytesFromFile (kCFAllocatorSystemDefault , tempURL , & bytes , & length , 0 , 0 )) {
1240
+ data = CFDataCreateWithBytesNoCopy (kCFAllocatorSystemDefault , bytes , length , kCFAllocatorSystemDefault );
1241
+ }
1242
+ CFRelease (tempURL );
1244
1243
}
1245
- return result ;
1246
1244
}
1245
+ CFRelease (baseURL );
1246
+ if (NULL != data ) {
1247
+ result = _CFTimeZoneInitInternal (timeZone , tzName , data );
1248
+ CFRelease (data );
1249
+ }
1250
+ return result ;
1247
1251
}
1248
1252
1249
1253
CFTimeZoneRef CFTimeZoneCreate (CFAllocatorRef allocator , CFStringRef name , CFDataRef data ) {
0 commit comments