public inbox for cygwin-cvs@sourceware.org
help / color / mirror / Atom feed
* [newlib-cygwin/cygwin-3_5-branch] Cygwin: tzset(1): use GetDynamicTimeZoneInformation
@ 2024-04-03 16:56 Corinna Vinschen
0 siblings, 0 replies; only message in thread
From: Corinna Vinschen @ 2024-04-03 16:56 UTC (permalink / raw)
To: cygwin-cvs
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;
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2024-04-03 16:56 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-04-03 16:56 [newlib-cygwin/cygwin-3_5-branch] Cygwin: tzset(1): use GetDynamicTimeZoneInformation Corinna Vinschen
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).