diff --git a/Sources/CoreFoundation/CFTimeZone.c b/Sources/CoreFoundation/CFTimeZone.c index e959bdc264..29f59b3bbe 100644 --- a/Sources/CoreFoundation/CFTimeZone.c +++ b/Sources/CoreFoundation/CFTimeZone.c @@ -39,7 +39,7 @@ #if TARGET_OS_WIN32 #include -#include "WindowsResources.h" +#include "CFTimeZone_WindowsMapping.h" #define NOMINMAX #define WIN32_LEAN_AND_MEAN #include "Windows.h" @@ -92,11 +92,6 @@ static CFArrayRef __CFKnownTimeZoneList = NULL; static CFMutableDictionaryRef __CFTimeZoneCache = NULL; static CFLock_t __CFTimeZoneGlobalLock = CFLockInit; -#if TARGET_OS_WIN32 -static CFDictionaryRef __CFTimeZoneWinToOlsonDict = NULL; -static CFLock_t __CFTimeZoneWinToOlsonLock = CFLockInit; -#endif - CF_INLINE void __CFTimeZoneLockGlobal(void) { __CFLock(&__CFTimeZoneGlobalLock); } @@ -672,110 +667,7 @@ CFTypeID CFTimeZoneGetTypeID(void) { return _kCFRuntimeIDCFTimeZone; } -#if TARGET_OS_WIN32 -CF_INLINE void __CFTimeZoneLockWinToOlson(void) { - __CFLock(&__CFTimeZoneWinToOlsonLock); -} - -CF_INLINE void __CFTimeZoneUnlockWinToOlson(void) { - __CFUnlock(&__CFTimeZoneWinToOlsonLock); -} - -static Boolean CFTimeZoneLoadPlistResource(LPCSTR lpName, LPVOID *ppResource, LPDWORD pdwSize) { - HRSRC hResource; - HGLOBAL hMemory; - HMODULE hModule; - - if (!GetModuleHandleExW(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, - (LPCWSTR)&CFTimeZoneLoadPlistResource, &hModule)) { - return FALSE; - } - - hResource = FindResourceA(hModule, lpName, "PLIST"); - if (hResource == NULL) { - return FALSE; - } - - hMemory = LoadResource(hModule, hResource); - if (hMemory == NULL) { - return FALSE; - } - - *pdwSize = SizeofResource(hModule, hResource); - *ppResource = LockResource(hMemory); - - return *pdwSize && *ppResource; -} - -CFDictionaryRef CFTimeZoneCopyWinToOlsonDictionary(void) { - CFDictionaryRef dict; - - __CFTimeZoneLockWinToOlson(); - if (NULL == __CFTimeZoneWinToOlsonDict) { - const uint8_t *plist; - DWORD dwSize; - - if (CFTimeZoneLoadPlistResource(MAKEINTRESOURCEA(IDR_WINDOWS_OLSON_MAPPING), (LPVOID *)&plist, &dwSize)) { - CFDataRef data = CFDataCreate(kCFAllocatorSystemDefault, plist, dwSize); - __CFTimeZoneWinToOlsonDict = (CFDictionaryRef)CFPropertyListCreateFromXMLData(kCFAllocatorSystemDefault, data, kCFPropertyListImmutable, NULL); - CFRelease(data); - } - } - if (NULL == __CFTimeZoneWinToOlsonDict) { - __CFTimeZoneWinToOlsonDict = CFDictionaryCreate(kCFAllocatorSystemDefault, NULL, NULL, 0, NULL, NULL); - } - dict = __CFTimeZoneWinToOlsonDict ? (CFDictionaryRef)CFRetain(__CFTimeZoneWinToOlsonDict) : NULL; - __CFTimeZoneUnlockWinToOlson(); - - return dict; -} - -static CFDictionaryRef CFTimeZoneCopyOlsonToWindowsDictionary(void) { - static CFDictionaryRef dict; - static CFLock_t lock; - - __CFLock(&lock); - if (dict == NULL) { - const uint8_t *plist; - DWORD dwSize; - - if (CFTimeZoneLoadPlistResource(MAKEINTRESOURCEA(IDR_OLSON_WINDOWS_MAPPING), (LPVOID *)&plist, &dwSize)) { - CFDataRef data = CFDataCreateWithBytesNoCopy(kCFAllocatorSystemDefault, plist, dwSize, kCFAllocatorNull); - dict = CFPropertyListCreateFromXMLData(kCFAllocatorSystemDefault, data, kCFPropertyListImmutable, NULL); - CFRelease(data); - } - } - __CFUnlock(&lock); - - return dict ? CFRetain(dict) : NULL; -} - -void CFTimeZoneSetWinToOlsonDictionary(CFDictionaryRef dict) { - __CFGenericValidateType(dict, CFDictionaryGetTypeID()); - __CFTimeZoneLockWinToOlson(); - if (dict != __CFTimeZoneWinToOlsonDict) { - CFDictionaryRef oldDict = __CFTimeZoneWinToOlsonDict; - __CFTimeZoneWinToOlsonDict = dict ? CFRetain(dict) : NULL; - CFRelease(oldDict); - } - __CFTimeZoneUnlockWinToOlson(); -} - -CFTimeZoneRef CFTimeZoneCreateWithWindowsName(CFAllocatorRef allocator, CFStringRef winName) { - if (!winName) return NULL; - - CFDictionaryRef winToOlson = CFTimeZoneCopyWinToOlsonDictionary(); - if (!winToOlson) return NULL; - - CFStringRef olsonName = CFDictionaryGetValue(winToOlson, winName); - CFTimeZoneRef retval = NULL; - if (olsonName) { - retval = CFTimeZoneCreateWithName(allocator, olsonName, false); - } - CFRelease(winToOlson); - return retval; -} -#elif TARGET_OS_MAC +#if TARGET_OS_MAC static void __InitTZStrings(void) { static dispatch_once_t initOnce = 0; @@ -810,7 +702,7 @@ static void __InitTZStrings(void) { }); } -#elif TARGET_OS_ANDROID +#elif TARGET_OS_ANDROID || TARGET_OS_WINDOWS // Nothing #elif TARGET_OS_LINUX || TARGET_OS_BSD || TARGET_OS_WASI static void __InitTZStrings(void) { @@ -834,12 +726,7 @@ static CFTimeZoneRef __CFTimeZoneCreateSystem(void) { LPWSTR standardName = (LPWSTR)&tzi.StandardName; CFStringRef cfStandardName = CFStringCreateWithBytes(kCFAllocatorSystemDefault, (UInt8 *)standardName, wcslen(standardName)*sizeof(WCHAR), kCFStringEncodingUTF16LE, false); if (cfStandardName) { - CFDictionaryRef winToOlson = CFTimeZoneCopyWinToOlsonDictionary(); - if (winToOlson) { - name = CFDictionaryGetValue(winToOlson, cfStandardName); - if (name) CFRetain(name); - CFRelease(winToOlson); - } + name = _CFTimeZoneCopyOlsonNameForWindowsName(cfStandardName); CFRelease(cfStandardName); } } else { @@ -1326,9 +1213,9 @@ Boolean _CFTimeZoneInit(CFTimeZoneRef timeZone, CFStringRef name, CFDataRef data tzName = CFDictionaryGetValue(abbrevs, name); if (tzName == NULL) { - CFDictionaryRef olson = CFTimeZoneCopyOlsonToWindowsDictionary(); - tzName = CFDictionaryGetValue(olson, name); - CFRelease(olson); + tzName = _CFTimeZoneCopyWindowsNameForOlsonName(name); + } else { + CFRetain(tzName); } CFRelease(abbrevs); @@ -1336,6 +1223,7 @@ Boolean _CFTimeZoneInit(CFTimeZoneRef timeZone, CFStringRef name, CFDataRef data if (tzName) { __CFTimeZoneGetOffset(tzName, &offset); // TODO: handle DST + CFRelease(tzName); return __CFTimeZoneInitFixed(timeZone, offset, name, 0); } @@ -1542,15 +1430,16 @@ CFTimeZoneRef CFTimeZoneCreateWithName(CFAllocatorRef allocator, CFStringRef nam tzName = CFDictionaryGetValue(abbrevs, name); if (tzName == NULL) { - CFDictionaryRef olson = CFTimeZoneCopyOlsonToWindowsDictionary(); - tzName = CFDictionaryGetValue(olson, name); - CFRelease(olson); + tzName = _CFTimeZoneCopyWindowsNameForOlsonName(name); + } else { + tzName = CFRetain(tzName); } CFRelease(abbrevs); if (tzName) { __CFTimeZoneGetOffset(tzName, &offset); + CFRelease(tzName); // TODO: handle DST result = __CFTimeZoneCreateFixed(allocator, offset, name, 0); } diff --git a/Sources/CoreFoundation/CFTimeZone_WindowsMapping.c b/Sources/CoreFoundation/CFTimeZone_WindowsMapping.c new file mode 100644 index 0000000000..8661097328 --- /dev/null +++ b/Sources/CoreFoundation/CFTimeZone_WindowsMapping.c @@ -0,0 +1,552 @@ +// This source file is part of the Swift.org open source project +// +// Copyright (c) 2024 Apple Inc. and the Swift project authors +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See http://swift.org/LICENSE.txt for license information +// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors +// + +#include "CFTimeZone_WindowsMapping.h" + +#if TARGET_OS_WINDOWS + +typedef struct { + char *source; + char *dest; +} __CFTimeZoneIdentifierPair; + +static __CFTimeZoneIdentifierPair __CFWindowsOlsonMapping[] = { + { "Dateline Standard Time", "Etc/GMT+12" }, + { "UTC-11", "Etc/GMT+11" }, + { "Aleutian Standard Time", "America/Adak" }, + { "Hawaiian Standard Time", "Pacific/Honolulu" }, + { "Marquesas Standard Time", "Pacific/Marquesas" }, + { "Alaskan Standard Time", "America/Anchorage" }, + { "UTC-09", "Etc/GMT+9" }, + { "Pacific Standard Time (Mexico)", "America/Tijuana" }, + { "UTC-08", "Etc/GMT+8" }, + { "Pacific Standard Time", "America/Los_Angeles" }, + { "US Mountain Standard Time", "America/Phoenix" }, + { "Mountain Standard Time (Mexico)", "America/Chihuahua" }, + { "Mountain Standard Time", "America/Denver" }, + { "Central America Standard Time", "America/Guatemala" }, + { "Central Standard Time", "America/Chicago" }, + { "Easter Island Standard Time", "Pacific/Easter" }, + { "Central Standard Time (Mexico)", "America/Mexico_City" }, + { "Canada Central Standard Time", "America/Regina" }, + { "SA Pacific Standard Time", "America/Bogota" }, + { "Eastern Standard Time (Mexico)", "America/Cancun" }, + { "Eastern Standard Time", "America/New_York" }, + { "Haiti Standard Time", "America/Port-au-Prince" }, + { "Cuba Standard Time", "America/Havana" }, + { "US Eastern Standard Time", "America/Indianapolis" }, + { "Paraguay Standard Time", "America/Asuncion" }, + { "Atlantic Standard Time", "America/Halifax" }, + { "Venezuela Standard Time", "America/Caracas" }, + { "Central Brazilian Standard Time", "America/Cuiaba" }, + { "SA Western Standard Time", "America/La_Paz" }, + { "Pacific SA Standard Time", "America/Santiago" }, + { "Turks And Caicos Standard Time", "America/Grand_Turk" }, + { "Newfoundland Standard Time", "America/St_Johns" }, + { "Tocantins Standard Time", "America/Araguaina" }, + { "E. South America Standard Time", "America/Sao_Paulo" }, + { "SA Eastern Standard Time", "America/Cayenne" }, + { "Argentina Standard Time", "America/Buenos_Aires" }, + { "Greenland Standard Time", "America/Godthab" }, + { "Montevideo Standard Time", "America/Montevideo" }, + { "Magallanes Standard Time", "America/Punta_Arenas" }, + { "Saint Pierre Standard Time", "America/Miquelon" }, + { "Bahia Standard Time", "America/Bahia" }, + { "UTC-02", "Etc/GMT+2" }, + { "Azores Standard Time", "Atlantic/Azores" }, + { "Cape Verde Standard Time", "Atlantic/Cape_Verde" }, + { "UTC", "Etc/GMT" }, + { "GMT Standard Time", "Europe/London" }, + { "Greenwich Standard Time", "Atlantic/Reykjavik" }, + { "W. Europe Standard Time", "Europe/Berlin" }, + { "Central Europe Standard Time", "Europe/Budapest" }, + { "Romance Standard Time", "Europe/Paris" }, + { "Morocco Standard Time", "Africa/Casablanca" }, + { "Sao Tome Standard Time", "Africa/Sao_Tome" }, + { "Central European Standard Time", "Europe/Warsaw" }, + { "W. Central Africa Standard Time", "Africa/Lagos" }, + { "Jordan Standard Time", "Asia/Amman" }, + { "GTB Standard Time", "Europe/Bucharest" }, + { "Middle East Standard Time", "Asia/Beirut" }, + { "Egypt Standard Time", "Africa/Cairo" }, + { "E. Europe Standard Time", "Europe/Chisinau" }, + { "Syria Standard Time", "Asia/Damascus" }, + { "West Bank Standard Time", "Asia/Hebron" }, + { "South Africa Standard Time", "Africa/Johannesburg" }, + { "FLE Standard Time", "Europe/Kiev" }, + { "Israel Standard Time", "Asia/Jerusalem" }, + { "Kaliningrad Standard Time", "Europe/Kaliningrad" }, + { "Sudan Standard Time", "Africa/Khartoum" }, + { "Libya Standard Time", "Africa/Tripoli" }, + { "Namibia Standard Time", "Africa/Windhoek" }, + { "Arabic Standard Time", "Asia/Baghdad" }, + { "Turkey Standard Time", "Europe/Istanbul" }, + { "Arab Standard Time", "Asia/Riyadh" }, + { "Belarus Standard Time", "Europe/Minsk" }, + { "Russian Standard Time", "Europe/Moscow" }, + { "E. Africa Standard Time", "Africa/Nairobi" }, + { "Iran Standard Time", "Asia/Tehran" }, + { "Arabian Standard Time", "Asia/Dubai" }, + { "Astrakhan Standard Time", "Europe/Astrakhan" }, + { "Azerbaijan Standard Time", "Asia/Baku" }, + { "Russia Time Zone 3", "Europe/Samara" }, + { "Mauritius Standard Time", "Indian/Mauritius" }, + { "Saratov Standard Time", "Europe/Saratov" }, + { "Georgian Standard Time", "Asia/Tbilisi" }, + { "Caucasus Standard Time", "Asia/Yerevan" }, + { "Afghanistan Standard Time", "Asia/Kabul" }, + { "West Asia Standard Time", "Asia/Tashkent" }, + { "Ekaterinburg Standard Time", "Asia/Yekaterinburg" }, + { "Pakistan Standard Time", "Asia/Karachi" }, + { "India Standard Time", "Asia/Calcutta" }, + { "Sri Lanka Standard Time", "Asia/Colombo" }, + { "Nepal Standard Time", "Asia/Katmandu" }, + { "Central Asia Standard Time", "Asia/Almaty" }, + { "Bangladesh Standard Time", "Asia/Dhaka" }, + { "Omsk Standard Time", "Asia/Omsk" }, + { "Myanmar Standard Time", "Asia/Rangoon" }, + { "SE Asia Standard Time", "Asia/Bangkok" }, + { "Altai Standard Time", "Asia/Barnaul" }, + { "W. Mongolia Standard Time", "Asia/Hovd" }, + { "North Asia Standard Time", "Asia/Krasnoyarsk" }, + { "N. Central Asia Standard Time", "Asia/Novosibirsk" }, + { "Tomsk Standard Time", "Asia/Tomsk" }, + { "China Standard Time", "Asia/Shanghai" }, + { "North Asia East Standard Time", "Asia/Irkutsk" }, + { "Singapore Standard Time", "Asia/Singapore" }, + { "W. Australia Standard Time", "Australia/Perth" }, + { "Taipei Standard Time", "Asia/Taipei" }, + { "Ulaanbaatar Standard Time", "Asia/Ulaanbaatar" }, + { "Aus Central W. Standard Time", "Australia/Eucla" }, + { "Transbaikal Standard Time", "Asia/Chita" }, + { "Tokyo Standard Time", "Asia/Tokyo" }, + { "North Korea Standard Time", "Asia/Pyongyang" }, + { "Korea Standard Time", "Asia/Seoul" }, + { "Yakutsk Standard Time", "Asia/Yakutsk" }, + { "Cen. Australia Standard Time", "Australia/Adelaide" }, + { "AUS Central Standard Time", "Australia/Darwin" }, + { "E. Australia Standard Time", "Australia/Brisbane" }, + { "AUS Eastern Standard Time", "Australia/Sydney" }, + { "West Pacific Standard Time", "Pacific/Port_Moresby" }, + { "Tasmania Standard Time", "Australia/Hobart" }, + { "Vladivostok Standard Time", "Asia/Vladivostok" }, + { "Lord Howe Standard Time", "Australia/Lord_Howe" }, + { "Bougainville Standard Time", "Pacific/Bougainville" }, + { "Russia Time Zone 10", "Asia/Srednekolymsk" }, + { "Magadan Standard Time", "Asia/Magadan" }, + { "Norfolk Standard Time", "Pacific/Norfolk" }, + { "Sakhalin Standard Time", "Asia/Sakhalin" }, + { "Central Pacific Standard Time", "Pacific/Guadalcanal" }, + { "Russia Time Zone 11", "Asia/Kamchatka" }, + { "New Zealand Standard Time", "Pacific/Auckland" }, + { "UTC+12", "Etc/GMT-12" }, + { "Fiji Standard Time", "Pacific/Fiji" }, + { "Chatham Islands Standard Time", "Pacific/Chatham" }, + { "UTC+13", "Etc/GMT-13" }, + { "Tonga Standard Time", "Pacific/Tongatapu" }, + { "Samoa Standard Time", "Pacific/Apia" }, + { "Line Islands Standard Time", "Pacific/Kiritimati" }, + { 0, 0 } +}; + +static __CFTimeZoneIdentifierPair __CFOlsonWindowsMapping[] = { + { "Etc/GMT+12", "Dateline Standard Time" }, + { "Pacific/Pago_Pago", "UTC-11" }, + { "Pacific/Niue", "UTC-11" }, + { "Pacific/Midway", "UTC-11" }, + { "Etc/GMT+11", "UTC-11" }, + { "America/Adak", "Aleutian Standard Time" }, + { "Pacific/Rarotonga", "Hawaiian Standard Time" }, + { "Pacific/Tahiti", "Hawaiian Standard Time" }, + { "Pacific/Johnston", "Hawaiian Standard Time" }, + { "Pacific/Honolulu", "Hawaiian Standard Time" }, + { "Etc/GMT+10", "Hawaiian Standard Time" }, + { "Pacific/Marquesas", "Marquesas Standard Time" }, + { "America/Anchorage", "Alaskan Standard Time" }, + { "Pacific/Gambier", "UTC-09" }, + { "Etc/GMT+9", "UTC-09" }, + { "America/Tijuana", "Pacific Standard Time (Mexico)" }, + { "Pacific/Pitcairn", "UTC-08" }, + { "Etc/GMT+8", "UTC-08" }, + { "America/Vancouver", "Pacific Standard Time" }, + { "America/Los_Angeles", "Pacific Standard Time" }, + { "PST8PDT", "Pacific Standard Time" }, + { "America/Dawson_Creek", "US Mountain Standard Time" }, + { "America/Hermosillo", "US Mountain Standard Time" }, + { "America/Phoenix", "US Mountain Standard Time" }, + { "Etc/GMT+7", "US Mountain Standard Time" }, + { "America/Chihuahua", "Mountain Standard Time (Mexico)" }, + { "America/Edmonton", "Mountain Standard Time" }, + { "America/Ojinaga", "Mountain Standard Time" }, + { "America/Denver", "Mountain Standard Time" }, + { "MST7MDT", "Mountain Standard Time" }, + { "America/Belize", "Central America Standard Time" }, + { "America/Costa_Rica", "Central America Standard Time" }, + { "Pacific/Galapagos", "Central America Standard Time" }, + { "America/Guatemala", "Central America Standard Time" }, + { "America/Tegucigalpa", "Central America Standard Time" }, + { "America/Managua", "Central America Standard Time" }, + { "America/El_Salvador", "Central America Standard Time" }, + { "Etc/GMT+6", "Central America Standard Time" }, + { "America/Winnipeg", "Central Standard Time" }, + { "America/Matamoros", "Central Standard Time" }, + { "America/Chicago", "Central Standard Time" }, + { "CST6CDT", "Central Standard Time" }, + { "Pacific/Easter", "Easter Island Standard Time" }, + { "America/Mexico_City", "Central Standard Time (Mexico)" }, + { "America/Regina", "Canada Central Standard Time" }, + { "America/Rio_Branco", "SA Pacific Standard Time" }, + { "America/Coral_Harbour", "SA Pacific Standard Time" }, + { "America/Bogota", "SA Pacific Standard Time" }, + { "America/Guayaquil", "SA Pacific Standard Time" }, + { "America/Jamaica", "SA Pacific Standard Time" }, + { "America/Cayman", "SA Pacific Standard Time" }, + { "America/Panama", "SA Pacific Standard Time" }, + { "America/Lima", "SA Pacific Standard Time" }, + { "Etc/GMT+5", "SA Pacific Standard Time" }, + { "America/Cancun", "Eastern Standard Time (Mexico)" }, + { "America/Nassau", "Eastern Standard Time" }, + { "America/Toronto", "Eastern Standard Time" }, + { "America/New_York", "Eastern Standard Time" }, + { "EST5EDT", "Eastern Standard Time" }, + { "America/Port-au-Prince", "Haiti Standard Time" }, + { "America/Havana", "Cuba Standard Time" }, + { "America/Indianapolis", "US Eastern Standard Time" }, + { "America/Asuncion", "Paraguay Standard Time" }, + { "Atlantic/Bermuda", "Atlantic Standard Time" }, + { "America/Halifax", "Atlantic Standard Time" }, + { "America/Thule", "Atlantic Standard Time" }, + { "America/Caracas", "Venezuela Standard Time" }, + { "America/Cuiaba", "Central Brazilian Standard Time" }, + { "America/Antigua", "SA Western Standard Time" }, + { "America/Anguilla", "SA Western Standard Time" }, + { "America/Aruba", "SA Western Standard Time" }, + { "America/Barbados", "SA Western Standard Time" }, + { "America/St_Barthelemy", "SA Western Standard Time" }, + { "America/La_Paz", "SA Western Standard Time" }, + { "America/Kralendijk", "SA Western Standard Time" }, + { "America/Manaus", "SA Western Standard Time" }, + { "America/Blanc-Sablon", "SA Western Standard Time" }, + { "America/Curacao", "SA Western Standard Time" }, + { "America/Dominica", "SA Western Standard Time" }, + { "America/Santo_Domingo", "SA Western Standard Time" }, + { "America/Grenada", "SA Western Standard Time" }, + { "America/Guadeloupe", "SA Western Standard Time" }, + { "America/Guyana", "SA Western Standard Time" }, + { "America/St_Kitts", "SA Western Standard Time" }, + { "America/St_Lucia", "SA Western Standard Time" }, + { "America/Marigot", "SA Western Standard Time" }, + { "America/Martinique", "SA Western Standard Time" }, + { "America/Montserrat", "SA Western Standard Time" }, + { "America/Puerto_Rico", "SA Western Standard Time" }, + { "America/Lower_Princes", "SA Western Standard Time" }, + { "America/Port_of_Spain", "SA Western Standard Time" }, + { "America/St_Vincent", "SA Western Standard Time" }, + { "America/Tortola", "SA Western Standard Time" }, + { "America/St_Thomas", "SA Western Standard Time" }, + { "Etc/GMT+4", "SA Western Standard Time" }, + { "America/Santiago", "Pacific SA Standard Time" }, + { "America/Grand_Turk", "Turks And Caicos Standard Time" }, + { "America/St_Johns", "Newfoundland Standard Time" }, + { "America/Araguaina", "Tocantins Standard Time" }, + { "America/Sao_Paulo", "E. South America Standard Time" }, + { "Antarctica/Rothera", "SA Eastern Standard Time" }, + { "America/Fortaleza", "SA Eastern Standard Time" }, + { "Atlantic/Stanley", "SA Eastern Standard Time" }, + { "America/Cayenne", "SA Eastern Standard Time" }, + { "America/Paramaribo", "SA Eastern Standard Time" }, + { "Etc/GMT+3", "SA Eastern Standard Time" }, + { "America/Buenos_Aires", "Argentina Standard Time" }, + { "America/Godthab", "Greenland Standard Time" }, + { "America/Montevideo", "Montevideo Standard Time" }, + { "Antarctica/Palmer", "Magallanes Standard Time" }, + { "America/Punta_Arenas", "Magallanes Standard Time" }, + { "America/Miquelon", "Saint Pierre Standard Time" }, + { "America/Bahia", "Bahia Standard Time" }, + { "America/Noronha", "UTC-02" }, + { "Atlantic/South_Georgia", "UTC-02" }, + { "Etc/GMT+2", "UTC-02" }, + { "America/Scoresbysund", "Azores Standard Time" }, + { "Atlantic/Azores", "Azores Standard Time" }, + { "Atlantic/Cape_Verde", "Cape Verde Standard Time" }, + { "Etc/GMT+1", "Cape Verde Standard Time" }, + { "America/Danmarkshavn", "UTC" }, + { "Etc/GMT", "UTC" }, + { "Atlantic/Canary", "GMT Standard Time" }, + { "Atlantic/Faeroe", "GMT Standard Time" }, + { "Europe/London", "GMT Standard Time" }, + { "Europe/Guernsey", "GMT Standard Time" }, + { "Europe/Dublin", "GMT Standard Time" }, + { "Europe/Isle_of_Man", "GMT Standard Time" }, + { "Europe/Jersey", "GMT Standard Time" }, + { "Europe/Lisbon", "GMT Standard Time" }, + { "Africa/Ouagadougou", "Greenwich Standard Time" }, + { "Africa/Abidjan", "Greenwich Standard Time" }, + { "Africa/Accra", "Greenwich Standard Time" }, + { "Africa/Banjul", "Greenwich Standard Time" }, + { "Africa/Conakry", "Greenwich Standard Time" }, + { "Africa/Bissau", "Greenwich Standard Time" }, + { "Atlantic/Reykjavik", "Greenwich Standard Time" }, + { "Africa/Monrovia", "Greenwich Standard Time" }, + { "Africa/Bamako", "Greenwich Standard Time" }, + { "Africa/Nouakchott", "Greenwich Standard Time" }, + { "Atlantic/St_Helena", "Greenwich Standard Time" }, + { "Africa/Freetown", "Greenwich Standard Time" }, + { "Africa/Dakar", "Greenwich Standard Time" }, + { "Africa/Lome", "Greenwich Standard Time" }, + { "Europe/Andorra", "W. Europe Standard Time" }, + { "Europe/Vienna", "W. Europe Standard Time" }, + { "Europe/Zurich", "W. Europe Standard Time" }, + { "Europe/Berlin", "W. Europe Standard Time" }, + { "Europe/Gibraltar", "W. Europe Standard Time" }, + { "Europe/Rome", "W. Europe Standard Time" }, + { "Europe/Vaduz", "W. Europe Standard Time" }, + { "Europe/Luxembourg", "W. Europe Standard Time" }, + { "Europe/Monaco", "W. Europe Standard Time" }, + { "Europe/Malta", "W. Europe Standard Time" }, + { "Europe/Amsterdam", "W. Europe Standard Time" }, + { "Europe/Oslo", "W. Europe Standard Time" }, + { "Europe/Stockholm", "W. Europe Standard Time" }, + { "Arctic/Longyearbyen", "W. Europe Standard Time" }, + { "Europe/San_Marino", "W. Europe Standard Time" }, + { "Europe/Vatican", "W. Europe Standard Time" }, + { "Europe/Tirane", "Central Europe Standard Time" }, + { "Europe/Prague", "Central Europe Standard Time" }, + { "Europe/Budapest", "Central Europe Standard Time" }, + { "Europe/Podgorica", "Central Europe Standard Time" }, + { "Europe/Belgrade", "Central Europe Standard Time" }, + { "Europe/Ljubljana", "Central Europe Standard Time" }, + { "Europe/Bratislava", "Central Europe Standard Time" }, + { "Europe/Brussels", "Romance Standard Time" }, + { "Europe/Copenhagen", "Romance Standard Time" }, + { "Europe/Madrid", "Romance Standard Time" }, + { "Europe/Paris", "Romance Standard Time" }, + { "Africa/El_Aaiun", "Morocco Standard Time" }, + { "Africa/Casablanca", "Morocco Standard Time" }, + { "Africa/Sao_Tome", "Sao Tome Standard Time" }, + { "Europe/Sarajevo", "Central European Standard Time" }, + { "Europe/Zagreb", "Central European Standard Time" }, + { "Europe/Skopje", "Central European Standard Time" }, + { "Europe/Warsaw", "Central European Standard Time" }, + { "Africa/Luanda", "W. Central Africa Standard Time" }, + { "Africa/Porto-Novo", "W. Central Africa Standard Time" }, + { "Africa/Kinshasa", "W. Central Africa Standard Time" }, + { "Africa/Bangui", "W. Central Africa Standard Time" }, + { "Africa/Brazzaville", "W. Central Africa Standard Time" }, + { "Africa/Douala", "W. Central Africa Standard Time" }, + { "Africa/Algiers", "W. Central Africa Standard Time" }, + { "Africa/Libreville", "W. Central Africa Standard Time" }, + { "Africa/Malabo", "W. Central Africa Standard Time" }, + { "Africa/Niamey", "W. Central Africa Standard Time" }, + { "Africa/Lagos", "W. Central Africa Standard Time" }, + { "Africa/Ndjamena", "W. Central Africa Standard Time" }, + { "Africa/Tunis", "W. Central Africa Standard Time" }, + { "Etc/GMT-1", "W. Central Africa Standard Time" }, + { "Asia/Amman", "Jordan Standard Time" }, + { "Asia/Famagusta", "GTB Standard Time" }, + { "Europe/Athens", "GTB Standard Time" }, + { "Europe/Bucharest", "GTB Standard Time" }, + { "Asia/Beirut", "Middle East Standard Time" }, + { "Africa/Cairo", "Egypt Standard Time" }, + { "Europe/Chisinau", "E. Europe Standard Time" }, + { "Asia/Damascus", "Syria Standard Time" }, + { "Asia/Hebron", "West Bank Standard Time" }, + { "Africa/Bujumbura", "South Africa Standard Time" }, + { "Africa/Gaborone", "South Africa Standard Time" }, + { "Africa/Lubumbashi", "South Africa Standard Time" }, + { "Africa/Maseru", "South Africa Standard Time" }, + { "Africa/Blantyre", "South Africa Standard Time" }, + { "Africa/Maputo", "South Africa Standard Time" }, + { "Africa/Kigali", "South Africa Standard Time" }, + { "Africa/Mbabane", "South Africa Standard Time" }, + { "Africa/Johannesburg", "South Africa Standard Time" }, + { "Africa/Lusaka", "South Africa Standard Time" }, + { "Africa/Harare", "South Africa Standard Time" }, + { "Etc/GMT-2", "South Africa Standard Time" }, + { "Europe/Mariehamn", "FLE Standard Time" }, + { "Europe/Sofia", "FLE Standard Time" }, + { "Europe/Tallinn", "FLE Standard Time" }, + { "Europe/Helsinki", "FLE Standard Time" }, + { "Europe/Vilnius", "FLE Standard Time" }, + { "Europe/Riga", "FLE Standard Time" }, + { "Europe/Kiev", "FLE Standard Time" }, + { "Asia/Jerusalem", "Israel Standard Time" }, + { "Europe/Kaliningrad", "Kaliningrad Standard Time" }, + { "Africa/Khartoum", "Sudan Standard Time" }, + { "Africa/Tripoli", "Libya Standard Time" }, + { "Africa/Windhoek", "Namibia Standard Time" }, + { "Asia/Baghdad", "Arabic Standard Time" }, + { "Europe/Istanbul", "Turkey Standard Time" }, + { "Asia/Bahrain", "Arab Standard Time" }, + { "Asia/Kuwait", "Arab Standard Time" }, + { "Asia/Qatar", "Arab Standard Time" }, + { "Asia/Riyadh", "Arab Standard Time" }, + { "Asia/Aden", "Arab Standard Time" }, + { "Europe/Minsk", "Belarus Standard Time" }, + { "Europe/Moscow", "Russian Standard Time" }, + { "Europe/Simferopol", "Russian Standard Time" }, + { "Antarctica/Syowa", "E. Africa Standard Time" }, + { "Africa/Djibouti", "E. Africa Standard Time" }, + { "Africa/Asmera", "E. Africa Standard Time" }, + { "Africa/Addis_Ababa", "E. Africa Standard Time" }, + { "Africa/Nairobi", "E. Africa Standard Time" }, + { "Indian/Comoro", "E. Africa Standard Time" }, + { "Indian/Antananarivo", "E. Africa Standard Time" }, + { "Africa/Mogadishu", "E. Africa Standard Time" }, + { "Africa/Juba", "E. Africa Standard Time" }, + { "Africa/Dar_es_Salaam", "E. Africa Standard Time" }, + { "Africa/Kampala", "E. Africa Standard Time" }, + { "Indian/Mayotte", "E. Africa Standard Time" }, + { "Etc/GMT-3", "E. Africa Standard Time" }, + { "Asia/Tehran", "Iran Standard Time" }, + { "Asia/Dubai", "Arabian Standard Time" }, + { "Asia/Muscat", "Arabian Standard Time" }, + { "Etc/GMT-4", "Arabian Standard Time" }, + { "Europe/Astrakhan", "Astrakhan Standard Time" }, + { "Asia/Baku", "Azerbaijan Standard Time" }, + { "Europe/Samara", "Russia Time Zone 3" }, + { "Indian/Mauritius", "Mauritius Standard Time" }, + { "Indian/Reunion", "Mauritius Standard Time" }, + { "Indian/Mahe", "Mauritius Standard Time" }, + { "Europe/Saratov", "Saratov Standard Time" }, + { "Asia/Tbilisi", "Georgian Standard Time" }, + { "Asia/Yerevan", "Caucasus Standard Time" }, + { "Asia/Kabul", "Afghanistan Standard Time" }, + { "Antarctica/Mawson", "West Asia Standard Time" }, + { "Asia/Oral", "West Asia Standard Time" }, + { "Indian/Maldives", "West Asia Standard Time" }, + { "Indian/Kerguelen", "West Asia Standard Time" }, + { "Asia/Dushanbe", "West Asia Standard Time" }, + { "Asia/Ashgabat", "West Asia Standard Time" }, + { "Asia/Tashkent", "West Asia Standard Time" }, + { "Etc/GMT-5", "West Asia Standard Time" }, + { "Asia/Yekaterinburg", "Ekaterinburg Standard Time" }, + { "Asia/Karachi", "Pakistan Standard Time" }, + { "Asia/Calcutta", "India Standard Time" }, + { "Asia/Colombo", "Sri Lanka Standard Time" }, + { "Asia/Katmandu", "Nepal Standard Time" }, + { "Antarctica/Vostok", "Central Asia Standard Time" }, + { "Asia/Urumqi", "Central Asia Standard Time" }, + { "Indian/Chagos", "Central Asia Standard Time" }, + { "Asia/Bishkek", "Central Asia Standard Time" }, + { "Asia/Almaty", "Central Asia Standard Time" }, + { "Etc/GMT-6", "Central Asia Standard Time" }, + { "Asia/Dhaka", "Bangladesh Standard Time" }, + { "Asia/Thimphu", "Bangladesh Standard Time" }, + { "Asia/Omsk", "Omsk Standard Time" }, + { "Indian/Cocos", "Myanmar Standard Time" }, + { "Asia/Rangoon", "Myanmar Standard Time" }, + { "Antarctica/Davis", "SE Asia Standard Time" }, + { "Indian/Christmas", "SE Asia Standard Time" }, + { "Asia/Jakarta", "SE Asia Standard Time" }, + { "Asia/Phnom_Penh", "SE Asia Standard Time" }, + { "Asia/Vientiane", "SE Asia Standard Time" }, + { "Asia/Bangkok", "SE Asia Standard Time" }, + { "Asia/Saigon", "SE Asia Standard Time" }, + { "Etc/GMT-7", "SE Asia Standard Time" }, + { "Asia/Barnaul", "Altai Standard Time" }, + { "Asia/Hovd", "W. Mongolia Standard Time" }, + { "Asia/Krasnoyarsk", "North Asia Standard Time" }, + { "Asia/Novosibirsk", "N. Central Asia Standard Time" }, + { "Asia/Tomsk", "Tomsk Standard Time" }, + { "Asia/Shanghai", "China Standard Time" }, + { "Asia/Hong_Kong", "China Standard Time" }, + { "Asia/Macau", "China Standard Time" }, + { "Asia/Irkutsk", "North Asia East Standard Time" }, + { "Asia/Brunei", "Singapore Standard Time" }, + { "Asia/Makassar", "Singapore Standard Time" }, + { "Asia/Kuala_Lumpur", "Singapore Standard Time" }, + { "Asia/Manila", "Singapore Standard Time" }, + { "Asia/Singapore", "Singapore Standard Time" }, + { "Etc/GMT-8", "Singapore Standard Time" }, + { "Antarctica/Casey", "W. Australia Standard Time" }, + { "Australia/Perth", "W. Australia Standard Time" }, + { "Asia/Taipei", "Taipei Standard Time" }, + { "Asia/Ulaanbaatar", "Ulaanbaatar Standard Time" }, + { "Australia/Eucla", "Aus Central W. Standard Time" }, + { "Asia/Chita", "Transbaikal Standard Time" }, + { "Asia/Jayapura", "Tokyo Standard Time" }, + { "Asia/Tokyo", "Tokyo Standard Time" }, + { "Pacific/Palau", "Tokyo Standard Time" }, + { "Asia/Dili", "Tokyo Standard Time" }, + { "Etc/GMT-9", "Tokyo Standard Time" }, + { "Asia/Pyongyang", "North Korea Standard Time" }, + { "Asia/Seoul", "Korea Standard Time" }, + { "Asia/Yakutsk", "Yakutsk Standard Time" }, + { "Australia/Adelaide", "Cen. Australia Standard Time" }, + { "Australia/Darwin", "AUS Central Standard Time" }, + { "Australia/Brisbane", "E. Australia Standard Time" }, + { "Australia/Sydney", "AUS Eastern Standard Time" }, + { "Antarctica/DumontDUrville", "West Pacific Standard Time" }, + { "Pacific/Truk", "West Pacific Standard Time" }, + { "Pacific/Guam", "West Pacific Standard Time" }, + { "Pacific/Saipan", "West Pacific Standard Time" }, + { "Pacific/Port_Moresby", "West Pacific Standard Time" }, + { "Etc/GMT-10", "West Pacific Standard Time" }, + { "Australia/Hobart", "Tasmania Standard Time" }, + { "Asia/Vladivostok", "Vladivostok Standard Time" }, + { "Australia/Lord_Howe", "Lord Howe Standard Time" }, + { "Pacific/Bougainville", "Bougainville Standard Time" }, + { "Asia/Srednekolymsk", "Russia Time Zone 10" }, + { "Asia/Magadan", "Magadan Standard Time" }, + { "Pacific/Norfolk", "Norfolk Standard Time" }, + { "Asia/Sakhalin", "Sakhalin Standard Time" }, + { "Antarctica/Macquarie", "Central Pacific Standard Time" }, + { "Pacific/Ponape", "Central Pacific Standard Time" }, + { "Pacific/Noumea", "Central Pacific Standard Time" }, + { "Pacific/Guadalcanal", "Central Pacific Standard Time" }, + { "Pacific/Efate", "Central Pacific Standard Time" }, + { "Etc/GMT-11", "Central Pacific Standard Time" }, + { "Asia/Kamchatka", "Russia Time Zone 11" }, + { "Antarctica/McMurdo", "New Zealand Standard Time" }, + { "Pacific/Auckland", "New Zealand Standard Time" }, + { "Pacific/Tarawa", "UTC+12" }, + { "Pacific/Majuro", "UTC+12" }, + { "Pacific/Nauru", "UTC+12" }, + { "Pacific/Funafuti", "UTC+12" }, + { "Pacific/Wake", "UTC+12" }, + { "Pacific/Wallis", "UTC+12" }, + { "Etc/GMT-12", "UTC+12" }, + { "Pacific/Fiji", "Fiji Standard Time" }, + { "Pacific/Chatham", "Chatham Islands Standard Time" }, + { "Pacific/Enderbury", "UTC+13" }, + { "Pacific/Fakaofo", "UTC+13" }, + { "Etc/GMT-13", "UTC+13" }, + { "Pacific/Tongatapu", "Tonga Standard Time" }, + { "Pacific/Apia", "Samoa Standard Time" }, + { "Pacific/Kiritimati", "Line Islands Standard Time" }, + { "Etc/GMT-14", "Line Islands Standard Time" }, + { "US/Pacific", "Pacific Standard Time" }, + { 0, 0 } +}; + +static CFStringRef _CFTimeZoneIdentifierPairCopyValue(__CFTimeZoneIdentifierPair *data, CFStringRef key) { + char buffer[128] = {0}; + if (!CFStringGetCString(key, buffer, 128, kCFStringEncodingASCII)) { + return NULL; + } + __CFTimeZoneIdentifierPair *current = data; + while (current->source) { + if (strcmp(current->source, buffer) == 0) { + return CFStringCreateWithCString(kCFAllocatorDefault, current->dest, kCFStringEncodingASCII); + } + current++; + } + return NULL; +} + +CFStringRef _CFTimeZoneCopyWindowsNameForOlsonName(CFStringRef olson) { + return _CFTimeZoneIdentifierPairCopyValue(__CFOlsonWindowsMapping, olson); +} + +CFStringRef _CFTimeZoneCopyOlsonNameForWindowsName(CFStringRef windows) { + return _CFTimeZoneIdentifierPairCopyValue(__CFWindowsOlsonMapping, windows); +} + +#endif diff --git a/Sources/CoreFoundation/CMakeLists.txt b/Sources/CoreFoundation/CMakeLists.txt index 71e7c2f00d..7ae617b497 100644 --- a/Sources/CoreFoundation/CMakeLists.txt +++ b/Sources/CoreFoundation/CMakeLists.txt @@ -85,6 +85,7 @@ add_library(CoreFoundation STATIC CFStringUtilities.c CFSystemDirectories.c CFTimeZone.c + CFTimeZone_WindowsMapping.c CFTree.c CFUniChar.c CFUnicodeDecomposition.c diff --git a/Sources/CoreFoundation/CoreFoundation.rc b/Sources/CoreFoundation/CoreFoundation.rc deleted file mode 100644 index 5419bacca5..0000000000 --- a/Sources/CoreFoundation/CoreFoundation.rc +++ /dev/null @@ -1,6 +0,0 @@ - -#include "WindowsResources.h" - -IDR_WINDOWS_OLSON_MAPPING PLIST "WindowsOlsonMapping.plist" -IDR_OLSON_WINDOWS_MAPPING PLIST "OlsonWindowsMapping.plist" - diff --git a/Sources/CoreFoundation/OlsonWindowsMapping.plist b/Sources/CoreFoundation/OlsonWindowsMapping.plist deleted file mode 100644 index db12239a40..0000000000 --- a/Sources/CoreFoundation/OlsonWindowsMapping.plist +++ /dev/null @@ -1,740 +0,0 @@ - - - - - Etc/GMT+12 - Dateline Standard Time - Pacific/Pago_Pago - UTC-11 - Pacific/Niue - UTC-11 - Pacific/Midway - UTC-11 - Etc/GMT+11 - UTC-11 - America/Adak - Aleutian Standard Time - Pacific/Rarotonga - Hawaiian Standard Time - Pacific/Tahiti - Hawaiian Standard Time - Pacific/Johnston - Hawaiian Standard Time - Pacific/Honolulu - Hawaiian Standard Time - Etc/GMT+10 - Hawaiian Standard Time - Pacific/Marquesas - Marquesas Standard Time - America/Anchorage - Alaskan Standard Time - Pacific/Gambier - UTC-09 - Etc/GMT+9 - UTC-09 - America/Tijuana - Pacific Standard Time (Mexico) - Pacific/Pitcairn - UTC-08 - Etc/GMT+8 - UTC-08 - America/Vancouver - Pacific Standard Time - America/Los_Angeles - Pacific Standard Time - PST8PDT - Pacific Standard Time - America/Dawson_Creek - US Mountain Standard Time - America/Hermosillo - US Mountain Standard Time - America/Phoenix - US Mountain Standard Time - Etc/GMT+7 - US Mountain Standard Time - America/Chihuahua - Mountain Standard Time (Mexico) - America/Edmonton - Mountain Standard Time - America/Ojinaga - Mountain Standard Time - America/Denver - Mountain Standard Time - MST7MDT - Mountain Standard Time - America/Belize - Central America Standard Time - America/Costa_Rica - Central America Standard Time - Pacific/Galapagos - Central America Standard Time - America/Guatemala - Central America Standard Time - America/Tegucigalpa - Central America Standard Time - America/Managua - Central America Standard Time - America/El_Salvador - Central America Standard Time - Etc/GMT+6 - Central America Standard Time - America/Winnipeg - Central Standard Time - America/Matamoros - Central Standard Time - America/Chicago - Central Standard Time - CST6CDT - Central Standard Time - Pacific/Easter - Easter Island Standard Time - America/Mexico_City - Central Standard Time (Mexico) - America/Regina - Canada Central Standard Time - America/Rio_Branco - SA Pacific Standard Time - America/Coral_Harbour - SA Pacific Standard Time - America/Bogota - SA Pacific Standard Time - America/Guayaquil - SA Pacific Standard Time - America/Jamaica - SA Pacific Standard Time - America/Cayman - SA Pacific Standard Time - America/Panama - SA Pacific Standard Time - America/Lima - SA Pacific Standard Time - Etc/GMT+5 - SA Pacific Standard Time - America/Cancun - Eastern Standard Time (Mexico) - America/Nassau - Eastern Standard Time - America/Toronto - Eastern Standard Time - America/New_York - Eastern Standard Time - EST5EDT - Eastern Standard Time - America/Port-au-Prince - Haiti Standard Time - America/Havana - Cuba Standard Time - America/Indianapolis - US Eastern Standard Time - America/Asuncion - Paraguay Standard Time - Atlantic/Bermuda - Atlantic Standard Time - America/Halifax - Atlantic Standard Time - America/Thule - Atlantic Standard Time - America/Caracas - Venezuela Standard Time - America/Cuiaba - Central Brazilian Standard Time - America/Antigua - SA Western Standard Time - America/Anguilla - SA Western Standard Time - America/Aruba - SA Western Standard Time - America/Barbados - SA Western Standard Time - America/St_Barthelemy - SA Western Standard Time - America/La_Paz - SA Western Standard Time - America/Kralendijk - SA Western Standard Time - America/Manaus - SA Western Standard Time - America/Blanc-Sablon - SA Western Standard Time - America/Curacao - SA Western Standard Time - America/Dominica - SA Western Standard Time - America/Santo_Domingo - SA Western Standard Time - America/Grenada - SA Western Standard Time - America/Guadeloupe - SA Western Standard Time - America/Guyana - SA Western Standard Time - America/St_Kitts - SA Western Standard Time - America/St_Lucia - SA Western Standard Time - America/Marigot - SA Western Standard Time - America/Martinique - SA Western Standard Time - America/Montserrat - SA Western Standard Time - America/Puerto_Rico - SA Western Standard Time - America/Lower_Princes - SA Western Standard Time - America/Port_of_Spain - SA Western Standard Time - America/St_Vincent - SA Western Standard Time - America/Tortola - SA Western Standard Time - America/St_Thomas - SA Western Standard Time - Etc/GMT+4 - SA Western Standard Time - America/Santiago - Pacific SA Standard Time - America/Grand_Turk - Turks And Caicos Standard Time - America/St_Johns - Newfoundland Standard Time - America/Araguaina - Tocantins Standard Time - America/Sao_Paulo - E. South America Standard Time - Antarctica/Rothera - SA Eastern Standard Time - America/Fortaleza - SA Eastern Standard Time - Atlantic/Stanley - SA Eastern Standard Time - America/Cayenne - SA Eastern Standard Time - America/Paramaribo - SA Eastern Standard Time - Etc/GMT+3 - SA Eastern Standard Time - America/Buenos_Aires - Argentina Standard Time - America/Godthab - Greenland Standard Time - America/Montevideo - Montevideo Standard Time - Antarctica/Palmer - Magallanes Standard Time - America/Punta_Arenas - Magallanes Standard Time - America/Miquelon - Saint Pierre Standard Time - America/Bahia - Bahia Standard Time - America/Noronha - UTC-02 - Atlantic/South_Georgia - UTC-02 - Etc/GMT+2 - UTC-02 - America/Scoresbysund - Azores Standard Time - Atlantic/Azores - Azores Standard Time - Atlantic/Cape_Verde - Cape Verde Standard Time - Etc/GMT+1 - Cape Verde Standard Time - America/Danmarkshavn - UTC - Etc/GMT - UTC - Atlantic/Canary - GMT Standard Time - Atlantic/Faeroe - GMT Standard Time - Europe/London - GMT Standard Time - Europe/Guernsey - GMT Standard Time - Europe/Dublin - GMT Standard Time - Europe/Isle_of_Man - GMT Standard Time - Europe/Jersey - GMT Standard Time - Europe/Lisbon - GMT Standard Time - Africa/Ouagadougou - Greenwich Standard Time - Africa/Abidjan - Greenwich Standard Time - Africa/Accra - Greenwich Standard Time - Africa/Banjul - Greenwich Standard Time - Africa/Conakry - Greenwich Standard Time - Africa/Bissau - Greenwich Standard Time - Atlantic/Reykjavik - Greenwich Standard Time - Africa/Monrovia - Greenwich Standard Time - Africa/Bamako - Greenwich Standard Time - Africa/Nouakchott - Greenwich Standard Time - Atlantic/St_Helena - Greenwich Standard Time - Africa/Freetown - Greenwich Standard Time - Africa/Dakar - Greenwich Standard Time - Africa/Lome - Greenwich Standard Time - Europe/Andorra - W. Europe Standard Time - Europe/Vienna - W. Europe Standard Time - Europe/Zurich - W. Europe Standard Time - Europe/Berlin - W. Europe Standard Time - Europe/Gibraltar - W. Europe Standard Time - Europe/Rome - W. Europe Standard Time - Europe/Vaduz - W. Europe Standard Time - Europe/Luxembourg - W. Europe Standard Time - Europe/Monaco - W. Europe Standard Time - Europe/Malta - W. Europe Standard Time - Europe/Amsterdam - W. Europe Standard Time - Europe/Oslo - W. Europe Standard Time - Europe/Stockholm - W. Europe Standard Time - Arctic/Longyearbyen - W. Europe Standard Time - Europe/San_Marino - W. Europe Standard Time - Europe/Vatican - W. Europe Standard Time - Europe/Tirane - Central Europe Standard Time - Europe/Prague - Central Europe Standard Time - Europe/Budapest - Central Europe Standard Time - Europe/Podgorica - Central Europe Standard Time - Europe/Belgrade - Central Europe Standard Time - Europe/Ljubljana - Central Europe Standard Time - Europe/Bratislava - Central Europe Standard Time - Europe/Brussels - Romance Standard Time - Europe/Copenhagen - Romance Standard Time - Europe/Madrid - Romance Standard Time - Europe/Paris - Romance Standard Time - Africa/El_Aaiun - Morocco Standard Time - Africa/Casablanca - Morocco Standard Time - Africa/Sao_Tome - Sao Tome Standard Time - Europe/Sarajevo - Central European Standard Time - Europe/Zagreb - Central European Standard Time - Europe/Skopje - Central European Standard Time - Europe/Warsaw - Central European Standard Time - Africa/Luanda - W. Central Africa Standard Time - Africa/Porto-Novo - W. Central Africa Standard Time - Africa/Kinshasa - W. Central Africa Standard Time - Africa/Bangui - W. Central Africa Standard Time - Africa/Brazzaville - W. Central Africa Standard Time - Africa/Douala - W. Central Africa Standard Time - Africa/Algiers - W. Central Africa Standard Time - Africa/Libreville - W. Central Africa Standard Time - Africa/Malabo - W. Central Africa Standard Time - Africa/Niamey - W. Central Africa Standard Time - Africa/Lagos - W. Central Africa Standard Time - Africa/Ndjamena - W. Central Africa Standard Time - Africa/Tunis - W. Central Africa Standard Time - Etc/GMT-1 - W. Central Africa Standard Time - Asia/Amman - Jordan Standard Time - Asia/Famagusta - GTB Standard Time - Europe/Athens - GTB Standard Time - Europe/Bucharest - GTB Standard Time - Asia/Beirut - Middle East Standard Time - Africa/Cairo - Egypt Standard Time - Europe/Chisinau - E. Europe Standard Time - Asia/Damascus - Syria Standard Time - Asia/Hebron - West Bank Standard Time - Africa/Bujumbura - South Africa Standard Time - Africa/Gaborone - South Africa Standard Time - Africa/Lubumbashi - South Africa Standard Time - Africa/Maseru - South Africa Standard Time - Africa/Blantyre - South Africa Standard Time - Africa/Maputo - South Africa Standard Time - Africa/Kigali - South Africa Standard Time - Africa/Mbabane - South Africa Standard Time - Africa/Johannesburg - South Africa Standard Time - Africa/Lusaka - South Africa Standard Time - Africa/Harare - South Africa Standard Time - Etc/GMT-2 - South Africa Standard Time - Europe/Mariehamn - FLE Standard Time - Europe/Sofia - FLE Standard Time - Europe/Tallinn - FLE Standard Time - Europe/Helsinki - FLE Standard Time - Europe/Vilnius - FLE Standard Time - Europe/Riga - FLE Standard Time - Europe/Kiev - FLE Standard Time - Asia/Jerusalem - Israel Standard Time - Europe/Kaliningrad - Kaliningrad Standard Time - Africa/Khartoum - Sudan Standard Time - Africa/Tripoli - Libya Standard Time - Africa/Windhoek - Namibia Standard Time - Asia/Baghdad - Arabic Standard Time - Europe/Istanbul - Turkey Standard Time - Asia/Bahrain - Arab Standard Time - Asia/Kuwait - Arab Standard Time - Asia/Qatar - Arab Standard Time - Asia/Riyadh - Arab Standard Time - Asia/Aden - Arab Standard Time - Europe/Minsk - Belarus Standard Time - Europe/Moscow - Russian Standard Time - Europe/Simferopol - Russian Standard Time - Antarctica/Syowa - E. Africa Standard Time - Africa/Djibouti - E. Africa Standard Time - Africa/Asmera - E. Africa Standard Time - Africa/Addis_Ababa - E. Africa Standard Time - Africa/Nairobi - E. Africa Standard Time - Indian/Comoro - E. Africa Standard Time - Indian/Antananarivo - E. Africa Standard Time - Africa/Mogadishu - E. Africa Standard Time - Africa/Juba - E. Africa Standard Time - Africa/Dar_es_Salaam - E. Africa Standard Time - Africa/Kampala - E. Africa Standard Time - Indian/Mayotte - E. Africa Standard Time - Etc/GMT-3 - E. Africa Standard Time - Asia/Tehran - Iran Standard Time - Asia/Dubai - Arabian Standard Time - Asia/Muscat - Arabian Standard Time - Etc/GMT-4 - Arabian Standard Time - Europe/Astrakhan - Astrakhan Standard Time - Asia/Baku - Azerbaijan Standard Time - Europe/Samara - Russia Time Zone 3 - Indian/Mauritius - Mauritius Standard Time - Indian/Reunion - Mauritius Standard Time - Indian/Mahe - Mauritius Standard Time - Europe/Saratov - Saratov Standard Time - Asia/Tbilisi - Georgian Standard Time - Asia/Yerevan - Caucasus Standard Time - Asia/Kabul - Afghanistan Standard Time - Antarctica/Mawson - West Asia Standard Time - Asia/Oral - West Asia Standard Time - Indian/Maldives - West Asia Standard Time - Indian/Kerguelen - West Asia Standard Time - Asia/Dushanbe - West Asia Standard Time - Asia/Ashgabat - West Asia Standard Time - Asia/Tashkent - West Asia Standard Time - Etc/GMT-5 - West Asia Standard Time - Asia/Yekaterinburg - Ekaterinburg Standard Time - Asia/Karachi - Pakistan Standard Time - Asia/Calcutta - India Standard Time - Asia/Colombo - Sri Lanka Standard Time - Asia/Katmandu - Nepal Standard Time - Antarctica/Vostok - Central Asia Standard Time - Asia/Urumqi - Central Asia Standard Time - Indian/Chagos - Central Asia Standard Time - Asia/Bishkek - Central Asia Standard Time - Asia/Almaty - Central Asia Standard Time - Etc/GMT-6 - Central Asia Standard Time - Asia/Dhaka - Bangladesh Standard Time - Asia/Thimphu - Bangladesh Standard Time - Asia/Omsk - Omsk Standard Time - Indian/Cocos - Myanmar Standard Time - Asia/Rangoon - Myanmar Standard Time - Antarctica/Davis - SE Asia Standard Time - Indian/Christmas - SE Asia Standard Time - Asia/Jakarta - SE Asia Standard Time - Asia/Phnom_Penh - SE Asia Standard Time - Asia/Vientiane - SE Asia Standard Time - Asia/Bangkok - SE Asia Standard Time - Asia/Saigon - SE Asia Standard Time - Etc/GMT-7 - SE Asia Standard Time - Asia/Barnaul - Altai Standard Time - Asia/Hovd - W. Mongolia Standard Time - Asia/Krasnoyarsk - North Asia Standard Time - Asia/Novosibirsk - N. Central Asia Standard Time - Asia/Tomsk - Tomsk Standard Time - Asia/Shanghai - China Standard Time - Asia/Hong_Kong - China Standard Time - Asia/Macau - China Standard Time - Asia/Irkutsk - North Asia East Standard Time - Asia/Brunei - Singapore Standard Time - Asia/Makassar - Singapore Standard Time - Asia/Kuala_Lumpur - Singapore Standard Time - Asia/Manila - Singapore Standard Time - Asia/Singapore - Singapore Standard Time - Etc/GMT-8 - Singapore Standard Time - Antarctica/Casey - W. Australia Standard Time - Australia/Perth - W. Australia Standard Time - Asia/Taipei - Taipei Standard Time - Asia/Ulaanbaatar - Ulaanbaatar Standard Time - Australia/Eucla - Aus Central W. Standard Time - Asia/Chita - Transbaikal Standard Time - Asia/Jayapura - Tokyo Standard Time - Asia/Tokyo - Tokyo Standard Time - Pacific/Palau - Tokyo Standard Time - Asia/Dili - Tokyo Standard Time - Etc/GMT-9 - Tokyo Standard Time - Asia/Pyongyang - North Korea Standard Time - Asia/Seoul - Korea Standard Time - Asia/Yakutsk - Yakutsk Standard Time - Australia/Adelaide - Cen. Australia Standard Time - Australia/Darwin - AUS Central Standard Time - Australia/Brisbane - E. Australia Standard Time - Australia/Sydney - AUS Eastern Standard Time - Antarctica/DumontDUrville - West Pacific Standard Time - Pacific/Truk - West Pacific Standard Time - Pacific/Guam - West Pacific Standard Time - Pacific/Saipan - West Pacific Standard Time - Pacific/Port_Moresby - West Pacific Standard Time - Etc/GMT-10 - West Pacific Standard Time - Australia/Hobart - Tasmania Standard Time - Asia/Vladivostok - Vladivostok Standard Time - Australia/Lord_Howe - Lord Howe Standard Time - Pacific/Bougainville - Bougainville Standard Time - Asia/Srednekolymsk - Russia Time Zone 10 - Asia/Magadan - Magadan Standard Time - Pacific/Norfolk - Norfolk Standard Time - Asia/Sakhalin - Sakhalin Standard Time - Antarctica/Macquarie - Central Pacific Standard Time - Pacific/Ponape - Central Pacific Standard Time - Pacific/Noumea - Central Pacific Standard Time - Pacific/Guadalcanal - Central Pacific Standard Time - Pacific/Efate - Central Pacific Standard Time - Etc/GMT-11 - Central Pacific Standard Time - Asia/Kamchatka - Russia Time Zone 11 - Antarctica/McMurdo - New Zealand Standard Time - Pacific/Auckland - New Zealand Standard Time - Pacific/Tarawa - UTC+12 - Pacific/Majuro - UTC+12 - Pacific/Nauru - UTC+12 - Pacific/Funafuti - UTC+12 - Pacific/Wake - UTC+12 - Pacific/Wallis - UTC+12 - Etc/GMT-12 - UTC+12 - Pacific/Fiji - Fiji Standard Time - Pacific/Chatham - Chatham Islands Standard Time - Pacific/Enderbury - UTC+13 - Pacific/Fakaofo - UTC+13 - Etc/GMT-13 - UTC+13 - Pacific/Tongatapu - Tonga Standard Time - Pacific/Apia - Samoa Standard Time - Pacific/Kiritimati - Line Islands Standard Time - Etc/GMT-14 - Line Islands Standard Time - US/Pacific - Pacific Standard Time - - diff --git a/Sources/CoreFoundation/WindowsOlsonMapping.plist b/Sources/CoreFoundation/WindowsOlsonMapping.plist deleted file mode 100644 index 7af48262de..0000000000 --- a/Sources/CoreFoundation/WindowsOlsonMapping.plist +++ /dev/null @@ -1,276 +0,0 @@ - - - - - Dateline Standard Time - Etc/GMT+12 - UTC-11 - Etc/GMT+11 - Aleutian Standard Time - America/Adak - Hawaiian Standard Time - Pacific/Honolulu - Marquesas Standard Time - Pacific/Marquesas - Alaskan Standard Time - America/Anchorage - UTC-09 - Etc/GMT+9 - Pacific Standard Time (Mexico) - America/Tijuana - UTC-08 - Etc/GMT+8 - Pacific Standard Time - America/Los_Angeles - US Mountain Standard Time - America/Phoenix - Mountain Standard Time (Mexico) - America/Chihuahua - Mountain Standard Time - America/Denver - Central America Standard Time - America/Guatemala - Central Standard Time - America/Chicago - Easter Island Standard Time - Pacific/Easter - Central Standard Time (Mexico) - America/Mexico_City - Canada Central Standard Time - America/Regina - SA Pacific Standard Time - America/Bogota - Eastern Standard Time (Mexico) - America/Cancun - Eastern Standard Time - America/New_York - Haiti Standard Time - America/Port-au-Prince - Cuba Standard Time - America/Havana - US Eastern Standard Time - America/Indianapolis - Paraguay Standard Time - America/Asuncion - Atlantic Standard Time - America/Halifax - Venezuela Standard Time - America/Caracas - Central Brazilian Standard Time - America/Cuiaba - SA Western Standard Time - America/La_Paz - Pacific SA Standard Time - America/Santiago - Turks And Caicos Standard Time - America/Grand_Turk - Newfoundland Standard Time - America/St_Johns - Tocantins Standard Time - America/Araguaina - E. South America Standard Time - America/Sao_Paulo - SA Eastern Standard Time - America/Cayenne - Argentina Standard Time - America/Buenos_Aires - Greenland Standard Time - America/Godthab - Montevideo Standard Time - America/Montevideo - Magallanes Standard Time - America/Punta_Arenas - Saint Pierre Standard Time - America/Miquelon - Bahia Standard Time - America/Bahia - UTC-02 - Etc/GMT+2 - Azores Standard Time - Atlantic/Azores - Cape Verde Standard Time - Atlantic/Cape_Verde - UTC - Etc/GMT - GMT Standard Time - Europe/London - Greenwich Standard Time - Atlantic/Reykjavik - W. Europe Standard Time - Europe/Berlin - Central Europe Standard Time - Europe/Budapest - Romance Standard Time - Europe/Paris - Morocco Standard Time - Africa/Casablanca - Sao Tome Standard Time - Africa/Sao_Tome - Central European Standard Time - Europe/Warsaw - W. Central Africa Standard Time - Africa/Lagos - Jordan Standard Time - Asia/Amman - GTB Standard Time - Europe/Bucharest - Middle East Standard Time - Asia/Beirut - Egypt Standard Time - Africa/Cairo - E. Europe Standard Time - Europe/Chisinau - Syria Standard Time - Asia/Damascus - West Bank Standard Time - Asia/Hebron - South Africa Standard Time - Africa/Johannesburg - FLE Standard Time - Europe/Kiev - Israel Standard Time - Asia/Jerusalem - Kaliningrad Standard Time - Europe/Kaliningrad - Sudan Standard Time - Africa/Khartoum - Libya Standard Time - Africa/Tripoli - Namibia Standard Time - Africa/Windhoek - Arabic Standard Time - Asia/Baghdad - Turkey Standard Time - Europe/Istanbul - Arab Standard Time - Asia/Riyadh - Belarus Standard Time - Europe/Minsk - Russian Standard Time - Europe/Moscow - E. Africa Standard Time - Africa/Nairobi - Iran Standard Time - Asia/Tehran - Arabian Standard Time - Asia/Dubai - Astrakhan Standard Time - Europe/Astrakhan - Azerbaijan Standard Time - Asia/Baku - Russia Time Zone 3 - Europe/Samara - Mauritius Standard Time - Indian/Mauritius - Saratov Standard Time - Europe/Saratov - Georgian Standard Time - Asia/Tbilisi - Caucasus Standard Time - Asia/Yerevan - Afghanistan Standard Time - Asia/Kabul - West Asia Standard Time - Asia/Tashkent - Ekaterinburg Standard Time - Asia/Yekaterinburg - Pakistan Standard Time - Asia/Karachi - India Standard Time - Asia/Calcutta - Sri Lanka Standard Time - Asia/Colombo - Nepal Standard Time - Asia/Katmandu - Central Asia Standard Time - Asia/Almaty - Bangladesh Standard Time - Asia/Dhaka - Omsk Standard Time - Asia/Omsk - Myanmar Standard Time - Asia/Rangoon - SE Asia Standard Time - Asia/Bangkok - Altai Standard Time - Asia/Barnaul - W. Mongolia Standard Time - Asia/Hovd - North Asia Standard Time - Asia/Krasnoyarsk - N. Central Asia Standard Time - Asia/Novosibirsk - Tomsk Standard Time - Asia/Tomsk - China Standard Time - Asia/Shanghai - North Asia East Standard Time - Asia/Irkutsk - Singapore Standard Time - Asia/Singapore - W. Australia Standard Time - Australia/Perth - Taipei Standard Time - Asia/Taipei - Ulaanbaatar Standard Time - Asia/Ulaanbaatar - Aus Central W. Standard Time - Australia/Eucla - Transbaikal Standard Time - Asia/Chita - Tokyo Standard Time - Asia/Tokyo - North Korea Standard Time - Asia/Pyongyang - Korea Standard Time - Asia/Seoul - Yakutsk Standard Time - Asia/Yakutsk - Cen. Australia Standard Time - Australia/Adelaide - AUS Central Standard Time - Australia/Darwin - E. Australia Standard Time - Australia/Brisbane - AUS Eastern Standard Time - Australia/Sydney - West Pacific Standard Time - Pacific/Port_Moresby - Tasmania Standard Time - Australia/Hobart - Vladivostok Standard Time - Asia/Vladivostok - Lord Howe Standard Time - Australia/Lord_Howe - Bougainville Standard Time - Pacific/Bougainville - Russia Time Zone 10 - Asia/Srednekolymsk - Magadan Standard Time - Asia/Magadan - Norfolk Standard Time - Pacific/Norfolk - Sakhalin Standard Time - Asia/Sakhalin - Central Pacific Standard Time - Pacific/Guadalcanal - Russia Time Zone 11 - Asia/Kamchatka - New Zealand Standard Time - Pacific/Auckland - UTC+12 - Etc/GMT-12 - Fiji Standard Time - Pacific/Fiji - Chatham Islands Standard Time - Pacific/Chatham - UTC+13 - Etc/GMT-13 - Tonga Standard Time - Pacific/Tongatapu - Samoa Standard Time - Pacific/Apia - Line Islands Standard Time - Pacific/Kiritimati - - diff --git a/Sources/CoreFoundation/include/WindowsResources.h b/Sources/CoreFoundation/include/WindowsResources.h deleted file mode 100644 index f1bd285a97..0000000000 --- a/Sources/CoreFoundation/include/WindowsResources.h +++ /dev/null @@ -1,4 +0,0 @@ - -#define IDR_WINDOWS_OLSON_MAPPING 101 -#define IDR_OLSON_WINDOWS_MAPPING 102 - diff --git a/Sources/CoreFoundation/internalInclude/CFTimeZone_WindowsMapping.h b/Sources/CoreFoundation/internalInclude/CFTimeZone_WindowsMapping.h new file mode 100644 index 0000000000..e504f3a9c9 --- /dev/null +++ b/Sources/CoreFoundation/internalInclude/CFTimeZone_WindowsMapping.h @@ -0,0 +1,18 @@ +// This source file is part of the Swift.org open source project +// +// Copyright (c) 2024 Apple Inc. and the Swift project authors +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See http://swift.org/LICENSE.txt for license information +// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors +// + +#include "CFBase.h" +#include "CFString.h" + +#if TARGET_OS_WINDOWS + +CF_PRIVATE CFStringRef _CFTimeZoneCopyWindowsNameForOlsonName(CFStringRef olson); +CF_PRIVATE CFStringRef _CFTimeZoneCopyOlsonNameForWindowsName(CFStringRef windows); + +#endif