[winpr,timezone] update from tzextract

* Update existing data
* Add new file TimeZoneNameMap.json
* Add CMake install target for TimeZoneNameMap.json
This commit is contained in:
Armin Novak 2024-07-19 12:04:01 +02:00 committed by akallabeth
parent f8405d5a4a
commit 6133ee6da0
No known key found for this signature in database
GPG Key ID: A49454A3FC909FD5
4 changed files with 1043 additions and 65 deletions

View File

@ -26,6 +26,8 @@ if (WITH_TIMEZONE_FROM_FILE)
set(WINPR_RESOURCE_ROOT ${CMAKE_INSTALL_FULL_DATAROOTDIR}/WinPR)
winpr_definition_add(-DWINPR_RESOURCE_ROOT="${WINPR_RESOURCE_ROOT}")
winpr_definition_add(-DWITH_TIMEZONE_FROM_FILE)
install(FILES TimeZoneNameMap.json DESTINATION ${WINPR_RESOURCE_ROOT})
endif()
set(SRCS

View File

@ -286,7 +286,7 @@ const TimeZoneNameMapEntry TimeZoneNameMap[] = {
{ "Samoa Standard Time", "Samoa Standard Time", "(UTC+13:00) Samoa", "Samoa Daylight Time",
"Pacific/Apia" },
{ "Line Islands Standard Time", "Line Islands Standard Time", "(UTC+14:00) Kiritimati Island",
"Line Islands Daylight Time", "Pacific/Kiritimati" },
"Line Islands Daylight Time", "Pacific/Kiritimati" }
};
const size_t TimeZoneNameMapSize = ARRAYSIZE(TimeZoneNameMap);

View File

