From 7a26219da40972eefb21661bc4a1cd9d8e2f58e1 Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Sat, 31 Aug 2024 01:28:32 +0200 Subject: [PATCH] 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. --- ChangeLog | 6 ++++++ doc/posix-functions/mknodat.texi | 4 ++++ lib/mknodat.c | 6 ++++++ 3 files changed, 16 insertions(+) diff --git a/ChangeLog b/ChangeLog index 7ee0240bcd..0f90cc212f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2024-08-30 Bruno Haible + + 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 doc: Mention an mknod bug. diff --git a/doc/posix-functions/mknodat.texi b/doc/posix-functions/mknodat.texi index 53f695db68..a837f89b53 100644 --- a/doc/posix-functions/mknodat.texi +++ b/doc/posix-functions/mknodat.texi @@ -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: diff --git a/lib/mknodat.c b/lib/mknodat.c index 66d5b3566f..a31450abab 100644 --- a/lib/mknodat.c +++ b/lib/mknodat.c @@ -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); } -- 2.39.5