aboutsummaryrefslogtreecommitdiff
path: root/coreutils
diff options
context:
space:
mode:
authorEric Andersen <andersen@codepoet.org>1999-10-18 19:02:32 +0000
committerEric Andersen <andersen@codepoet.org>1999-10-18 19:02:32 +0000
commitbed30e97005aca748a44806399c646633038daa8 (patch)
treecdba32234f059656b0279b324ae28c742692cd0c /coreutils
parent9b5871888989b16f94cbba5dd304ac444def3afd (diff)
downloadbusybox-w32-bed30e97005aca748a44806399c646633038daa8.tar.gz
busybox-w32-bed30e97005aca748a44806399c646633038daa8.tar.bz2
busybox-w32-bed30e97005aca748a44806399c646633038daa8.zip
More fixes
Diffstat (limited to 'coreutils')
-rw-r--r--coreutils/cp.c10
-rw-r--r--coreutils/ls.c2
-rw-r--r--coreutils/mv.c76
-rw-r--r--coreutils/rm.c105
-rw-r--r--coreutils/sync.c11
5 files changed, 133 insertions, 71 deletions
diff --git a/coreutils/cp.c b/coreutils/cp.c
index 4016fc760..c5e34d333 100644
--- a/coreutils/cp.c
+++ b/coreutils/cp.c
@@ -48,7 +48,7 @@ static int fileAction(const char *fileName, struct stat* statbuf)
48{ 48{
49 char newdestName[NAME_MAX]; 49 char newdestName[NAME_MAX];
50 strcpy(newdestName, destName); 50 strcpy(newdestName, destName);
51 if (dirFlag==TRUE && newdestName[strlen(newdestName)-1]!= '/' ) { 51 if (dirFlag==TRUE) {
52 strcat(newdestName, "/"); 52 strcat(newdestName, "/");
53 if ( skipName != NULL) 53 if ( skipName != NULL)
54 strcat(newdestName, strstr(fileName, skipName)); 54 strcat(newdestName, strstr(fileName, skipName));
@@ -104,10 +104,12 @@ extern int cp_main(int argc, char **argv)
104 while (argc-- > 1) { 104 while (argc-- > 1) {
105 srcName = *(argv++); 105 srcName = *(argv++);
106 skipName = strrchr(srcName, '/'); 106 skipName = strrchr(srcName, '/');
107 if (skipName) skipName++; 107 if (skipName)
108 if (recursiveAction(srcName, recursiveFlag, followLinks, 108 skipName++;
109 fileAction, fileAction) == FALSE) 109 if (recursiveAction(srcName, recursiveFlag, followLinks, FALSE,
110 fileAction, fileAction) == FALSE) {
110 exit( FALSE); 111 exit( FALSE);
112 }
111 } 113 }
112 exit( TRUE); 114 exit( TRUE);
113} 115}
diff --git a/coreutils/ls.c b/coreutils/ls.c
index 50b983e24..2e3d50e9f 100644
--- a/coreutils/ls.c
+++ b/coreutils/ls.c
@@ -68,7 +68,7 @@ static int dirAction(const char *fileName)
68 exit(FALSE); 68 exit(FALSE);
69 } 69 }
70 while ((entry = readdir(dir)) != NULL) { 70 while ((entry = readdir(dir)) != NULL) {
71 recursiveAction( entry->d_name, recursiveFlag, dereferenceFlag, fileAction, dirAction); 71 recursiveAction( entry->d_name, recursiveFlag, dereferenceFlag, FALSE, fileAction, dirAction);
72 } 72 }
73 return( TRUE); 73 return( TRUE);
74} 74}
diff --git a/coreutils/mv.c b/coreutils/mv.c
index 10a082210..2a7c8c1f3 100644
--- a/coreutils/mv.c
+++ b/coreutils/mv.c
@@ -21,63 +21,59 @@
21 21
22#include "internal.h" 22#include "internal.h"
23#include <stdio.h> 23#include <stdio.h>
24#include <sys/types.h> 24#include <time.h>
25#include <sys/stat.h>
26#include <fcntl.h>
27#include <utime.h> 25#include <utime.h>
28#include <errno.h> 26#include <dirent.h>
29 27
30const char mv_usage[] = "source-file [source-file ...] destination-file\n"
31 "\n" "\tMove the source files to the destination.\n" "\n";
32 28
29static const char mv_usage[] = "mv SOURCE DEST\n"
30" or: mv SOURCE... DIRECTORY\n"
31"Rename SOURCE to DEST, or move SOURCE(s) to DIRECTORY.\n";
33 32
34 33
35extern int mv_main (int argc, char **argv) 34static const char *srcName;
35static const char *destName;
36static const char *skipName;
37static int dirFlag = FALSE;
38
39
40extern int mv_main(int argc, char **argv)
36{ 41{
37 const char *srcName; 42 char newdestName[NAME_MAX];
38 const char *destName;
39 const char *lastArg;
40 int dirFlag;
41 43
42 if (argc < 3) { 44 if (argc < 3) {
43 fprintf (stderr, "Usage: %s %s", *argv, mv_usage); 45 fprintf(stderr, "Usage: %s", mv_usage);
44 exit (FALSE); 46 exit (FALSE);
45 } 47 }
46 lastArg = argv[argc - 1]; 48 argc--;
49 argv++;
47 50
48 dirFlag = isDirectory (lastArg); 51 destName = argv[argc - 1];
52 dirFlag = isDirectory(destName);
49 53
50 if ((argc > 3) && !dirFlag) { 54 if ((argc > 3) && dirFlag==FALSE) {
51 fprintf (stderr, "%s: not a directory\n", lastArg); 55 fprintf(stderr, "%s: not a directory\n", destName);
52 exit (FALSE); 56 exit (FALSE);
53 } 57 }
54 58
55 while (argc-- > 2) { 59 while (argc-- > 1) {
56 srcName = *(++argv); 60 srcName = *(argv++);
57 61 skipName = strrchr(srcName, '/');
58 if (access (srcName, 0) < 0) { 62 if (skipName)
59 perror (srcName); 63 skipName++;
60 continue; 64 strcpy(newdestName, destName);
65 if (dirFlag==TRUE) {
66 strcat(newdestName, "/");
67 if ( skipName != NULL)
68 strcat(newdestName, strstr(srcName, skipName));
61 } 69 }
62 70 if (copyFile(srcName, newdestName, FALSE, FALSE) == FALSE) {
63 destName = lastArg; 71 exit( FALSE);
64
65 if (dirFlag==TRUE)
66 destName = buildName (destName, srcName);
67
68 if (rename (srcName, destName) >= 0)
69 continue;
70
71 if (errno != EXDEV) {
72 perror (destName);
73 continue;
74 } 72 }
75 73 if (unlink (srcName) < 0) {
76 if (!copyFile (srcName, destName, TRUE, FALSE))
77 continue;
78
79 if (unlink (srcName) < 0)
80 perror (srcName); 74 perror (srcName);
75 exit( FALSE);
76 }
81 } 77 }
82 exit (TRUE); 78 exit( TRUE);
83} 79}
diff --git a/coreutils/rm.c b/coreutils/rm.c
index dc35b0297..477d3af59 100644
--- a/coreutils/rm.c
+++ b/coreutils/rm.c
@@ -1,30 +1,93 @@
1/*
2 * Mini rm implementation for busybox
3 *
4 * Copyright (C) 1998 by Erik Andersen <andersee@debian.org>
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 *
20 */
21
1#include "internal.h" 22#include "internal.h"
2#include <errno.h> 23#include <stdio.h>
24#include <time.h>
25#include <utime.h>
26#include <dirent.h>
27
28static const char* rm_usage = "Usage: rm [OPTION]... FILE...\n"
29"Remove (unlink) the FILE(s).\n\n"
30"\t-f\tremove existing destinations, never prompt\n"
31"\t-r\tremove the contents of directories recursively\n";
32
33
34static int recursiveFlag = FALSE;
35static int forceFlag = FALSE;
36static const char *srcName;
37
3 38
4const char rm_usage[] = "rm [-r] file [file ...]\n" 39static int fileAction(const char *fileName, struct stat* statbuf)
5"\n" 40{
6"\tDelete files.\n" 41 if (unlink( fileName) < 0 ) {
7"\n" 42 perror( fileName);
8"\t-r:\tRecursively remove files and directories.\n"; 43 return ( FALSE);
44 }
45 return ( TRUE);
46}
9 47
10extern int 48static int dirAction(const char *fileName, struct stat* statbuf)
11rm_main(struct FileInfo * i, int argc, char * * argv)
12{ 49{
13 i->processDirectoriesAfterTheirContents = 1; 50 if (rmdir( fileName) < 0 ) {
14 return monadic_main(i, argc, argv); 51 perror( fileName);
52 return ( FALSE);
53 }
54 return ( TRUE);
15} 55}
16 56
17extern int 57extern int rm_main(int argc, char **argv)
18rm_fn(const struct FileInfo * i)
19{ 58{
20 if ( i->recursive 59
21 && !i->isSymbolicLink 60 if (argc < 2) {
22 && (i->stat.st_mode & S_IFMT) == S_IFDIR ) 61 fprintf(stderr, "Usage: %s", rm_usage);
23 return rmdir_fn(i); 62 exit (FALSE);
24 else if ( unlink(i->source) != 0 && errno != ENOENT && !i->force ) { 63 }
25 name_and_error(i->source); 64 argc--;
26 return 1; 65 argv++;
66
67 /* Parse any options */
68 while (**argv == '-') {
69 while (*++(*argv))
70 switch (**argv) {
71 case 'r':
72 recursiveFlag = TRUE;
73 break;
74 case 'f':
75 forceFlag = TRUE;
76 break;
77 default:
78 fprintf(stderr, "Usage: %s\n", rm_usage);
79 exit(FALSE);
80 }
81 argc--;
82 argv++;
83 }
84
85 while (argc-- > 0) {
86 srcName = *(argv++);
87 if (recursiveAction( srcName, recursiveFlag, TRUE, TRUE,
88 fileAction, dirAction) == FALSE) {
89 exit( FALSE);
27 } 90 }
28 else 91 }
29 return 0; 92 exit( TRUE);
30} 93}
diff --git a/coreutils/sync.c b/coreutils/sync.c
index 6fa5b380b..e7aa44585 100644
--- a/coreutils/sync.c
+++ b/coreutils/sync.c
@@ -1,11 +1,12 @@
1#include "internal.h" 1#include "internal.h"
2 2
3const char sync_usage[] = "sync\n"
4"\n"
5"\tWrite all buffered filesystem blocks to disk.\n";
6
7extern int 3extern int
8sync_main(struct FileInfo * i, int argc, char * * argv) 4sync_main(int argc, char * * argv)
9{ 5{
6 if ( **(argv+1) == '-' ) {
7 fprintf(stderr, "Usage: sync\nWrite all buffered filesystem blocks to disk.\n");
8 exit(FALSE);
9 }
10 return sync(); 10 return sync();
11} 11}
12