Replaced projects with products/projects.
[oweals/busybox.git] / cp_mv.c
diff --git a/cp_mv.c b/cp_mv.c
index ae35bca19ef5bc54f29b04b29350d6943a1a5a04..b15235a2573cda3375f2dd1f5833bd457411884a 100644 (file)
--- a/cp_mv.c
+++ b/cp_mv.c
@@ -70,6 +70,7 @@ static const char *cp_mv_usage[] =    /* .rodata */
 static int recursiveFlag;
 static int followLinks;
 static int preserveFlag;
+static int forceFlag;
 
 static const char *baseSrcName;
 static int                srcDirFlag;
@@ -89,7 +90,7 @@ static
 void name_too_long__exit (void)
 {
        fprintf(stderr, name_too_long, dz);
-       exit FALSE;
+       exit(FALSE);
 }
 
 static void
@@ -167,7 +168,7 @@ cp_mv_Action(const char *fileName, struct stat *statbuf, void* junk)
                        add_to_ino_dev_hashtable(statbuf, destName);
                }
        }
-       return copyFile(fileName, destName, preserveFlag, followLinks);
+       return copyFile(fileName, destName, preserveFlag, followLinks, forceFlag);
 }
 
 static int
@@ -200,9 +201,9 @@ extern int cp_mv_main(int argc, char **argv)
        argv++;
 
        if (dz_i == is_cp) {
-               recursiveFlag = preserveFlag = FALSE;
+               recursiveFlag = preserveFlag = forceFlag = FALSE;
                followLinks = TRUE;
-               while (**argv == '-') {
+               while (*argv && **argv == '-') {
                        while (*++(*argv)) {
                                switch (**argv) {
                                case 'a':
@@ -220,7 +221,7 @@ extern int cp_mv_main(int argc, char **argv)
                                        recursiveFlag = TRUE;
                                        break;
                                case 'f':
-                                  /* for compatibility; busybox cp/mv always does force */
+                                       forceFlag = TRUE;
                                        break;
                                default:
                                        usage(cp_mv_usage[is_cp]);
@@ -229,10 +230,14 @@ extern int cp_mv_main(int argc, char **argv)
                        argc--;
                        argv++;
                }
+               if (argc < 2) {
+                       usage(cp_mv_usage[dz_i]);
+               }
        } else {                                        /* (dz_i == is_mv) */
                recursiveFlag = preserveFlag = TRUE;
                followLinks = FALSE;
        }
+       
 
        if (strlen(argv[argc - 1]) > BUFSIZ) {
                fprintf(stderr, name_too_long, "cp");
@@ -328,10 +333,9 @@ extern int cp_mv_main(int argc, char **argv)
                if (flags_memo)
                        *(baseDestName + baseDestLen) = '\0';
        }
-// exit_true:
-       exit TRUE;
+       return( TRUE);
  exit_false:
-       exit FALSE;
+       return( FALSE);
 }
 
 /*