diff options
author | bde <bde@FreeBSD.org> | 1997-07-13 14:07:48 +0000 |
---|---|---|
committer | bde <bde@FreeBSD.org> | 1997-07-13 14:07:48 +0000 |
commit | 84834b817c79cd8d5bca169e7ce1d3d1a7c24af8 (patch) | |
tree | 150ad5b0b88348055a439885450027e7ccb699de | |
parent | 20d1b8751ab1ce5d59c580d03a8c47b69f382d6e (diff) | |
download | FreeBSD-src-84834b817c79cd8d5bca169e7ce1d3d1a7c24af8.zip FreeBSD-src-84834b817c79cd8d5bca169e7ce1d3d1a7c24af8.tar.gz |
Create fifos using mkfifo() instead of attempting to create them using
mknod().
-rw-r--r-- | contrib/cpio/copyin.c | 19 | ||||
-rw-r--r-- | contrib/cpio/copypass.c | 18 |
2 files changed, 29 insertions, 8 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) { diff --git a/contrib/cpio/copypass.c b/contrib/cpio/copypass.c index dde43d5..9c27ac5 100644 --- a/contrib/cpio/copypass.c +++ b/contrib/cpio/copypass.c @@ -295,13 +295,23 @@ process_copy_pass () if (link_res < 0) { - res = mknod (output_name.ds_string, in_file_stat.st_mode, - in_file_stat.st_rdev); +#ifdef S_ISFIFO + if (S_ISFIFO (in_file_stat.st_mode)) + res = mkfifo (output_name.ds_string, in_file_stat.st_mode); + else +#endif + res = mknod (output_name.ds_string, in_file_stat.st_mode, + in_file_stat.st_rdev); if (res < 0 && create_dir_flag) { create_all_directories (output_name.ds_string); - res = mknod (output_name.ds_string, in_file_stat.st_mode, - in_file_stat.st_rdev); +#ifdef S_ISFIFO + if (S_ISFIFO (in_file_stat.st_mode)) + res = mkfifo (output_name.ds_string, in_file_stat.st_mode); + else +#endif + res = mknod (output_name.ds_string, in_file_stat.st_mode, + in_file_stat.st_rdev); } if (res < 0) { |