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 <br...@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;