aboutsummaryrefslogtreecommitdiff
path: root/mv.c
diff options
context:
space:
mode:
authorerik <erik@69ca8d6d-28ef-0310-b511-8ec308f3f277>1999-12-29 02:36:29 +0000
committererik <erik@69ca8d6d-28ef-0310-b511-8ec308f3f277>1999-12-29 02:36:29 +0000
commitb075e176c84bb3a5518bbabc5172212886a763b5 (patch)
tree0eb9f4d1d08bde592fc79ef034990fd5c0788e25 /mv.c
parent44f4e93332fd720f2962fc4189a710c30a5cb7f6 (diff)
downloadbusybox-w32-b075e176c84bb3a5518bbabc5172212886a763b5.tar.gz
busybox-w32-b075e176c84bb3a5518bbabc5172212886a763b5.tar.bz2
busybox-w32-b075e176c84bb3a5518bbabc5172212886a763b5.zip
Fixed mv so it now does the right thing (same method used in cp). Removed
some cruft from cp. -Erik git-svn-id: svn://busybox.net/trunk/busybox@268 69ca8d6d-28ef-0310-b511-8ec308f3f277
Diffstat (limited to 'mv.c')
-rw-r--r--mv.c82
1 files changed, 41 insertions, 41 deletions
diff --git a/mv.c b/mv.c
index d0f346196..92c40c9b7 100644
--- a/mv.c
+++ b/mv.c
@@ -27,7 +27,6 @@
27#include <utime.h> 27#include <utime.h>
28#include <dirent.h> 28#include <dirent.h>
29 29
30
31static const char mv_usage[] = "mv SOURCE DEST\n" 30static const char mv_usage[] = "mv SOURCE DEST\n"
32" or: mv SOURCE... DIRECTORY\n\n" 31" or: mv SOURCE... DIRECTORY\n\n"
33"Rename SOURCE to DEST, or move SOURCE(s) to DIRECTORY.\n"; 32"Rename SOURCE to DEST, or move SOURCE(s) to DIRECTORY.\n";
@@ -35,26 +34,49 @@ static const char mv_usage[] = "mv SOURCE DEST\n"
35 34
36static const char *srcName; 35static const char *srcName;
37static const char *destName; 36static const char *destName;
38static int dirFlag = FALSE; 37static int destDirFlag = FALSE;
38static int srcDirFlag = FALSE;
39 39
40static int fileAction(const char *fileName, struct stat* statbuf) 40static int fileAction(const char *fileName, struct stat* statbuf)
41{ 41{
42 char newdestName[NAME_MAX]; 42 char newdestName[NAME_MAX];
43 43
44 fprintf(stderr, "srcName='%s' destName='%s'\n", srcName, destName);
45 strcpy(newdestName, destName); 44 strcpy(newdestName, destName);
46 strcat(newdestName, "/"); 45 if ( srcDirFlag == TRUE ) {
47 strcat(newdestName, strstr(fileName, fileName)); 46 strcat(newdestName, strstr(fileName, srcName) + strlen(srcName));
48 fprintf(stderr, "newdestName='%s'\n", newdestName); 47 }
48
49 if (destDirFlag==TRUE && srcDirFlag == FALSE) {
50 if (newdestName[strlen(newdestName)-1] != '/' ) {
51 strcat(newdestName, "/");
52 }
53 strcat(newdestName, srcName);
54 }
55
49 return (copyFile(fileName, newdestName, TRUE, TRUE)); 56 return (copyFile(fileName, newdestName, TRUE, TRUE));
50} 57}
51 58
59static int rmfileAction(const char *fileName, struct stat* statbuf)
60{
61 if (unlink( fileName) < 0 ) {
62 perror( fileName);
63 return ( FALSE);
64 }
65 return ( TRUE);
66}
52 67
53extern int mv_main(int argc, char **argv) 68static int rmdirAction(const char *fileName, struct stat* statbuf)
54{ 69{
55 char newdestName[NAME_MAX]; 70 if (rmdir( fileName) < 0 ) {
56 char *skipName; 71 perror( fileName);
72 return ( FALSE);
73 }
74 return ( TRUE);
75}
57 76
77
78extern int mv_main(int argc, char **argv)
79{
58 if (argc < 3) { 80 if (argc < 3) {
59 usage (mv_usage); 81 usage (mv_usage);
60 } 82 }
@@ -62,45 +84,23 @@ extern int mv_main(int argc, char **argv)
62 argv++; 84 argv++;
63 85
64 destName = argv[argc - 1]; 86 destName = argv[argc - 1];
65 dirFlag = isDirectory(destName); 87 destDirFlag = isDirectory(destName);
66 88
67 if ((argc > 3) && dirFlag==FALSE) { 89 if ((argc > 3) && destDirFlag==FALSE) {
68 fprintf(stderr, "%s: not a directory\n", destName); 90 fprintf(stderr, "%s: not a directory\n", destName);
69 exit (FALSE); 91 exit (FALSE);
70 } 92 }
71 93
72 while (argc-- > 1) { 94 while (argc-- > 1) {
73 srcName = *(argv++); 95 srcName = *(argv++);
74 skipName = strrchr(srcName, '/'); 96 srcDirFlag = isDirectory(srcName);
75 if (skipName) 97 if (recursiveAction(srcName, TRUE, TRUE, FALSE,
76 skipName++; 98 fileAction, fileAction) == FALSE) {
77 strcpy(newdestName, destName); 99 exit( FALSE);
78 if (dirFlag==TRUE) {
79 strcat(newdestName, "/");
80 if ( skipName != NULL)
81 strcat(newdestName, strstr(srcName, skipName));
82 else
83 strcat(newdestName, srcName);
84 } 100 }
85 if (isDirectory(srcName)==TRUE && newdestName[strlen(newdestName)] != '/') { 101 if (recursiveAction(srcName, TRUE, TRUE, TRUE,
86 strcat(newdestName, "/"); 102 rmfileAction, rmdirAction) == FALSE) {
87 createPath(newdestName, 0777); 103 exit( FALSE);
88 fprintf(stderr, "srcName = '%s'\n", srcName);
89 fprintf(stderr, "newdestName = '%s'\n", newdestName);
90 if (recursiveAction(srcName, TRUE, TRUE, FALSE,
91 fileAction, fileAction) == FALSE)
92 {
93 exit( FALSE);
94 }
95 exit( TRUE);
96 } else {
97 if (copyFile(srcName, newdestName, FALSE, FALSE) == FALSE) {
98 exit( FALSE);
99 }
100 if (unlink (srcName) < 0) {
101 perror (srcName);
102 exit( FALSE);
103 }
104 } 104 }
105 } 105 }
106 exit( TRUE); 106 exit( TRUE);