@ -0,0 +1,991 @@
{
"TimeZoneNameMap": [
{
"Id": "Dateline Standard Time",
"StandardName": "Dateline Standard Time",
"DisplayName": "(UTC-12:00) International Date Line West",
"DaylightName": "Dateline Daylight Time",
"Iana": "Etc/GMT+12"
},
{
"Id": "UTC-11",
"StandardName": "UTC-11",
"DisplayName": "(UTC-11:00) Coordinated Universal Time-11",
"DaylightName": "UTC-11",
"Iana": "Etc/GMT+11"
},
{
"Id": "Aleutian Standard Time",
"StandardName": "Aleutian Standard Time",
"DisplayName": "(UTC-10:00) Aleutian Islands",
"DaylightName": "Aleutian Daylight Time",
"Iana": "America/Adak"
},
{
"Id": "Hawaiian Standard Time",
"StandardName": "Hawaiian Standard Time",
"DisplayName": "(UTC-10:00) Hawaii",
"DaylightName": "Hawaiian Daylight Time",
"Iana": "Pacific/Honolulu"
},
{
"Id": "Marquesas Standard Time",
"StandardName": "Marquesas Standard Time",
"DisplayName": "(UTC-09:30) Marquesas Islands",
"DaylightName": "Marquesas Daylight Time",
"Iana": "Pacific/Marquesas"
},
{
"Id": "Alaskan Standard Time",
"StandardName": "Alaskan Standard Time",
"DisplayName": "(UTC-09:00) Alaska",
"DaylightName": "Alaskan Daylight Time",
"Iana": "America/Anchorage"
},
{
"Id": "UTC-09",
"StandardName": "UTC-09",
"DisplayName": "(UTC-09:00) Coordinated Universal Time-09",
"DaylightName": "UTC-09",
"Iana": "Etc/GMT+9"
},
{
"Id": "Pacific Standard Time (Mexico)",
"StandardName": "Pacific Standard Time (Mexico)",
"DisplayName": "(UTC-08:00) Baja California",
"DaylightName": "Pacific Daylight Time (Mexico)",
"Iana": "America/Tijuana"
},
{
"Id": "UTC-08",
"StandardName": "UTC-08",
"DisplayName": "(UTC-08:00) Coordinated Universal Time-08",
"DaylightName": "UTC-08",
"Iana": "Etc/GMT+8"
},
{
"Id": "Pacific Standard Time",
"StandardName": "Pacific Standard Time",
"DisplayName": "(UTC-08:00) Pacific Time (US & Canada)",
"DaylightName": "Pacific Daylight Time",
"Iana": "America/Los_Angeles"
},
{
"Id": "US Mountain Standard Time",
"StandardName": "US Mountain Standard Time",
"DisplayName": "(UTC-07:00) Arizona",
"DaylightName": "US Mountain Daylight Time",
"Iana": "America/Phoenix"
},
{
"Id": "Mountain Standard Time (Mexico)",
"StandardName": "Mountain Standard Time (Mexico)",
"DisplayName": "(UTC-07:00) La Paz, Mazatlan",
"DaylightName": "Mountain Daylight Time (Mexico)",
"Iana": "America/Chihuahua"
},
{
"Id": "Mountain Standard Time",
"StandardName": "Mountain Standard Time",
"DisplayName": "(UTC-07:00) Mountain Time (US & Canada)",
"DaylightName": "Mountain Daylight Time",
"Iana": "America/Denver"
},
{
"Id": "Yukon Standard Time",
"StandardName": "Yukon Standard Time",
"DisplayName": "(UTC-07:00) Yukon",
"DaylightName": "Yukon Daylight Time",
"Iana": "America/Whitehorse"
},
{
"Id": "Central America Standard Time",
"StandardName": "Central America Standard Time",
"DisplayName": "(UTC-06:00) Central America",
"DaylightName": "Central America Daylight Time",
"Iana": "America/Guatemala"
},
{
"Id": "Central Standard Time",
"StandardName": "Central Standard Time",
"DisplayName": "(UTC-06:00) Central Time (US & Canada)",
"DaylightName": "Central Daylight Time",
"Iana": "America/Chicago"
},
{
"Id": "Easter Island Standard Time",
"StandardName": "Easter Island Standard Time",
"DisplayName": "(UTC-06:00) Easter Island",
"DaylightName": "Easter Island Daylight Time",
"Iana": "Pacific/Easter"
},
{
"Id": "Central Standard Time (Mexico)",
"StandardName": "Central Standard Time (Mexico)",
"DisplayName": "(UTC-06:00) Guadalajara, Mexico City, Monterrey",
"DaylightName": "Central Daylight Time (Mexico)",
"Iana": "America/Mexico_City"
},
{
"Id": "Canada Central Standard Time",
"StandardName": "Canada Central Standard Time",
"DisplayName": "(UTC-06:00) Saskatchewan",
"DaylightName": "Canada Central Daylight Time",
"Iana": "America/Regina"
},
{
"Id": "SA Pacific Standard Time",
"StandardName": "SA Pacific Standard Time",
"DisplayName": "(UTC-05:00) Bogota, Lima, Quito, Rio Branco",
"DaylightName": "SA Pacific Daylight Time",
"Iana": "America/Bogota"
},
{
"Id": "Eastern Standard Time (Mexico)",
"StandardName": "Eastern Standard Time (Mexico)",
"DisplayName": "(UTC-05:00) Chetumal",
"DaylightName": "Eastern Daylight Time (Mexico)",
"Iana": "America/Cancun"
},
{
"Id": "Eastern Standard Time",
"StandardName": "Eastern Standard Time",
"DisplayName": "(UTC-05:00) Eastern Time (US & Canada)",
"DaylightName": "Eastern Daylight Time",
"Iana": "America/New_York"
},
{
"Id": "Haiti Standard Time",
"StandardName": "Haiti Standard Time",
"DisplayName": "(UTC-05:00) Haiti",
"DaylightName": "Haiti Daylight Time",
"Iana": "America/Port-au-Prince"
},
{
"Id": "Cuba Standard Time",
"StandardName": "Cuba Standard Time",
"DisplayName": "(UTC-05:00) Havana",
"DaylightName": "Cuba Daylight Time",
"Iana": "America/Havana"
},
{
"Id": "US Eastern Standard Time",
"StandardName": "US Eastern Standard Time",
"DisplayName": "(UTC-05:00) Indiana (East)",
"DaylightName": "US Eastern Daylight Time",
"Iana": "America/Indianapolis"
},
{
"Id": "Turks And Caicos Standard Time",
"StandardName": "Turks and Caicos Standard Time",
"DisplayName": "(UTC-05:00) Turks and Caicos",
"DaylightName": "Turks and Caicos Daylight Time",
"Iana": "America/Grand_Turk"
},
{
"Id": "Paraguay Standard Time",
"StandardName": "Paraguay Standard Time",
"DisplayName": "(UTC-04:00) Asuncion",
"DaylightName": "Paraguay Daylight Time",
"Iana": "America/Asuncion"
},
{
"Id": "Atlantic Standard Time",
"StandardName": "Atlantic Standard Time",
"DisplayName": "(UTC-04:00) Atlantic Time (Canada)",
"DaylightName": "Atlantic Daylight Time",
"Iana": "America/Halifax"
},
{
"Id": "Venezuela Standard Time",
"StandardName": "Venezuela Standard Time",
"DisplayName": "(UTC-04:00) Caracas",
"DaylightName": "Venezuela Daylight Time",
"Iana": "America/Caracas"
},
{
"Id": "Central Brazilian Standard Time",
"StandardName": "Central Brazilian Standard Time",
"DisplayName": "(UTC-04:00) Cuiaba",
"DaylightName": "Central Brazilian Daylight Time",
"Iana": "America/Cuiaba"
},
{
"Id": "SA Western Standard Time",
"StandardName": "SA Western Standard Time",
"DisplayName": "(UTC-04:00) Georgetown, La Paz, Manaus, San Juan",
"DaylightName": "SA Western Daylight Time",
"Iana": "America/La_Paz"
},
{
"Id": "Pacific SA Standard Time",
"StandardName": "Pacific SA Standard Time",
"DisplayName": "(UTC-04:00) Santiago",
"DaylightName": "Pacific SA Daylight Time",
"Iana": "America/Santiago"
},
{
"Id": "Newfoundland Standard Time",
"StandardName": "Newfoundland Standard Time",
"DisplayName": "(UTC-03:30) Newfoundland",
"DaylightName": "Newfoundland Daylight Time",
"Iana": "America/St_Johns"
},
{
"Id": "Tocantins Standard Time",
"StandardName": "Tocantins Standard Time",
"DisplayName": "(UTC-03:00) Araguaina",
"DaylightName": "Tocantins Daylight Time",
"Iana": "America/Araguaina"
},
{
"Id": "E. South America Standard Time",
"StandardName": "E. South America Standard Time",
"DisplayName": "(UTC-03:00) Brasilia",
"DaylightName": "E. South America Daylight Time",
"Iana": "America/Sao_Paulo"
},
{
"Id": "SA Eastern Standard Time",
"StandardName": "SA Eastern Standard Time",
"DisplayName": "(UTC-03:00) Cayenne, Fortaleza",
"DaylightName": "SA Eastern Daylight Time",
"Iana": "America/Cayenne"
},
{
"Id": "Argentina Standard Time",
"StandardName": "Argentina Standard Time",
"DisplayName": "(UTC-03:00) City of Buenos Aires",
"DaylightName": "Argentina Daylight Time",
"Iana": "America/Buenos_Aires"
},
{
"Id": "Montevideo Standard Time",
"StandardName": "Montevideo Standard Time",
"DisplayName": "(UTC-03:00) Montevideo",
"DaylightName": "Montevideo Daylight Time",
"Iana": "America/Montevideo"
},
{
"Id": "Magallanes Standard Time",
"StandardName": "Magallanes Standard Time",
"DisplayName": "(UTC-03:00) Punta Arenas",
"DaylightName": "Magallanes Daylight Time",
"Iana": "America/Punta_Arenas"
},
{
"Id": "Saint Pierre Standard Time",
"StandardName": "Saint Pierre Standard Time",
"DisplayName": "(UTC-03:00) Saint Pierre and Miquelon",
"DaylightName": "Saint Pierre Daylight Time",
"Iana": "America/Miquelon"
},
{
"Id": "Bahia Standard Time",
"StandardName": "Bahia Standard Time",
"DisplayName": "(UTC-03:00) Salvador",
"DaylightName": "Bahia Daylight Time",
"Iana": "America/Bahia"
},
{
"Id": "UTC-02",
"StandardName": "UTC-02",
"DisplayName": "(UTC-02:00) Coordinated Universal Time-02",
"DaylightName": "UTC-02",
"Iana": "Etc/GMT+2"
},
{
"Id": "Greenland Standard Time",
"StandardName": "Greenland Standard Time",
"DisplayName": "(UTC-02:00) Greenland",
"DaylightName": "Greenland Daylight Time",
"Iana": "America/Godthab"
},
{
"Id": "Mid-Atlantic Standard Time",
"StandardName": "Mid-Atlantic Standard Time",
"DisplayName": "(UTC-02:00) Mid-Atlantic - Old",
"DaylightName": "Mid-Atlantic Daylight Time",
"Iana": ""
},
{
"Id": "Azores Standard Time",
"StandardName": "Azores Standard Time",
"DisplayName": "(UTC-01:00) Azores",
"DaylightName": "Azores Daylight Time",
"Iana": "Atlantic/Azores"
},
{
"Id": "Cape Verde Standard Time",
"StandardName": "Cabo Verde Standard Time",
"DisplayName": "(UTC-01:00) Cabo Verde Is.",
"DaylightName": "Cabo Verde Daylight Time",
"Iana": "Atlantic/Cape_Verde"
},
{
"Id": "UTC",
"StandardName": "Coordinated Universal Time",
"DisplayName": "(UTC) Coordinated Universal Time",
"DaylightName": "Coordinated Universal Time",
"Iana": "Etc/UTC"
},
{
"Id": "GMT Standard Time",
"StandardName": "GMT Standard Time",
"DisplayName": "(UTC+00:00) Dublin, Edinburgh, Lisbon, London",
"DaylightName": "GMT Daylight Time",
"Iana": "Europe/London"
},
{
"Id": "Greenwich Standard Time",
"StandardName": "Greenwich Standard Time",
"DisplayName": "(UTC+00:00) Monrovia, Reykjavik",
"DaylightName": "Greenwich Daylight Time",
"Iana": "Atlantic/Reykjavik"
},
{
"Id": "Sao Tome Standard Time",
"StandardName": "Sao Tome Standard Time",
"DisplayName": "(UTC+00:00) Sao Tome",
"DaylightName": "Sao Tome Daylight Time",
"Iana": "Africa/Sao_Tome"
},
{
"Id": "Morocco Standard Time",
"StandardName": "Morocco Standard Time",
"DisplayName": "(UTC+01:00) Casablanca",
"DaylightName": "Morocco Daylight Time",
"Iana": "Africa/Casablanca"
},
{
"Id": "W. Europe Standard Time",
"StandardName": "W. Europe Standard Time",
"DisplayName": "(UTC+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna",
"DaylightName": "W. Europe Daylight Time",
"Iana": "Europe/Berlin"
},
{
"Id": "Central Europe Standard Time",
"StandardName": "Central Europe Standard Time",
"DisplayName": "(UTC+01:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague",
"DaylightName": "Central Europe Daylight Time",
"Iana": "Europe/Budapest"
},
{
"Id": "Romance Standard Time",
"StandardName": "Romance Standard Time",
"DisplayName": "(UTC+01:00) Brussels, Copenhagen, Madrid, Paris",
"DaylightName": "Romance Daylight Time",
"Iana": "Europe/Paris"
},
{
"Id": "Central European Standard Time",
"StandardName": "Central European Standard Time",
"DisplayName": "(UTC+01:00) Sarajevo, Skopje, Warsaw, Zagreb",
"DaylightName": "Central European Daylight Time",
"Iana": "Europe/Warsaw"
},
{
"Id": "W. Central Africa Standard Time",
"StandardName": "W. Central Africa Standard Time",
"DisplayName": "(UTC+01:00) West Central Africa",
"DaylightName": "W. Central Africa Daylight Time",
"Iana": "Africa/Lagos"
},
{
"Id": "GTB Standard Time",
"StandardName": "GTB Standard Time",
"DisplayName": "(UTC+02:00) Athens, Bucharest",
"DaylightName": "GTB Daylight Time",
"Iana": "Europe/Bucharest"
},
{
"Id": "Middle East Standard Time",
"StandardName": "Middle East Standard Time",
"DisplayName": "(UTC+02:00) Beirut",
"DaylightName": "Middle East Daylight Time",
"Iana": "Asia/Beirut"
},
{
"Id": "Egypt Standard Time",
"StandardName": "Egypt Standard Time",
"DisplayName": "(UTC+02:00) Cairo",
"DaylightName": "Egypt Daylight Time",
"Iana": "Africa/Cairo"
},
{
"Id": "E. Europe Standard Time",
"StandardName": "E. Europe Standard Time",
"DisplayName": "(UTC+02:00) Chisinau",
"DaylightName": "E. Europe Daylight Time",
"Iana": "Europe/Chisinau"
},
{
"Id": "West Bank Standard Time",
"StandardName": "West Bank Gaza Standard Time",
"DisplayName": "(UTC+02:00) Gaza, Hebron",
"DaylightName": "West Bank Gaza Daylight Time",
"Iana": "Asia/Hebron"
},
{
"Id": "South Africa Standard Time",
"StandardName": "South Africa Standard Time",
"DisplayName": "(UTC+02:00) Harare, Pretoria",
"DaylightName": "South Africa Daylight Time",
"Iana": "Africa/Johannesburg"
},
{
"Id": "FLE Standard Time",
"StandardName": "FLE Standard Time",
"DisplayName": "(UTC+02:00) Helsinki, Kyiv, Riga, Sofia, Tallinn, Vilnius",
"DaylightName": "FLE Daylight Time",
"Iana": "Europe/Kiev"
},
{
"Id": "Israel Standard Time",
"StandardName": "Jerusalem Standard Time",
"DisplayName": "(UTC+02:00) Jerusalem",
"DaylightName": "Jerusalem Daylight Time",
"Iana": "Asia/Jerusalem"
},
{
"Id": "South Sudan Standard Time",
"StandardName": "South Sudan Standard Time",
"DisplayName": "(UTC+02:00) Juba",
"DaylightName": "South Sudan Daylight Time",
"Iana": ""
},
{
"Id": "Kaliningrad Standard Time",
"StandardName": "Russia TZ 1 Standard Time",
"DisplayName": "(UTC+02:00) Kaliningrad",
"DaylightName": "Russia TZ 1 Daylight Time",
"Iana": "Europe/Kaliningrad"
},
{
"Id": "Sudan Standard Time",
"StandardName": "Sudan Standard Time",
"DisplayName": "(UTC+02:00) Khartoum",
"DaylightName": "Sudan Daylight Time",
"Iana": "Africa/Khartoum"
},
{
"Id": "Libya Standard Time",
"StandardName": "Libya Standard Time",
"DisplayName": "(UTC+02:00) Tripoli",
"DaylightName": "Libya Daylight Time",
"Iana": "Africa/Tripoli"
},
{
"Id": "Namibia Standard Time",
"StandardName": "Namibia Standard Time",
"DisplayName": "(UTC+02:00) Windhoek",
"DaylightName": "Namibia Daylight Time",
"Iana": "Africa/Windhoek"
},
{
"Id": "Jordan Standard Time",
"StandardName": "Jordan Standard Time",
"DisplayName": "(UTC+03:00) Amman",
"DaylightName": "Jordan Daylight Time",
"Iana": "Asia/Amman"
},
{
"Id": "Arabic Standard Time",
"StandardName": "Arabic Standard Time",
"DisplayName": "(UTC+03:00) Baghdad",
"DaylightName": "Arabic Daylight Time",
"Iana": "Asia/Baghdad"
},
{
"Id": "Syria Standard Time",
"StandardName": "Syria Standard Time",
"DisplayName": "(UTC+03:00) Damascus",
"DaylightName": "Syria Daylight Time",
"Iana": "Asia/Damascus"
},
{
"Id": "Turkey Standard Time",
"StandardName": "Turkey Standard Time",
"DisplayName": "(UTC+03:00) Istanbul",
"DaylightName": "Turkey Daylight Time",
"Iana": "Europe/Istanbul"
},
{
"Id": "Arab Standard Time",
"StandardName": "Arab Standard Time",
"DisplayName": "(UTC+03:00) Kuwait, Riyadh",
"DaylightName": "Arab Daylight Time",
"Iana": "Asia/Riyadh"
},
{
"Id": "Belarus Standard Time",
"StandardName": "Belarus Standard Time",
"DisplayName": "(UTC+03:00) Minsk",
"DaylightName": "Belarus Daylight Time",
"Iana": "Europe/Minsk"
},
{
"Id": "Russian Standard Time",
"StandardName": "Russia TZ 2 Standard Time",
"DisplayName": "(UTC+03:00) Moscow, St. Petersburg",
"DaylightName": "Russia TZ 2 Daylight Time",
"Iana": "Europe/Moscow"
},
{
"Id": "E. Africa Standard Time",
"StandardName": "E. Africa Standard Time",
"DisplayName": "(UTC+03:00) Nairobi",
"DaylightName": "E. Africa Daylight Time",
"Iana": "Africa/Nairobi"
},
{
"Id": "Volgograd Standard Time",
"StandardName": "Volgograd Standard Time",
"DisplayName": "(UTC+03:00) Volgograd",
"DaylightName": "Volgograd Daylight Time",
"Iana": "Europe/Volgograd"
},
{
"Id": "Iran Standard Time",
"StandardName": "Iran Standard Time",
"DisplayName": "(UTC+03:30) Tehran",
"DaylightName": "Iran Daylight Time",
"Iana": "Asia/Tehran"
},
{
"Id": "Arabian Standard Time",
"StandardName": "Arabian Standard Time",
"DisplayName": "(UTC+04:00) Abu Dhabi, Muscat",
"DaylightName": "Arabian Daylight Time",
"Iana": "Asia/Dubai"
},
{
"Id": "Astrakhan Standard Time",
"StandardName": "Astrakhan Standard Time",
"DisplayName": "(UTC+04:00) Astrakhan, Ulyanovsk",
"DaylightName": "Astrakhan Daylight Time",
"Iana": "Europe/Astrakhan"
},
{
"Id": "Azerbaijan Standard Time",
"StandardName": "Azerbaijan Standard Time",
"DisplayName": "(UTC+04:00) Baku",
"DaylightName": "Azerbaijan Daylight Time",
"Iana": "Asia/Baku"
},
{
"Id": "Russia Time Zone 3",
"StandardName": "Russia TZ 3 Standard Time",
"DisplayName": "(UTC+04:00) Izhevsk, Samara",
"DaylightName": "Russia TZ 3 Daylight Time",
"Iana": "Europe/Samara"
},
{
"Id": "Mauritius Standard Time",
"StandardName": "Mauritius Standard Time",
"DisplayName": "(UTC+04:00) Port Louis",
"DaylightName": "Mauritius Daylight Time",
"Iana": "Indian/Mauritius"
},
{
"Id": "Saratov Standard Time",
"StandardName": "Saratov Standard Time",
"DisplayName": "(UTC+04:00) Saratov",
"DaylightName": "Saratov Daylight Time",
"Iana": "Europe/Saratov"
},
{
"Id": "Georgian Standard Time",
"StandardName": "Georgian Standard Time",
"DisplayName": "(UTC+04:00) Tbilisi",
"DaylightName": "Georgian Daylight Time",
"Iana": "Asia/Tbilisi"
},
{
"Id": "Caucasus Standard Time",
"StandardName": "Caucasus Standard Time",
"DisplayName": "(UTC+04:00) Yerevan",
"DaylightName": "Caucasus Daylight Time",
"Iana": "Asia/Yerevan"
},
{
"Id": "Afghanistan Standard Time",
"StandardName": "Afghanistan Standard Time",
"DisplayName": "(UTC+04:30) Kabul",
"DaylightName": "Afghanistan Daylight Time",
"Iana": "Asia/Kabul"
},
{
"Id": "West Asia Standard Time",
"StandardName": "West Asia Standard Time",
"DisplayName": "(UTC+05:00) Ashgabat, Tashkent",
"DaylightName": "West Asia Daylight Time",
"Iana": "Asia/Tashkent"
},
{
"Id": "Qyzylorda Standard Time",
"StandardName": "Qyzylorda Standard Time",
"DisplayName": "(UTC+05:00) Astana",
"DaylightName": "Qyzylorda Daylight Time",
"Iana": "Asia/Qyzylorda"
},
{
"Id": "Ekaterinburg Standard Time",
"StandardName": "Russia TZ 4 Standard Time",
"DisplayName": "(UTC+05:00) Ekaterinburg",
"DaylightName": "Russia TZ 4 Daylight Time",
"Iana": "Asia/Yekaterinburg"
},
{
"Id": "Pakistan Standard Time",
"StandardName": "Pakistan Standard Time",
"DisplayName": "(UTC+05:00) Islamabad, Karachi",
"DaylightName": "Pakistan Daylight Time",
"Iana": "Asia/Karachi"
},
{
"Id": "India Standard Time",
"StandardName": "India Standard Time",
"DisplayName": "(UTC+05:30) Chennai, Kolkata, Mumbai, New Delhi",
"DaylightName": "India Daylight Time",
"Iana": "Asia/Calcutta"
},
{
"Id": "Sri Lanka Standard Time",
"StandardName": "Sri Lanka Standard Time",
"DisplayName": "(UTC+05:30) Sri Jayawardenepura",
"DaylightName": "Sri Lanka Daylight Time",
"Iana": "Asia/Colombo"
},
{
"Id": "Nepal Standard Time",
"StandardName": "Nepal Standard Time",
"DisplayName": "(UTC+05:45) Kathmandu",
"DaylightName": "Nepal Daylight Time",
"Iana": "Asia/Katmandu"
},
{
"Id": "Central Asia Standard Time",
"StandardName": "Central Asia Standard Time",
"DisplayName": "(UTC+06:00) Bishkek",
"DaylightName": "Central Asia Daylight Time",
"Iana": "Asia/Almaty"
},
{
"Id": "Bangladesh Standard Time",
"StandardName": "Bangladesh Standard Time",
"DisplayName": "(UTC+06:00) Dhaka",
"DaylightName": "Bangladesh Daylight Time",
"Iana": "Asia/Dhaka"
},
{
"Id": "Omsk Standard Time",
"StandardName": "Omsk Standard Time",
"DisplayName": "(UTC+06:00) Omsk",
"DaylightName": "Omsk Daylight Time",
"Iana": "Asia/Omsk"
},
{
"Id": "Myanmar Standard Time",
"StandardName": "Myanmar Standard Time",
"DisplayName": "(UTC+06:30) Yangon (Rangoon)",
"DaylightName": "Myanmar Daylight Time",
"Iana": "Asia/Rangoon"
},
{
"Id": "SE Asia Standard Time",
"StandardName": "SE Asia Standard Time",
"DisplayName": "(UTC+07:00) Bangkok, Hanoi, Jakarta",
"DaylightName": "SE Asia Daylight Time",
"Iana": "Asia/Bangkok"
},
{
"Id": "Altai Standard Time",
"StandardName": "Altai Standard Time",
"DisplayName": "(UTC+07:00) Barnaul, Gorno-Altaysk",
"DaylightName": "Altai Daylight Time",
"Iana": "Asia/Barnaul"
},
{
"Id": "W. Mongolia Standard Time",
"StandardName": "W. Mongolia Standard Time",
"DisplayName": "(UTC+07:00) Hovd",
"DaylightName": "W. Mongolia Daylight Time",
"Iana": "Asia/Hovd"
},
{
"Id": "North Asia Standard Time",
"StandardName": "Russia TZ 6 Standard Time",
"DisplayName": "(UTC+07:00) Krasnoyarsk",
"DaylightName": "Russia TZ 6 Daylight Time",
"Iana": "Asia/Krasnoyarsk"
},
{
"Id": "N. Central Asia Standard Time",
"StandardName": "Novosibirsk Standard Time",
"DisplayName": "(UTC+07:00) Novosibirsk",
"DaylightName": "Novosibirsk Daylight Time",
"Iana": "Asia/Novosibirsk"
},
{
"Id": "Tomsk Standard Time",
"StandardName": "Tomsk Standard Time",
"DisplayName": "(UTC+07:00) Tomsk",
"DaylightName": "Tomsk Daylight Time",
"Iana": "Asia/Tomsk"
},
{
"Id": "China Standard Time",
"StandardName": "China Standard Time",
"DisplayName": "(UTC+08:00) Beijing, Chongqing, Hong Kong, Urumqi",
"DaylightName": "China Daylight Time",
"Iana": "Asia/Shanghai"
},
{
"Id": "North Asia East Standard Time",
"StandardName": "Russia TZ 7 Standard Time",
"DisplayName": "(UTC+08:00) Irkutsk",
"DaylightName": "Russia TZ 7 Daylight Time",
"Iana": "Asia/Irkutsk"
},
{
"Id": "Singapore Standard Time",
"StandardName": "Malay Peninsula Standard Time",
"DisplayName": "(UTC+08:00) Kuala Lumpur, Singapore",
"DaylightName": "Malay Peninsula Daylight Time",
"Iana": "Asia/Singapore"
},
{
"Id": "W. Australia Standard Time",
"StandardName": "W. Australia Standard Time",
"DisplayName": "(UTC+08:00) Perth",
"DaylightName": "W. Australia Daylight Time",
"Iana": "Australia/Perth"
},
{
"Id": "Taipei Standard Time",
"StandardName": "Taipei Standard Time",
"DisplayName": "(UTC+08:00) Taipei",
"DaylightName": "Taipei Daylight Time",
"Iana": "Asia/Taipei"
},
{
"Id": "Ulaanbaatar Standard Time",
"StandardName": "Ulaanbaatar Standard Time",
"DisplayName": "(UTC+08:00) Ulaanbaatar",
"DaylightName": "Ulaanbaatar Daylight Time",
"Iana": "Asia/Ulaanbaatar"
},
{
"Id": "Aus Central W. Standard Time",
"StandardName": "Aus Central W. Standard Time",
"DisplayName": "(UTC+08:45) Eucla",
"DaylightName": "Aus Central W. Daylight Time",
"Iana": "Australia/Eucla"
},
{
"Id": "Transbaikal Standard Time",
"StandardName": "Transbaikal Standard Time",
"DisplayName": "(UTC+09:00) Chita",
"DaylightName": "Transbaikal Daylight Time",
"Iana": "Asia/Chita"
},
{
"Id": "Tokyo Standard Time",
"StandardName": "Tokyo Standard Time",
"DisplayName": "(UTC+09:00) Osaka, Sapporo, Tokyo",
"DaylightName": "Tokyo Daylight Time",
"Iana": "Asia/Tokyo"
},
{
"Id": "North Korea Standard Time",
"StandardName": "North Korea Standard Time",
"DisplayName": "(UTC+09:00) Pyongyang",
"DaylightName": "North Korea Daylight Time",
"Iana": "Asia/Pyongyang"
},
{
"Id": "Korea Standard Time",
"StandardName": "Korea Standard Time",
"DisplayName": "(UTC+09:00) Seoul",
"DaylightName": "Korea Daylight Time",
"Iana": "Asia/Seoul"
},
{
"Id": "Yakutsk Standard Time",
"StandardName": "Russia TZ 8 Standard Time",
"DisplayName": "(UTC+09:00) Yakutsk",
"DaylightName": "Russia TZ 8 Daylight Time",
"Iana": "Asia/Yakutsk"
},
{
"Id": "Cen. Australia Standard Time",
"StandardName": "Cen. Australia Standard Time",
"DisplayName": "(UTC+09:30) Adelaide",
"DaylightName": "Cen. Australia Daylight Time",
"Iana": "Australia/Adelaide"
},
{
"Id": "AUS Central Standard Time",
"StandardName": "AUS Central Standard Time",
"DisplayName": "(UTC+09:30) Darwin",
"DaylightName": "AUS Central Daylight Time",
"Iana": "Australia/Darwin"
},
{
"Id": "E. Australia Standard Time",
"StandardName": "E. Australia Standard Time",
"DisplayName": "(UTC+10:00) Brisbane",
"DaylightName": "E. Australia Daylight Time",
"Iana": "Australia/Brisbane"
},
{
"Id": "AUS Eastern Standard Time",
"StandardName": "AUS Eastern Standard Time",
"DisplayName": "(UTC+10:00) Canberra, Melbourne, Sydney",
"DaylightName": "AUS Eastern Daylight Time",
"Iana": "Australia/Sydney"
},
{
"Id": "West Pacific Standard Time",
"StandardName": "West Pacific Standard Time",
"DisplayName": "(UTC+10:00) Guam, Port Moresby",
"DaylightName": "West Pacific Daylight Time",
"Iana": "Pacific/Port_Moresby"
},
{
"Id": "Tasmania Standard Time",
"StandardName": "Tasmania Standard Time",
"DisplayName": "(UTC+10:00) Hobart",
"DaylightName": "Tasmania Daylight Time",
"Iana": "Australia/Hobart"
},
{
"Id": "Vladivostok Standard Time",
"StandardName": "Russia TZ 9 Standard Time",
"DisplayName": "(UTC+10:00) Vladivostok",
"DaylightName": "Russia TZ 9 Daylight Time",
"Iana": "Asia/Vladivostok"
},
{
"Id": "Lord Howe Standard Time",
"StandardName": "Lord Howe Standard Time",
"DisplayName": "(UTC+10:30) Lord Howe Island",
"DaylightName": "Lord Howe Daylight Time",
"Iana": "Australia/Lord_Howe"
},
{
"Id": "Bougainville Standard Time",
"StandardName": "Bougainville Standard Time",
"DisplayName": "(UTC+11:00) Bougainville Island",
"DaylightName": "Bougainville Daylight Time",
"Iana": "Pacific/Bougainville"
},
{
"Id": "Russia Time Zone 10",
"StandardName": "Russia TZ 10 Standard Time",
"DisplayName": "(UTC+11:00) Chokurdakh",
"DaylightName": "Russia TZ 10 Daylight Time",
"Iana": "Asia/Srednekolymsk"
},
{
"Id": "Magadan Standard Time",
"StandardName": "Magadan Standard Time",
"DisplayName": "(UTC+11:00) Magadan",
"DaylightName": "Magadan Daylight Time",
"Iana": "Asia/Magadan"
},
{
"Id": "Norfolk Standard Time",
"StandardName": "Norfolk Standard Time",
"DisplayName": "(UTC+11:00) Norfolk Island",
"DaylightName": "Norfolk Daylight Time",
"Iana": "Pacific/Norfolk"
},
{
"Id": "Sakhalin Standard Time",
"StandardName": "Sakhalin Standard Time",
"DisplayName": "(UTC+11:00) Sakhalin",
"DaylightName": "Sakhalin Daylight Time",
"Iana": "Asia/Sakhalin"
},
{
"Id": "Central Pacific Standard Time",
"StandardName": "Central Pacific Standard Time",
"DisplayName": "(UTC+11:00) Solomon Is., New Caledonia",
"DaylightName": "Central Pacific Daylight Time",
"Iana": "Pacific/Guadalcanal"
},
{
"Id": "Russia Time Zone 11",
"StandardName": "Russia TZ 11 Standard Time",
"DisplayName": "(UTC+12:00) Anadyr, Petropavlovsk-Kamchatsky",
"DaylightName": "Russia TZ 11 Daylight Time",
"Iana": "Asia/Kamchatka"
},
{
"Id": "New Zealand Standard Time",
"StandardName": "New Zealand Standard Time",
"DisplayName": "(UTC+12:00) Auckland, Wellington",
"DaylightName": "New Zealand Daylight Time",
"Iana": "Pacific/Auckland"
},
{
"Id": "UTC+12",
"StandardName": "UTC+12",
"DisplayName": "(UTC+12:00) Coordinated Universal Time+12",
"DaylightName": "UTC+12",
"Iana": "Etc/GMT-12"
},
{
"Id": "Fiji Standard Time",
"StandardName": "Fiji Standard Time",
"DisplayName": "(UTC+12:00) Fiji",
"DaylightName": "Fiji Daylight Time",
"Iana": "Pacific/Fiji"
},
{
"Id": "Kamchatka Standard Time",
"StandardName": "Kamchatka Standard Time",
"DisplayName": "(UTC+12:00) Petropavlovsk-Kamchatsky - Old",
"DaylightName": "Kamchatka Daylight Time",
"Iana": ""
},
{
"Id": "Chatham Islands Standard Time",
"StandardName": "Chatham Islands Standard Time",
"DisplayName": "(UTC+12:45) Chatham Islands",
"DaylightName": "Chatham Islands Daylight Time",
"Iana": "Pacific/Chatham"
},
{
"Id": "UTC+13",
"StandardName": "UTC+13",
"DisplayName": "(UTC+13:00) Coordinated Universal Time+13",
"DaylightName": "UTC+13",
"Iana": "Etc/GMT-13"
},
{
"Id": "Tonga Standard Time",
"StandardName": "Tonga Standard Time",
"DisplayName": "(UTC+13:00) Nuku'alofa",
"DaylightName": "Tonga Daylight Time",
"Iana": "Pacific/Tongatapu"
},
{
"Id": "Samoa Standard Time",
"StandardName": "Samoa Standard Time",
"DisplayName": "(UTC+13:00) Samoa",
"DaylightName": "Samoa Daylight Time",
"Iana": "Pacific/Apia"
},
{
"Id": "Line Islands Standard Time",
"StandardName": "Line Islands Standard Time",
"DisplayName": "(UTC+14:00) Kiritimati Island",
"DaylightName": "Line Islands Daylight Time",
"Iana": "Pacific/Kiritimati"
}
]
}

