From: Bruno Haible Date: Fri, 30 Aug 2024 23:28:32 +0000 (+0200) Subject: mkfifoat: Work around a Haiku bug. X-Git-Url: https://gitweb.git.savannah.gnu.org/gitweb/?a=commitdiff_plain;h=1bbc31a796e930ad074c2a09687a14e720972e26;p=gnulib.git 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. --- diff --git a/ChangeLog b/ChangeLog index c86f66ca60..9b6d7fc99c 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 posix_openpt tests: Fix test failure on Haiku. diff --git a/doc/posix-functions/mknodat.texi b/doc/posix-functions/mknodat.texi index cdcdc8aea5..345b03d5dd 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); }