diff options
Diffstat (limited to 'contrib/cpio/copyin.c')
-rw-r--r-- | contrib/cpio/copyin.c | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/contrib/cpio/copyin.c b/contrib/cpio/copyin.c index bfb9536..6f2db39 100644 --- a/contrib/cpio/copyin.c +++ b/contrib/cpio/copyin.c @@ -928,13 +928,24 @@ process_copy_in () break; } - res = mknod (file_hdr.c_name, file_hdr.c_mode, - makedev (file_hdr.c_rdev_maj, file_hdr.c_rdev_min)); +#ifdef CP_IFIFO + if ((file_hdr.c_mode & CP_IFMT) == CP_IFIFO) + res = mkfifo (file_hdr.c_name, file_hdr.c_mode); + else +#endif + res = mknod (file_hdr.c_name, file_hdr.c_mode, + makedev (file_hdr.c_rdev_maj, file_hdr.c_rdev_min)); if (res < 0 && create_dir_flag) { create_all_directories (file_hdr.c_name); - res = mknod (file_hdr.c_name, file_hdr.c_mode, - makedev (file_hdr.c_rdev_maj, file_hdr.c_rdev_min)); +#ifdef CP_IFIFO + if ((file_hdr.c_mode & CP_IFMT) == CP_IFIFO) + res = mkfifo (file_hdr.c_name, file_hdr.c_mode); + else +#endif + res = mknod (file_hdr.c_name, file_hdr.c_mode, + makedev (file_hdr.c_rdev_maj, + file_hdr.c_rdev_min)); } if (res < 0) { |