]> git.ipfire.org Git - thirdparty/coreutils.git/commitdiff
(copy_internal): Don't apply the umask in move_mode.
authorJim Meyering <jim@meyering.net>
Sun, 23 May 1999 23:23:55 +0000 (23:23 +0000)
committerJim Meyering <jim@meyering.net>
Sun, 23 May 1999 23:23:55 +0000 (23:23 +0000)
Otherwise, `mv' would not preserve the permissions when copying
between partitions.  Reported by David Godfrey

src/copy.c

index 1a6694ebb85f88f90b504d057d92a917a5b93890..f1242efeaef4708cc3e0613d171b2ccaaafbbf59 100644 (file)
@@ -896,7 +896,13 @@ copy_internal (const char *src_path, const char *dst_path,
   else if ((x->preserve_chmod_bits || new_dst)
           && (x->copy_as_regular || S_ISREG (src_type) || S_ISDIR (src_type)))
     {
-      if (chmod (dst_path, src_mode & x->umask_kill))
+      mode_t dst_mode = src_mode;
+
+      /* Honor the umask for `cp', but not for `mv'.  */
+      if (!x->move_mode)
+       dst_mode &= x->umask_kill;
+
+      if (chmod (dst_path, dst_mode))
        {
          error (0, errno, _("preserving permissions for %s"), dst_path);
          if (x->require_preserve)