]> Savannah Git Hosting - gnulib.git/commitdiff
getumask: Make it work on native Windows.
authorBruno Haible <bruno@clisp.org>
Thu, 20 Apr 2023 21:21:42 +0000 (23:21 +0200)
committerBruno Haible <bruno@clisp.org>
Fri, 21 Apr 2023 15:32:02 +0000 (17:32 +0200)
* 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.

ChangeLog
lib/getumask.c
tests/test-getumask.c

index 88e8748c978c706c379dc48c8b267af03144587c..a0d37b10ecae27783fb974959bcd8d72b94659a8 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+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.
index 066d6cd361e7ec49434c6c8036967fafb95583f7..e979f9b874e5414e301c90f4792d4dc972a913f2 100644 (file)
@@ -1,5 +1,5 @@
 /* Retrieve the umask of the process (multithread-safe).
-   Copyright (C) 2020-2022 Free Software Foundation, Inc.
+   Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -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);
index 552b5c9a9c1455739f632fa1f8d622163d18f47e..ab1e48ecd9708452a1de04c3ea997fd541734e44 100644 (file)
@@ -1,5 +1,5 @@
 /* Test of retrieving the umask of the process.
-   Copyright (C) 2020-2022 Free Software Foundation, Inc.
+   Copyright (C) 2020-2023 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -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)
 {