View File

@ -90,77 +90,56 @@ static void tz_context_free(void)
}
#if defined(WITH_TIMEZONE_FROM_FILE) && defined(WITH_WINPR_JSON)
static char* tz_get_object_str(WINPR_JSON* json, size_t pos, const char* name)
{
WINPR_ASSERT(json);
if (!WINPR_JSON_IsObject(json) || !WINPR_JSON_HasObjectItem(json, name))
{
WLog_WARN(TAG, "Invalid JSON entry at entry %" PRIuz ", missing an Object named '%s'", pos,
name);
return NULL;
}
WINPR_JSON* obj = WINPR_JSON_GetObjectItem(json, name);
WINPR_ASSERT(obj);
if (!WINPR_JSON_IsString(obj))
{
WLog_WARN(TAG,
"Invalid JSON entry at entry %" PRIuz ", Object named '%s': Not of type string",
pos, name);
return NULL;
}
const char* str = WINPR_JSON_GetStringValue(obj);
if (!str)
{
WLog_WARN(TAG, "Invalid JSON entry at entry %" PRIuz ", Object named '%s': NULL string",
pos, name);
return NULL;
}
return _strdup(str);
}
static BOOL tz_parse_json_entry(WINPR_JSON* json, size_t pos, TimeZoneNameMapEntry* entry)
{
WINPR_ASSERT(entry);
if (!json || !WINPR_JSON_IsArray(json))
if (!json || !WINPR_JSON_IsObject(json))
{
WLog_WARN(TAG, "Invalid JSON entry at entry %" PRIuz ", expected an array", pos);
return FALSE;
}
const size_t count = WINPR_JSON_GetArraySize(json);
if (count != 5)
entry->Id = tz_get_object_str(json, pos, "Id");
entry->StandardName = tz_get_object_str(json, pos, "StandardName");
entry->DisplayName = tz_get_object_str(json, pos, "DisplayName");
entry->DaylightName = tz_get_object_str(json, pos, "DaylightName");
entry->Iana = tz_get_object_str(json, pos, "Iana");
if (!entry->Id || !entry->StandardName || !entry->DisplayName || !entry->DaylightName ||
!entry->Iana)
{
WLog_WARN(TAG,
"Invalid JSON entry at entry %" PRIuz
", expected an array of 5 elements, got %" PRIuz,
pos, count);
tz_entry_free(entry);
return FALSE;
}
for (size_t x = 0; x < count; x++)
{
WINPR_JSON* jstr = WINPR_JSON_GetArrayItem(json, x);
if (!jstr || !WINPR_JSON_IsString(jstr))
{
WLog_WARN(
TAG, "Invalid JSON entry at entry %" PRIuz ", element %" PRIuz " expected a string",
pos, x);
tz_entry_free(entry);
return FALSE;
}
const char* str = WINPR_JSON_GetStringValue(jstr);
if (!str)
{
WLog_WARN(TAG,
"Invalid JSON entry at entry %" PRIuz ", element %" PRIuz
" expected a value, got a NULL string",
pos, x);
tz_entry_free(entry);
return FALSE;
}
char* copy = _strdup(str);
if (!copy)
{
WLog_WARN(TAG, "Failed to copy string at entry %" PRIuz ", element %" PRIuz, pos, x);
tz_entry_free(entry);
return FALSE;
}
switch (x)
{
case 0:
entry->Id = copy;
break;
case 1:
entry->StandardName = copy;
break;
case 2:
entry->DisplayName = copy;
break;
case 3:
entry->DaylightName = copy;
break;
case 4:
entry->Iana = copy;
break;
default:
free(copy);
tz_entry_free(entry);
return FALSE;
}
}
return TRUE;
}
@ -262,19 +241,25 @@ static BOOL CALLBACK load_timezones(PINIT_ONCE once, PVOID param, PVOID* pvconte
if (!json)
goto end;
if (!WINPR_JSON_IsArray(json))
if (!WINPR_JSON_IsObject(json))
{
WLog_WARN(TAG, "Invalid top level JSON type in file %s, expected an array", filename);
goto end;
}
const size_t count = WINPR_JSON_GetArraySize(json);
WINPR_JSON* obj = WINPR_JSON_GetObjectItem(json, "TimeZoneNameMap");
if (!WINPR_JSON_IsArray(obj))
{
WLog_WARN(TAG, "Invalid top level JSON type in file %s, expected an array", filename);
goto end;
}
const size_t count = WINPR_JSON_GetArraySize(obj);
const size_t offset = context->count;
if (!reallocate_context(context, count))
goto end;
for (size_t x = 0; x < count; x++)
{
WINPR_JSON* entry = WINPR_JSON_GetArrayItem(json, x);
WINPR_JSON* entry = WINPR_JSON_GetArrayItem(obj, x);
if (!tz_parse_json_entry(entry, x, &context->entries[offset + x]))
goto end;
}