From bed30e97005aca748a44806399c646633038daa8 Mon Sep 17 00:00:00 2001 From: Eric Andersen Date: Mon, 18 Oct 1999 19:02:32 +0000 Subject: More fixes --- mv.c | 76 ++++++++++++++++++++++++++++++++------------------------------------ 1 file changed, 36 insertions(+), 40 deletions(-) (limited to 'mv.c') diff --git a/mv.c b/mv.c index 10a082210..2a7c8c1f3 100644 --- a/mv.c +++ b/mv.c @@ -21,63 +21,59 @@ #include "internal.h" #include -#include -#include -#include +#include #include -#include +#include -const char mv_usage[] = "source-file [source-file ...] destination-file\n" - "\n" "\tMove the source files to the destination.\n" "\n"; +static const char mv_usage[] = "mv SOURCE DEST\n" +" or: mv SOURCE... DIRECTORY\n" +"Rename SOURCE to DEST, or move SOURCE(s) to DIRECTORY.\n"; -extern int mv_main (int argc, char **argv) +static const char *srcName; +static const char *destName; +static const char *skipName; +static int dirFlag = FALSE; + + +extern int mv_main(int argc, char **argv) { - const char *srcName; - const char *destName; - const char *lastArg; - int dirFlag; + char newdestName[NAME_MAX]; if (argc < 3) { - fprintf (stderr, "Usage: %s %s", *argv, mv_usage); + fprintf(stderr, "Usage: %s", mv_usage); exit (FALSE); } - lastArg = argv[argc - 1]; + argc--; + argv++; - dirFlag = isDirectory (lastArg); + destName = argv[argc - 1]; + dirFlag = isDirectory(destName); - if ((argc > 3) && !dirFlag) { - fprintf (stderr, "%s: not a directory\n", lastArg); + if ((argc > 3) && dirFlag==FALSE) { + fprintf(stderr, "%s: not a directory\n", destName); exit (FALSE); } - while (argc-- > 2) { - srcName = *(++argv); - - if (access (srcName, 0) < 0) { - perror (srcName); - continue; + while (argc-- > 1) { + srcName = *(argv++); + skipName = strrchr(srcName, '/'); + if (skipName) + skipName++; + strcpy(newdestName, destName); + if (dirFlag==TRUE) { + strcat(newdestName, "/"); + if ( skipName != NULL) + strcat(newdestName, strstr(srcName, skipName)); } - - destName = lastArg; - - if (dirFlag==TRUE) - destName = buildName (destName, srcName); - - if (rename (srcName, destName) >= 0) - continue; - - if (errno != EXDEV) { - perror (destName); - continue; + if (copyFile(srcName, newdestName, FALSE, FALSE) == FALSE) { + exit( FALSE); } - - if (!copyFile (srcName, destName, TRUE, FALSE)) - continue; - - if (unlink (srcName) < 0) + if (unlink (srcName) < 0) { perror (srcName); + exit( FALSE); + } } - exit (TRUE); + exit( TRUE); } -- cgit v1.2.3