]> Savannah Git Hosting - gnulib.git/commitdiff
supersede: Avoid a failure when writing to /dev/null in Solaris zones.
authorBruno Haible <bruno@clisp.org>
Mon, 12 Sep 2022 08:49:25 +0000 (10:49 +0200)
committerBruno Haible <bruno@clisp.org>
Mon, 12 Sep 2022 08:53:06 +0000 (10:53 +0200)
* lib/supersede.c (open_supersede): Treat EACCES (seen on Solaris 11.3)
like EINVAL (seen on Illumos).

ChangeLog
lib/supersede.c

index b7eac1b3e33610a4ba8ed4b873a94ffa7dc65b4e..0a21f33a293f902735ccbe4bef7f767b2b8671f2 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2022-09-12  Bruno Haible  <bruno@clisp.org>
+
+       supersede: Avoid a failure when writing to /dev/null in Solaris zones.
+       * lib/supersede.c (open_supersede): Treat EACCES (seen on Solaris 11.3)
+       like EINVAL (seen on Illumos).
+
 2022-09-10  Bruno Haible  <bruno@clisp.org>
 
        pipe-filter-gi: Fix test failure on native Windows.
index 898c565ade2990b4e4e056c560434109fc283287..692d216bb605633b3571e4919894cb58c9208f8a 100644 (file)
@@ -83,9 +83,12 @@ open_supersede (const char *filename, int flags, mode_t mode,
   /* Extra flags for existing devices.  */
   int extra_flags =
     #if defined __sun || (defined _WIN32 && !defined __CYGWIN__)
-    /* open ("/dev/null", O_TRUNC | O_WRONLY) fails with error EINVAL on Solaris
-       zones.  See <https://www.illumos.org/issues/13035>.
-       Likewise for open ("NUL", O_TRUNC | O_RDWR) on native Windows.
+    /* open ("/dev/null", O_TRUNC | O_WRONLY) fails on Solaris zones:
+         - with error EINVAL on Illumos, see
+           <https://www.illumos.org/issues/13035>,
+         - with error EACCES on Solaris 11.3.
+       Likewise, open ("NUL", O_TRUNC | O_RDWR) fails with error EINVAL on
+       native Windows.
        As a workaround, add the O_CREAT flag, although it ought not to be
        necessary.  */
     O_CREAT;
@@ -204,7 +207,7 @@ open_supersede (const char *filename, int flags, mode_t mode,
             }
           #if defined __sun || (defined _WIN32 && !defined __CYGWIN__)
           /* See the comment regarding extra_flags, above.  */
-          else if (errno == EINVAL)
+          else if (errno == EINVAL || errno == EACCES)
             {
               struct stat statbuf;