]> Savannah Git Hosting - gnulib.git/commitdiff
mkfifoat: Work around a Haiku bug.
authorBruno Haible <bruno@clisp.org>
Fri, 30 Aug 2024 23:28:32 +0000 (01:28 +0200)
committerBruno Haible <bruno@clisp.org>
Tue, 17 Sep 2024 13:34:55 +0000 (15:34 +0200)
* lib/mknodat.c (rpl_mknodat): On Haiku, handle S_IFIFO explicitly.
* doc/posix-functions/mknodat.texi: Mention the S_IFIFO flag bug.

ChangeLog
doc/posix-functions/mknodat.texi
lib/mknodat.c

index c86f66ca6041fe391df16b44ff82f7803dbce9fb..9b6d7fc99c606b891830bad69d7fcb01a03b6b6a 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2024-08-30  Bruno Haible  <bruno@clisp.org>
+
+       mkfifoat: Work around a Haiku bug.
+       * lib/mknodat.c (rpl_mknodat): On Haiku, handle S_IFIFO explicitly.
+       * doc/posix-functions/mknodat.texi: Mention the S_IFIFO flag bug.
+
 2024-08-30  Bruno Haible  <bruno@clisp.org>
 
        posix_openpt tests: Fix test failure on Haiku.
index cdcdc8aea56d864211e6c8e0ffcd226ec32674f8..345b03d5dd59b75f3b65d4f9a8dffbe0b1cc75a2 100644 (file)
@@ -16,6 +16,10 @@ But the replacement function is not safe to be used in libraries and is not mult
 This function does not fail when the file name argument ends in a slash
 and (without the slash) names a nonexistent file, on some platforms:
 AIX 7.2.
+@item
+This function does not handle the @code{S_IFIFO} flag on some platforms:
+@c https://dev.haiku-os.org/ticket/19032
+Haiku.
 @end itemize
 
 Portability problems not fixed by Gnulib:
index 66d5b3566f68e8fc3d4e2741f7134e1fd0c46bb4..a31450abab8cd9a73582fcab98a7a77c5b7ac8e6 100644 (file)
@@ -54,6 +54,12 @@ rpl_mknodat (int fd, char const *file, mode_t mode, dev_t dev)
       return -1;
     }
 
+# if defined __HAIKU__
+  /* POSIX requires mknodat to create fifos for non-privileged processes, but
+     on Haiku it fails with ENOTSUP.  */
+  if (S_ISFIFO (mode) && dev == 0)
+    return mkfifo (file, mode & ~S_IFIFO);
+# endif
   return mknodat (fd, file, mode, dev);
 }