summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBruno Haible <bruno@clisp.org>2007-01-03 10:46:25 +0100
committerJim Meyering <jim@meyering.net>2007-01-03 10:46:25 +0100
commit8563b4c0519cee303e9609694b7a36453458cbbd (patch)
treee53cf384fb82676f81798494629a08a6b80edb33 /src
parentf0b5e513d901871a3994349322785ac1882eb873 (diff)
downloadcoreutils-8563b4c0519cee303e9609694b7a36453458cbbd.tar.xz
* src/copy.c (copy_internal): Use mkfifo as a fallback if mknod fails.
Needed on MacOS X. Signed-off-by: Jim Meyering <jim@meyering.net>
Diffstat (limited to 'src')
-rw-r--r--src/copy.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/src/copy.c b/src/copy.c
index bdb8a1f2f..d9ad254a9 100644
--- a/src/copy.c
+++ b/src/copy.c
@@ -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))
{