From 242a8338f707549adf05dac628eecccfe52b4634 Mon Sep 17 00:00:00 2001
From: Paul Eggert <eggert@cs.ucla.edu>
Date: Sat, 18 Oct 2025 10:20:07 -0700
Subject: [PATCH 2/3] Fix mode_t issues on MS-Windows

Problem reported by Manuela Friedrich in:
https://lists.iana.org/hyperkitty/list/tz@iana.org/thread/2ASUTQ6MXJJFXDYQPWHWA2SN2E2HOWZX/
* zic.c (mode_t, mkdir, umask) [HAVE_DIRECT_H]:
New macros, if not already macros.
(umask) [!HAVE_POSIX_DECLS]: Declare if not a macro, ignoring S_IWGRP.
---
 zic.c | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

diff --git a/zic.c b/zic.c
index bcaa27cb..2cde34c6 100644
--- a/zic.c
+++ b/zic.c
@@ -44,8 +44,15 @@ enum { FORMAT_LEN_GROWTH_BOUND = 5 };
 #ifdef HAVE_DIRECT_H
 # include <direct.h>
 # include <io.h>
-# undef mkdir
-# define mkdir(name, mode) _mkdir(name)
+# ifndef mode_t
+#  define mode_t int
+# endif
+# ifndef mkdir
+#  define mkdir(name, mode) _mkdir(name)
+# endif
+# ifndef umask
+#  define umask(mode) _umask(mode)
+# endif
 #endif
 
 #ifndef HAVE_GETRANDOM
@@ -151,7 +158,7 @@ extern int	link(const char * target, const char * linkname);
 # ifndef mkdir
 extern int	mkdir(char const *, mode_t);
 # endif
-# ifdef S_IWGRP
+# ifndef umask
 extern mode_t	umask(mode_t);
 # endif
 extern char *	optarg;
-- 
2.48.1

