* src/copy.c (copy_internal): Use mkfifo as a fallback if mknod fails.
authorBruno Haible <bruno@clisp.org>
Wed, 3 Jan 2007 09:46:25 +0000 (10:46 +0100)
committerJim Meyering <jim@meyering.net>
Wed, 3 Jan 2007 09:46:25 +0000 (10:46 +0100)
Needed on MacOS X.

Signed-off-by: Jim Meyering <jim@meyering.net>
ChangeLog
src/copy.c

index 5e7ed1d..04236c8 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2007-01-03  Bruno Haible  <bruno@clisp.org>
+
+       * src/copy.c (copy_internal): Use mkfifo as a fallback if mknod fails.
+       Needed on MacOS X.
+
 2007-01-02  Paul Eggert  <eggert@cs.ucla.edu>
 
        Now, "ls -FRL" always follows symbolic links on Linux.
index bdb8a1f..d9ad254 100644 (file)
@@ -1686,12 +1686,16 @@ copy_internal (char const *src_name, char const *dst_name,
     {
       /* Use mknod, rather than mkfifo, because the former preserves
         the special mode bits of a fifo on Solaris 10, while mkfifo
-        does not.  */
+        does not.  But fall back on mkfifo, because on some BSD systems,
+        mknod always fails when asked to create a FIFO.  */
       if (mknod (dst_name, src_mode & ~omitted_permissions, 0) != 0)
-       {
-         error (0, errno, _("cannot create fifo %s"), quote (dst_name));
-         goto un_backup;
-       }
+#if HAVE_MKFIFO
+       if (mkfifo (dst_name, src_mode & ~S_IFIFO & ~omitted_permissions) != 0)
+#endif
+         {
+           error (0, errno, _("cannot create fifo %s"), quote (dst_name));
+           goto un_backup;
+         }
     }
   else if (S_ISBLK (src_mode) || S_ISCHR (src_mode) || S_ISSOCK (src_mode))
     {