public inbox for cygwin-cvs@sourceware.org help / color / mirror / Atom feed
From: Corinna Vinschen <corinna@sourceware.org> To: cygwin-cvs@sourceware.org Subject: [newlib-cygwin/cygwin-3_5-branch] Cygwin: tzset(1): use GetDynamicTimeZoneInformation Date: Wed, 3 Apr 2024 16:56:16 +0000 (GMT) [thread overview] Message-ID: <20240403165616.2735A38460B2@sourceware.org> (raw) https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;h=6c0240b54539d5396df1c6ee0c75b213e57c67bc commit 6c0240b54539d5396df1c6ee0c75b213e57c67bc Author: Corinna Vinschen <corinna@vinschen.de> AuthorDate: Thu Mar 21 21:24:11 2024 +0100 Commit: Corinna Vinschen <corinna@vinschen.de> CommitDate: Wed Apr 3 18:53:56 2024 +0200 Cygwin: tzset(1): use GetDynamicTimeZoneInformation Use official GetDynamicTimeZoneInformation() function instead of scanning the registry for the timezone keyname. Signed-off-by: Corinna Vinschen <corinna@vinschen.de> 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 <cygwin/version.h> #include <windows.h> -#ifndef GEOID_NOT_AVAILABLE -#define GEOID_NOT_AVAILABLE -1 -#endif - /* The auto-generated tzmap.h contains the mapping table from Windows timezone and country per ISO 3166-1 to POSIX timezone. For more info, see the file itself. */ @@ -35,49 +31,6 @@ static struct option longopts[] = static char opts[] = "hV"; -#define REG_TZINFO L"SYSTEM\\CurrentControlSet\\Control\\TimeZoneInformation" -#define REG_TZDB L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Time Zones" - -static inline HKEY -reg_open (HKEY pkey, PCWSTR path, const char *msg) -{ - LONG ret; - HKEY hkey; - - ret = RegOpenKeyExW (pkey, path, 0, KEY_READ, &hkey); - if (ret == 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 *msg) -{ - LONG ret; - DWORD type; - - ret = RegQueryValueExW (hkey, value, 0, &type, (LPBYTE) buf, &size); - if (ret == 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) - == 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 = -1; @@ -141,18 +94,8 @@ main (int argc, char **argv) if (optind < argc) usage (stderr); - /* First fetch current timezone information from registry. */ - hkey = reg_open (HKEY_LOCAL_MACHINE, REG_TZINFO, "timezone information"); - if (!hkey) + if (GetDynamicTimeZoneInformation (&tz) == 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); /* 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 = 0; idx < TZMAP_SIZE; ++idx) { - if (!wcscasecmp (keyname, tzmap[idx].win_tzkey)) + if (!wcscasecmp (tz.TimeZoneKeyName, tzmap[idx].win_tzkey)) { if (gotit < 0) gotit = 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 = gotit;
reply other threads:[~2024-04-03 16:56 UTC|newest] Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20240403165616.2735A38460B2@sourceware.org \ --to=corinna@sourceware.org \ --cc=cygwin-cvs@sourceware.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).