From 036274f8c1a068035c0028020b6e4d738971f6e1 Mon Sep 17 00:00:00 2001
From: Paul Eggert <eggert@cs.ucla.edu>
Date: Tue, 21 Oct 2025 08:39:40 -0700
Subject: [TEST] Test patch - please try out on MS-Windows

* zic.c (mode_t) [HAVE_DIRECT_H]: Now a typedef, not a macro.
(mkdir) [HAVE_DIRECT_H]: Define unconditionally.
(mkdir) [!HAVE_POSIX_DECLS]: Remove recently-added decl.
(current_umask): New var.
(main): Set it.
---
 zic.c | 16 +++++++---------
 1 file changed, 7 insertions(+), 9 deletions(-)

diff --git a/zic.c b/zic.c
index 67bcaa43..748dabce 100644
--- a/zic.c
+++ b/zic.c
@@ -48,12 +48,8 @@ enum { FORMAT_LEN_GROWTH_BOUND = 5 };
 #ifdef HAVE_DIRECT_H
 # include <direct.h>
 # include <io.h>
-# ifndef mode_t
-#  define mode_t int
-# endif
-# ifndef mkdir
-#  define mkdir(name, mode) _mkdir(name)
-# endif
+typedef int mode_t;
+# define mkdir(name, mode) _mkdir(name)
 #endif
 
 #ifndef HAVE_GETRANDOM
@@ -182,9 +178,6 @@ struct zone {
 extern int	getopt(int argc, char * const argv[],
 			const char * options);
 extern int	link(const char * target, const char * linkname);
-# ifndef mkdir
-extern int	mkdir(char const *, mode_t);
-# endif
 extern char *	optarg;
 extern int	optind;
 #endif
@@ -1017,6 +1010,8 @@ want_bloat(void)
 # define ZIC_BLOAT_DEFAULT "slim"
 #endif
 
+mode_t current_umask;
+
 int
 main(int argc, char **argv)
 {
@@ -1024,6 +1019,9 @@ main(int argc, char **argv)
 	register ptrdiff_t i, j;
 	bool timerange_given = false;
 
+	current_umask = umask(0);
+	umask(current_umask);
+
 #if HAVE_GETTEXT
 	setlocale(LC_ALL, "");
 # ifdef TZ_DOMAINDIR
-- 
2.51.0

