bug-gnulib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

supersede: Avoid a failure when writing to /dev/null in Solaris zones


From: Bruno Haible
Subject: supersede: Avoid a failure when writing to /dev/null in Solaris zones
Date: Mon, 12 Sep 2022 10:51:34 +0200

On Solaris 11.3 (gcc211.fsffrance.org), I'm seeing a test-supersede failure.
It's much like the one seen on Solaris/Illumos and fixed through
<https://lists.gnu.org/archive/html/bug-gnulib/2020-08/msg00206.html>.
The only difference is that here, the open() call fails with error EACCES,
not EINVAL.

This patch fixes the test failure.


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).

diff --git a/lib/supersede.c b/lib/supersede.c
index a72c4f40e8..7fbd619fde 100644
--- a/lib/supersede.c
+++ b/lib/supersede.c
@@ -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;
 






reply via email to

[Prev in Thread] Current Thread [Next in Thread]