From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2155) id A972B3858410; Thu, 21 Mar 2024 21:22:16 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org A972B3858410 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1711056136; bh=kQD6DdUJVd75fBUWqPYXHyPwq9MHJkBLj+fPX1eiXfE=; h=From:To:Subject:Date:From; b=hoaE06pa5tFvueNJrAmBgkvaR0gUHUdYiZNMyVzBDLXxEsAWb5bpTQTVcgTe/AWI5 8FRNsdkYdRAa5dT36SNDHLJsVTF/AYJVWn6T0SwCSXZn2qpcPWXPvrGfY820q/1eXD 2aDYFZAUgosmRgGSpr0v8wmkFYcdfqV95QQz+jg4= Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable From: Corinna Vinschen To: cygwin-cvs@sourceware.org Subject: [newlib-cygwin/main] Cygwin: tzset(1): use GetDynamicTimeZoneInformation X-Act-Checkin: newlib-cygwin X-Git-Author: Corinna Vinschen X-Git-Refname: refs/heads/main X-Git-Oldrev: 4c4e6d67d4f562b081f065247843ae7828dd4fe7 X-Git-Newrev: ace936b70780fd076de4867514cc37c66ba91d26 Message-Id: <20240321212216.A972B3858410@sourceware.org> Date: Thu, 21 Mar 2024 21:22:16 +0000 (GMT) List-Id: https://sourceware.org/git/gitweb.cgi?p=3Dnewlib-cygwin.git;h=3Dace936b7078= 0fd076de4867514cc37c66ba91d26 commit ace936b70780fd076de4867514cc37c66ba91d26 Author: Corinna Vinschen AuthorDate: Thu Mar 21 21:24:11 2024 +0100 Commit: Corinna Vinschen CommitDate: Thu Mar 21 21:44:57 2024 +0100 Cygwin: tzset(1): use GetDynamicTimeZoneInformation =20 Use official GetDynamicTimeZoneInformation() function instead of scanning the registry for the timezone keyname. =20 Signed-off-by: Corinna Vinschen Diff: --- winsup/utils/tzset.c | 67 ++++--------------------------------------------= ---- 1 file changed, 5 insertions(+), 62 deletions(-) diff --git a/winsup/utils/tzset.c b/winsup/utils/tzset.c index d369ff7a2cd3..0660da7d1d8e 100644 --- a/winsup/utils/tzset.c +++ b/winsup/utils/tzset.c @@ -15,10 +15,6 @@ details. */ #include #include =20 -#ifndef GEOID_NOT_AVAILABLE -#define GEOID_NOT_AVAILABLE -1 -#endif - /* The auto-generated tzmap.h contains the mapping table from Windows time= zone and country per ISO 3166-1 to POSIX timezone. For more info, see the f= ile itself. */ @@ -35,49 +31,6 @@ static struct option longopts[] =3D =20 static char opts[] =3D "hV"; =20 -#define REG_TZINFO L"SYSTEM\\CurrentControlSet\\Control\\TimeZoneInformati= on" -#define REG_TZDB L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Time Z= ones" - -static inline HKEY -reg_open (HKEY pkey, PCWSTR path, const char *msg) -{ - LONG ret; - HKEY hkey; - - ret =3D RegOpenKeyExW (pkey, path, 0, KEY_READ, &hkey); - if (ret =3D=3D ERROR_SUCCESS) - return hkey; - if (msg) - fprintf (stderr, "%s: cannot open registry %s, error code %" PRIu32 "\= n", - program_invocation_short_name, msg, (unsigned int) ret); - return NULL; -} - -/* For symmetry */ -#define reg_close(hkey) RegCloseKey(hkey) - -static inline BOOL -reg_query (HKEY hkey, PCWSTR value, PWCHAR buf, DWORD size, const char *ms= g) -{ - LONG ret; - DWORD type; - - ret =3D RegQueryValueExW (hkey, value, 0, &type, (LPBYTE) buf, &size); - if (ret =3D=3D ERROR_SUCCESS) - return TRUE; - if (msg) - fprintf (stderr, "%s: cannot query registry %s, error code %" PRIu32 "= \n", - program_invocation_short_name, msg, (unsigned int) ret); - return FALSE; -} - -static inline BOOL -reg_enum (HKEY hkey, int idx, PWCHAR name, DWORD size) -{ - return RegEnumKeyExW (hkey, idx, name, &size, NULL, NULL, NULL, NULL) - =3D=3D ERROR_SUCCESS; -} - static void __attribute__ ((__noreturn__)) usage (FILE *stream) { @@ -119,8 +72,8 @@ print_version () int main (int argc, char **argv) { - HKEY hkey; - WCHAR keyname[256], country[10], *spc; + DYNAMIC_TIME_ZONE_INFORMATION tz; + WCHAR country[10], *spc; GEOID geo; int opt, idx, gotit =3D -1; =20 @@ -141,18 +94,8 @@ main (int argc, char **argv) if (optind < argc) usage (stderr); =20 - /* First fetch current timezone information from registry. */ - hkey =3D reg_open (HKEY_LOCAL_MACHINE, REG_TZINFO, "timezone information= "); - if (!hkey) + if (GetDynamicTimeZoneInformation (&tz) =3D=3D TIME_ZONE_ID_INVALID) return 1; - /* Vista introduced the TimeZoneKeyName value, which simplifies the - job a lot. */ - if (!reg_query (hkey, L"TimeZoneKeyName", keyname, sizeof keyname, NULL)) - { - reg_close (hkey); - return 1; - } - reg_close (hkey); =20 /* We fetch the current Geo-location of the user and convert it to an ISO 3166-1 compatible nation code. */ @@ -169,7 +112,7 @@ main (int argc, char **argv) /* Now iterate over the mapping table and find the right entry. */ for (idx =3D 0; idx < TZMAP_SIZE; ++idx) { - if (!wcscasecmp (keyname, tzmap[idx].win_tzkey)) + if (!wcscasecmp (tz.TimeZoneKeyName, tzmap[idx].win_tzkey)) { if (gotit < 0) gotit =3D idx; @@ -189,7 +132,7 @@ main (int argc, char **argv) fprintf (stderr, "%s: can't find matching POSIX timezone for " "Windows timezone \"%ls\"\n", - program_invocation_short_name, keyname); + program_invocation_short_name, tz.TimeZoneKeyName); return 1; } idx =3D gotit;