diff options
| author | Eric Andersen <andersen@codepoet.org> | 1999-10-18 19:02:32 +0000 |
|---|---|---|
| committer | Eric Andersen <andersen@codepoet.org> | 1999-10-18 19:02:32 +0000 |
| commit | bed30e97005aca748a44806399c646633038daa8 (patch) | |
| tree | cdba32234f059656b0279b324ae28c742692cd0c /coreutils | |
| parent | 9b5871888989b16f94cbba5dd304ac444def3afd (diff) | |
| download | busybox-w32-bed30e97005aca748a44806399c646633038daa8.tar.gz busybox-w32-bed30e97005aca748a44806399c646633038daa8.tar.bz2 busybox-w32-bed30e97005aca748a44806399c646633038daa8.zip | |
More fixes
Diffstat (limited to 'coreutils')
| -rw-r--r-- | coreutils/cp.c | 10 | ||||
| -rw-r--r-- | coreutils/ls.c | 2 | ||||
| -rw-r--r-- | coreutils/mv.c | 76 | ||||
| -rw-r--r-- | coreutils/rm.c | 105 | ||||
| -rw-r--r-- | coreutils/sync.c | 11 |
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 | ||
| 30 | const char mv_usage[] = "source-file [source-file ...] destination-file\n" | ||
| 31 | "\n" "\tMove the source files to the destination.\n" "\n"; | ||
| 32 | 28 | ||
| 29 | static 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 | ||
| 35 | extern int mv_main (int argc, char **argv) | 34 | static const char *srcName; |
| 35 | static const char *destName; | ||
| 36 | static const char *skipName; | ||
| 37 | static int dirFlag = FALSE; | ||
| 38 | |||
| 39 | |||
| 40 | extern 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 | |||
| 28 | static 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 | |||
| 34 | static int recursiveFlag = FALSE; | ||
| 35 | static int forceFlag = FALSE; | ||
| 36 | static const char *srcName; | ||
| 37 | |||
| 3 | 38 | ||
| 4 | const char rm_usage[] = "rm [-r] file [file ...]\n" | 39 | static 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 | ||
| 10 | extern int | 48 | static int dirAction(const char *fileName, struct stat* statbuf) |
| 11 | rm_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 | ||
| 17 | extern int | 57 | extern int rm_main(int argc, char **argv) |
| 18 | rm_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 | ||
| 3 | const char sync_usage[] = "sync\n" | ||
| 4 | "\n" | ||
| 5 | "\tWrite all buffered filesystem blocks to disk.\n"; | ||
| 6 | |||
| 7 | extern int | 3 | extern int |
| 8 | sync_main(struct FileInfo * i, int argc, char * * argv) | 4 | sync_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 | |||
