]> git.ipfire.org Git - thirdparty/coreutils.git/commitdiff
cp: simplify overwrite logic
authorPaul Eggert <eggert@cs.ucla.edu>
Tue, 25 Mar 2014 06:17:02 +0000 (23:17 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Tue, 25 Mar 2014 06:18:41 +0000 (23:18 -0700)
* src/copy.c (overwrite_ok): Rename from overwrite_prompt.  Invoke
yesno instead of having the caller do it; that's cleaner.  Return
bool, not void.  All callers changed.

src/copy.c

index bd4df05fb218a1e31cee40e33a9ba826dd1ea0e4..71813dc40700f713049d12a03b03ea8434fdcdf6 100644 (file)
@@ -1565,9 +1565,9 @@ writable_destination (char const *file, mode_t mode)
           || euidaccess (file, W_OK) == 0);
 }
 
-static void
-overwrite_prompt (struct cp_options const *x, char const *dst_name,
-                  struct stat const *dst_sb)
+static bool
+overwrite_ok (struct cp_options const *x, char const *dst_name,
+              struct stat const *dst_sb)
 {
   if (! writable_destination (dst_name, dst_sb->st_mode))
     {
@@ -1588,6 +1588,8 @@ overwrite_prompt (struct cp_options const *x, char const *dst_name,
       fprintf (stderr, _("%s: overwrite %s? "),
                program_name, quote (dst_name));
     }
+
+  return yesno ();
 }
 
 /* Initialize the hash table implementing a set of F_triple entries
@@ -1642,8 +1644,7 @@ abandon_move (const struct cp_options *x,
                || (x->interactive == I_UNSPECIFIED
                    && x->stdin_tty
                    && ! writable_destination (dst_name, dst_sb->st_mode)))
-              && (overwrite_prompt (x, dst_name, dst_sb), 1)
-              && ! yesno ()));
+              && ! overwrite_ok (x, dst_name, dst_sb)));
 }
 
 /* Print --verbose output on standard output, e.g. 'new' -> 'old'.
@@ -1917,8 +1918,7 @@ copy_internal (char const *src_name, char const *dst_name,
               if (! S_ISDIR (src_mode)
                   && (x->interactive == I_ALWAYS_NO
                       || (x->interactive == I_ASK_USER
-                          && (overwrite_prompt (x, dst_name, &dst_sb), 1)
-                          && ! yesno ())))
+                          && ! overwrite_ok (x, dst_name, &dst_sb))))
                 return true;
             }