summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruno Haible <bruno@clisp.org>2023-04-20 23:21:42 +0200
committerBruno Haible <bruno@clisp.org>2023-04-20 23:21:42 +0200
commitdd0a48f50a97ca1185c957b0846e715be7777bcb (patch)
tree196f96c02a3f149e31223a3146aeab16dc428ebd
parent876ad6af66851d4e25bb8475e1cd1ec46680b703 (diff)
downloadgnulib-dd0a48f50a97ca1185c957b0846e715be7777bcb.tar.gz
getumask: Make it work on native Windows.
* lib/getumask.c (getumask): When TMPDIR is unset, try TMP and TEMP. * tests/test-getumask.c (ASSUME_UMASK_CONSTANT): Define to 1 on native Windows.
-rw-r--r--ChangeLog7
-rw-r--r--lib/getumask.c10
-rw-r--r--tests/test-getumask.c5
3 files changed, 22 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index 7856e350c0..5bdc213a32 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,12 @@
2023-04-20 Bruno Haible <bruno@clisp.org>
+ getumask: Make it work on native Windows.
+ * lib/getumask.c (getumask): When TMPDIR is unset, try TMP and TEMP.
+ * tests/test-getumask.c (ASSUME_UMASK_CONSTANT): Define to 1 on native
+ Windows.
+
+2023-04-20 Bruno Haible <bruno@clisp.org>
+
posixtm tests: Fix link error.
* modules/posixtm-tests (Depends-on): Add stpcpy.
diff --git a/lib/getumask.c b/lib/getumask.c
index 203d6dc869..e979f9b874 100644
--- a/lib/getumask.c
+++ b/lib/getumask.c
@@ -106,6 +106,16 @@ getumask (void)
{
/* Create a temporary file and inspect its access permissions. */
const char *tmpdir = getenv ("TMPDIR");
+# if defined _WIN32 && !defined __CYGWIN__
+ if (tmpdir == NULL || *tmpdir == '\0')
+ {
+ /* On native Windows, TMPDIR is typically not set, and /tmp does not
+ exist. $TMP and $TEMP can be used instead. */
+ tmpdir = getenv ("TMP");
+ if (tmpdir == NULL || *tmpdir == '\0')
+ tmpdir = getenv ("TEMP");
+ }
+# endif
if (tmpdir == NULL || *tmpdir == '\0')
tmpdir = "/tmp";
size_t tmpdir_length = strlen (tmpdir);
diff --git a/tests/test-getumask.c b/tests/test-getumask.c
index 6ee50836bc..ab1e48ecd9 100644
--- a/tests/test-getumask.c
+++ b/tests/test-getumask.c
@@ -25,6 +25,11 @@ SIGNATURE_CHECK (getumask, mode_t, (void));
#include "macros.h"
+#if defined _WIN32 && !defined __CYGWIN__
+/* On native Windows, getumask() always returns 0111. */
+# define ASSUME_UMASK_CONSTANT 1
+#endif
+
int
main (void)
{