- spelling
[oweals/busybox.git] / coreutils / mv.c
index c28d0500eef00af8599edbe6e64fbb8633c5fb35..02252c7ef114942c0d311f01081edacd1edf35c1 100644 (file)
 #include <dirent.h>
 #include <errno.h>
 #include <stdlib.h>
-#include <getopt.h>
+#include <getopt.h> /* struct option */
 #include "busybox.h"
 #include "libcoreutils/coreutils.h"
 
+#if ENABLE_FEATURE_MV_LONG_OPTIONS
 static const struct option mv_long_options[] = {
        { "interactive", 0, NULL, 'i' },
        { "force", 0, NULL, 'f' },
        { 0, 0, 0, 0 }
 };
+#endif
 
 #define OPT_FILEUTILS_FORCE       1
 #define OPT_FILEUTILS_INTERACTIVE 2
 
 static const char fmt[] = "cannot overwrite %sdirectory with %sdirectory";
 
-extern int mv_main(int argc, char **argv)
+int mv_main(int argc, char **argv)
 {
        struct stat dest_stat;
        const char *last;
@@ -55,8 +57,10 @@ extern int mv_main(int argc, char **argv)
        int dest_exists;
        int status = 0;
 
+#if ENABLE_FEATURE_MV_LONG_OPTIONS
        bb_applet_long_options = mv_long_options;
-       bb_opt_complementaly = "f-i:i-f";
+#endif
+       bb_opt_complementally = "f-i:i-f";
        flags = bb_getopt_ulflags(argc, argv, "fi");
        if (optind + 2 > argc) {
                bb_show_usage();
@@ -75,7 +79,7 @@ extern int mv_main(int argc, char **argv)
                        goto DO_MOVE;
                }
        }
-       
+
        do {
                dest = concat_path_file(last, bb_get_last_path_component(*argv));
 
@@ -84,7 +88,7 @@ extern int mv_main(int argc, char **argv)
                }
 
 DO_MOVE:
-               
+
                if (dest_exists && !(flags & OPT_FILEUTILS_FORCE) &&
                        ((access(dest, W_OK) < 0 && isatty(0)) ||
                        (flags & OPT_FILEUTILS_INTERACTIVE))) {
@@ -99,10 +103,10 @@ DO_MOVE:
                        struct stat source_stat;
                        int source_exists;
 
-                       if (errno != EXDEV) {
+                       if (errno != EXDEV ||
+                               (source_exists = cp_mv_stat(*argv, &source_stat)) < 1) {
                                bb_perror_msg("unable to rename `%s'", *argv);
-                       }
-                       else if ((source_exists = cp_mv_stat(*argv, &source_stat)) >= 0) {
+                       } else {
                                if (dest_exists) {
                                        if (dest_exists == 3) {
                                                if (source_exists != 3) {
@@ -119,7 +123,7 @@ DO_MOVE:
                                                bb_perror_msg("cannot remove `%s'", dest);
                                                goto RET_1;
                                        }
-                               }                       
+                               }
                                if ((copy_file(*argv, dest,
                                        FILEUTILS_RECUR | FILEUTILS_PRESERVE_STATUS) >= 0) &&
                                        (remove_file(*argv, FILEUTILS_RECUR | FILEUTILS_FORCE) >= 0)) {
@@ -132,7 +136,7 @@ RET_1:
 RET_0:
                if (dest != last) {
                        free((void *) dest);
-               }       
+               }
        } while (*++argv != last);
 
        return (status);