@@ -1132,103 +1132,78 @@ 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
+ CFStringRef tzName = NULL ;
1164
+ CFDataRef data = NULL ;
1165
+
1166
+ CFIndex len = CFStringGetLength (name );
1167
+ if (6 == len || 8 == len ) {
1168
+ UniChar buffer [8 ];
1169
+ CFStringGetCharacters (name , CFRangeMake (0 , len ), buffer );
1170
+ if ('G' == buffer [0 ] && 'M' == buffer [1 ] && 'T' == buffer [2 ] && ('+' == buffer [3 ] || '-' == buffer [3 ])) {
1171
+ if (('0' <= buffer [4 ] && buffer [4 ] <= '9' ) && ('0' <= buffer [5 ] && buffer [5 ] <= '9' )) {
1172
+ int32_t hours = (buffer [4 ] - '0' ) * 10 + (buffer [5 ] - '0' );
1173
+ if (-14 <= hours && hours <= 14 ) {
1174
+ CFTimeInterval ti = hours * 3600.0 ;
1175
+ if (6 == len ) {
1176
+ return _CFTimeZoneInitWithTimeIntervalFromGMT (timeZone , ('-' == buffer [3 ] ? -1.0 : 1.0 ) * ti );
1177
+ } else {
1178
+ if (('0' <= buffer [6 ] && buffer [6 ] <= '9' ) && ('0' <= buffer [7 ] && buffer [7 ] <= '9' )) {
1179
+ int32_t minutes = (buffer [6 ] - '0' ) * 10 + (buffer [7 ] - '0' );
1180
+ if ((-14 == hours && 0 == minutes ) || (14 == hours && 0 == minutes ) || (0 <= minutes && minutes <= 59 )) {
1181
+ ti = ti + minutes * 60.0 ;
1182
+ return _CFTimeZoneInitWithTimeIntervalFromGMT (timeZone , ('-' == buffer [3 ] ? -1.0 : 1.0 ) * ti );
1178
1183
}
1179
1184
}
1180
1185
}
1181
1186
}
1182
1187
}
1183
1188
}
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
+ }
1190
+ Boolean tryAbbrev = true;
1191
+ CFURLRef baseURL , tempURL ;
1192
+ void * bytes ;
1193
+ CFIndex length ;
1194
+ Boolean result = false;
1195
+
1196
+ if (!__tzZoneInfo ) __InitTZStrings ();
1197
+ if (!__tzZoneInfo ) return NULL ;
1192
1198
#if TARGET_OS_WIN32
1193
- baseURL = CFURLCreateWithFileSystemPath (kCFAllocatorSystemDefault , __tzZoneInfo , kCFURLWindowsPathStyle , true);
1199
+ baseURL = CFURLCreateWithFileSystemPath (kCFAllocatorSystemDefault , __tzZoneInfo , kCFURLWindowsPathStyle , true);
1194
1200
#else
1195
- baseURL = CFURLCreateWithFileSystemPath (kCFAllocatorSystemDefault , __tzZoneInfo , kCFURLPOSIXPathStyle , true);
1201
+ baseURL = CFURLCreateWithFileSystemPath (kCFAllocatorSystemDefault , __tzZoneInfo , kCFURLPOSIXPathStyle , true);
1196
1202
#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 ;
1203
+ if (tryAbbrev ) {
1204
+ CFDictionaryRef abbrevs = CFTimeZoneCopyAbbreviationDictionary ();
1205
+ tzName = CFDictionaryGetValue (abbrevs , name );
1206
+ if (NULL != tzName ) {
1232
1207
tempURL = CFURLCreateCopyAppendingPathComponent (kCFAllocatorSystemDefault , baseURL , tzName , false);
1233
1208
if (NULL != tempURL ) {
1234
1209
if (_CFReadBytesFromFile (kCFAllocatorSystemDefault , tempURL , & bytes , & length , 0 , 0 )) {
@@ -1237,13 +1212,43 @@ Boolean _CFTimeZoneInit(CFTimeZoneRef timeZone, CFStringRef name, CFDataRef data
1237
1212
CFRelease (tempURL );
1238
1213
}
1239
1214
}
1240
- CFRelease (baseURL );
1241
- if (NULL != data ) {
1242
- result = _CFTimeZoneInit (timeZone , tzName , data );
1243
- CFRelease (data );
1215
+ CFRelease (abbrevs );
1216
+ }
1217
+ if (NULL == data ) {
1218
+ CFDictionaryRef dict = __CFTimeZoneCopyCompatibilityDictionary ();
1219
+ CFStringRef mapping = CFDictionaryGetValue (dict , name );
1220
+ if (mapping ) {
1221
+ name = mapping ;
1222
+ } else if (CFStringHasPrefix (name , __tzZoneInfo )) {
1223
+ CFMutableStringRef unprefixed = CFStringCreateMutableCopy (kCFAllocatorSystemDefault , CFStringGetLength (name ), name );
1224
+ CFStringDelete (unprefixed , CFRangeMake (0 , CFStringGetLength (__tzZoneInfo )));
1225
+ mapping = CFDictionaryGetValue (dict , unprefixed );
1226
+ if (mapping ) {
1227
+ name = mapping ;
1228
+ }
1229
+ CFRelease (unprefixed );
1230
+ }
1231
+ CFRelease (dict );
1232
+ if (CFEqual (CFSTR ("" ), name )) {
1233
+ return false;
1234
+ }
1235
+ }
1236
+ if (NULL == data ) {
1237
+ tzName = name ;
1238
+ tempURL = CFURLCreateCopyAppendingPathComponent (kCFAllocatorSystemDefault , baseURL , tzName , false);
1239
+ if (NULL != tempURL ) {
1240
+ if (_CFReadBytesFromFile (kCFAllocatorSystemDefault , tempURL , & bytes , & length , 0 , 0 )) {
1241
+ data = CFDataCreateWithBytesNoCopy (kCFAllocatorSystemDefault , bytes , length , kCFAllocatorSystemDefault );
1242
+ }
1243
+ CFRelease (tempURL );
1244
1244
}
1245
- return result ;
1246
1245
}
1246
+ CFRelease (baseURL );
1247
+ if (NULL != data ) {
1248
+ result = _CFTimeZoneInitInternal (timeZone , tzName , data );
1249
+ CFRelease (data );
1250
+ }
1251
+ return result ;
1247
1252
}
1248
1253
1249
1254
CFTimeZoneRef CFTimeZoneCreate (CFAllocatorRef allocator , CFStringRef name , CFDataRef data ) {
0 commit comments