diff options
Diffstat (limited to 'coreutils')
| -rw-r--r-- | coreutils/dirname.c | 14 | ||||
| -rw-r--r-- | coreutils/mkdir.c | 97 |
2 files changed, 33 insertions, 78 deletions
diff --git a/coreutils/dirname.c b/coreutils/dirname.c index 935a8313c..b534e6950 100644 --- a/coreutils/dirname.c +++ b/coreutils/dirname.c | |||
| @@ -30,21 +30,11 @@ | |||
| 30 | 30 | ||
| 31 | extern int dirname_main(int argc, char **argv) | 31 | extern int dirname_main(int argc, char **argv) |
| 32 | { | 32 | { |
| 33 | char* s; | ||
| 34 | |||
| 35 | if ((argc < 2) || (**(argv + 1) == '-')) | 33 | if ((argc < 2) || (**(argv + 1) == '-')) |
| 36 | show_usage(); | 34 | show_usage(); |
| 37 | argv++; | 35 | argv++; |
| 38 | 36 | ||
| 39 | s=*argv+strlen(*argv)-1; | 37 | puts (dirname (argv[0])); |
| 40 | while (s > *argv && *s == '/') { | 38 | |
| 41 | *s-- = '\0'; | ||
| 42 | } | ||
| 43 | s = strrchr(*argv, '/'); | ||
| 44 | if (s != NULL && s == *argv) | ||
| 45 | s[1] = '\0'; | ||
| 46 | else if (s != NULL) | ||
| 47 | *s = '\0'; | ||
| 48 | puts(s ? *argv : "."); | ||
| 49 | return EXIT_SUCCESS; | 39 | return EXIT_SUCCESS; |
| 50 | } | 40 | } |
diff --git a/coreutils/mkdir.c b/coreutils/mkdir.c index d78f57e2b..03c49f098 100644 --- a/coreutils/mkdir.c +++ b/coreutils/mkdir.c | |||
| @@ -2,8 +2,7 @@ | |||
| 2 | /* | 2 | /* |
| 3 | * Mini mkdir implementation for busybox | 3 | * Mini mkdir implementation for busybox |
| 4 | * | 4 | * |
| 5 | * Copyright (C) 1999,2000,2001 by Lineo, inc. | 5 | * Copyright (C) 2001 Matt Kraai <kraai@alumni.carnegiemellon.edu> |
| 6 | * Written by Erik Andersen <andersen@lineo.com>, <andersee@debian.org> | ||
| 7 | * | 6 | * |
| 8 | * This program is free software; you can redistribute it and/or modify | 7 | * This program is free software; you can redistribute it and/or modify |
| 9 | * it under the terms of the GNU General Public License as published by | 8 | * it under the terms of the GNU General Public License as published by |
| @@ -21,79 +20,45 @@ | |||
| 21 | * | 20 | * |
| 22 | */ | 21 | */ |
| 23 | 22 | ||
| 24 | #include <stdio.h> | ||
| 25 | #include <errno.h> | 23 | #include <errno.h> |
| 26 | #include <string.h> | 24 | #include <getopt.h> |
| 25 | #include <sys/stat.h> | ||
| 26 | #include <sys/types.h> | ||
| 27 | #include <fcntl.h> | ||
| 28 | #include <unistd.h> | ||
| 27 | #include <stdlib.h> | 29 | #include <stdlib.h> |
| 28 | #include "busybox.h" | 30 | #include <string.h> |
| 29 | |||
| 30 | |||
| 31 | static int parentFlag = FALSE; | ||
| 32 | static mode_t mode = 0777; | ||
| 33 | 31 | ||
| 32 | #include "busybox.h" | ||
| 34 | 33 | ||
| 35 | extern int mkdir_main(int argc, char **argv) | 34 | extern int mkdir_main (int argc, char **argv) |
| 36 | { | 35 | { |
| 37 | int i = FALSE; | 36 | mode_t mode = -1; |
| 37 | int flags = 0; | ||
| 38 | int status = 0; | ||
| 39 | int i, opt; | ||
| 38 | 40 | ||
| 39 | argc--; | 41 | while ((opt = getopt (argc, argv, "m:p")) != -1) { |
| 40 | argv++; | 42 | switch (opt) { |
| 41 | 43 | case 'm': | |
| 42 | /* Parse any options */ | 44 | mode = 0777; |
| 43 | while (argc > 0 && **argv == '-') { | 45 | if (!parse_mode (optarg, &mode)) |
| 44 | while (i == FALSE && *++(*argv)) { | 46 | error_msg_and_die ("invalid mode `%s'", optarg); |
| 45 | switch (**argv) { | 47 | break; |
| 46 | case 'm': | 48 | case 'p': |
| 47 | if (--argc == 0) | 49 | flags |= FILEUTILS_RECUR; |
| 48 | show_usage(); | 50 | break; |
| 49 | /* Find the specified modes */ | 51 | default: |
| 50 | mode = 0; | 52 | show_usage (); |
| 51 | if (parse_mode(*(++argv), &mode) == FALSE) { | ||
| 52 | error_msg_and_die("Unknown mode: %s", *argv); | ||
| 53 | } | ||
| 54 | /* Set the umask for this process so it doesn't | ||
| 55 | * screw up whatever the user just entered. */ | ||
| 56 | umask(0); | ||
| 57 | i = TRUE; | ||
| 58 | break; | ||
| 59 | case 'p': | ||
| 60 | parentFlag = TRUE; | ||
| 61 | break; | ||
| 62 | default: | ||
| 63 | show_usage(); | ||
| 64 | } | ||
| 65 | } | 53 | } |
| 66 | argc--; | ||
| 67 | argv++; | ||
| 68 | } | 54 | } |
| 69 | 55 | ||
| 70 | if (argc < 1) { | 56 | if (optind == argc) |
| 71 | show_usage(); | 57 | show_usage (); |
| 72 | } | ||
| 73 | 58 | ||
| 74 | while (argc > 0) { | 59 | for (i = optind; i < argc; i++) |
| 75 | int status; | 60 | if (make_directory (argv[i], mode, flags) < 0) |
| 76 | struct stat statBuf; | 61 | status = 1; |
| 77 | char buf[BUFSIZ + 1]; | ||
| 78 | 62 | ||
| 79 | if (strlen(*argv) > BUFSIZ - 1) { | 63 | return status; |
| 80 | error_msg_and_die(name_too_long); | ||
| 81 | } | ||
| 82 | strcpy(buf, *argv); | ||
| 83 | status = stat(buf, &statBuf); | ||
| 84 | if (parentFlag == FALSE && status != -1 && errno != ENOENT) { | ||
| 85 | error_msg_and_die("%s: File exists", buf); | ||
| 86 | } | ||
| 87 | if (parentFlag == TRUE) { | ||
| 88 | strcat(buf, "/"); | ||
| 89 | create_path(buf, mode); | ||
| 90 | } else { | ||
| 91 | if (mkdir(buf, mode) != 0 && parentFlag == FALSE) { | ||
| 92 | perror_msg_and_die(buf); | ||
| 93 | } | ||
| 94 | } | ||
| 95 | argc--; | ||
| 96 | argv++; | ||
| 97 | } | ||
| 98 | return EXIT_SUCCESS; | ||
| 99 | } | 64 | } |
