copy_file: handle "cp /dev/foo file" (almost) compatibly to coreutils.

(almost because we do not copy mode, which is probably wasn't intended).
+61 bytes.
This commit is contained in:
Denis Vlasenko
2008-03-28 17:49:31 +00:00
parent a38ba59cc3
commit b9ad75fa60
6 changed files with 63 additions and 26 deletions

View File

@@ -71,7 +71,8 @@ int mv_main(int argc, char **argv)
}
DO_MOVE:
if (dest_exists && !(flags & OPT_FILEUTILS_FORCE)
if (dest_exists
&& !(flags & OPT_FILEUTILS_FORCE)
&& ((access(dest, W_OK) < 0 && isatty(0))
|| (flags & OPT_FILEUTILS_INTERACTIVE))
) {
@@ -108,6 +109,9 @@ int mv_main(int argc, char **argv)
goto RET_1;
}
}
/* FILEUTILS_RECUR also prevents nasties like
* "read from device and write contents to dst"
* instead of "create same device node" */
copy_flag = FILEUTILS_RECUR | FILEUTILS_PRESERVE_STATUS;
#if ENABLE_SELINUX
copy_flag |= FILEUTILS_PRESERVE_SECURITY_CONTEXT;