diff options
author | Eric Andersen <andersen@codepoet.org> | 2003-06-20 09:01:58 +0000 |
---|---|---|
committer | Eric Andersen <andersen@codepoet.org> | 2003-06-20 09:01:58 +0000 |
commit | 8876fb2f59a0b515b3121d5894933eef88ce566a (patch) | |
tree | f67de9320202043aca8ded20fb80d668c3b0c2d8 /coreutils/mkdir.c | |
parent | dfce3536ace2bcd38bdd3731841998ce344d786e (diff) | |
download | busybox-w32-8876fb2f59a0b515b3121d5894933eef88ce566a.tar.gz busybox-w32-8876fb2f59a0b515b3121d5894933eef88ce566a.tar.bz2 busybox-w32-8876fb2f59a0b515b3121d5894933eef88ce566a.zip |
last_patch89 from vodz:
Manuel,
I rewrite bb_getopt_ulflags() function for more universal usage.
My version support now:
- options with arguments (optional arg as GNU extension also)
- complementaly and/or incomplementaly and/or incongruously and/or list
options
- long_opt (all applets may have long option, add supporting is trivial)
This realisation full compatibile from your version.
Code size grow 480 bytes, but only coreutils/* over compensate this size
after using new function. Last patch reduced over 800 bytes and not full
applied to all. "mkdir" and "mv" applets have long_opt now for demonstrate
trivial addition support long_opt with usage new bb_getopt_ulflags().
Complementaly and/or incomplementaly and/or incongruously and/or list options
logic is not trivial, but new "cut" and "grep" applets using this logic
for examples with full demostrating. New "grep" applet reduced over 300
bytes.
Mark,
Also. I removed bug from "grep" applet.
$ echo a b | busybox grep -e a b
a b
a b
But right is printing one only.
--w
vodz
Diffstat (limited to 'coreutils/mkdir.c')
-rw-r--r-- | coreutils/mkdir.c | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/coreutils/mkdir.c b/coreutils/mkdir.c index b018ac181..50364f17f 100644 --- a/coreutils/mkdir.c +++ b/coreutils/mkdir.c | |||
@@ -31,27 +31,33 @@ | |||
31 | 31 | ||
32 | #include <stdlib.h> | 32 | #include <stdlib.h> |
33 | #include <unistd.h> | 33 | #include <unistd.h> |
34 | #include <getopt.h> | ||
34 | #include "busybox.h" | 35 | #include "busybox.h" |
35 | 36 | ||
37 | static const struct option mkdir_long_options[] = { | ||
38 | { "mode", 1, NULL, 'm' }, | ||
39 | { "parents", 0, NULL, 'p' }, | ||
40 | { 0, 0, 0, 0 } | ||
41 | }; | ||
42 | |||
36 | extern int mkdir_main (int argc, char **argv) | 43 | extern int mkdir_main (int argc, char **argv) |
37 | { | 44 | { |
38 | mode_t mode = (mode_t)(-1); | 45 | mode_t mode = (mode_t)(-1); |
39 | int status = EXIT_SUCCESS; | 46 | int status = EXIT_SUCCESS; |
40 | int flags = 0; | 47 | int flags = 0; |
41 | int opt; | 48 | unsigned long opt; |
49 | char *smode; | ||
42 | 50 | ||
43 | while ((opt = getopt (argc, argv, "m:p")) > 0) { | 51 | bb_applet_long_options = mkdir_long_options; |
44 | if (opt == 'm') { | 52 | opt = bb_getopt_ulflags(argc, argv, "m:p", &smode); |
53 | if(opt & 1) { | ||
45 | mode = 0777; | 54 | mode = 0777; |
46 | if (!bb_parse_mode (optarg, &mode)) { | 55 | if (!bb_parse_mode (smode, &mode)) { |
47 | bb_error_msg_and_die ("invalid mode `%s'", optarg); | 56 | bb_error_msg_and_die ("invalid mode `%s'", smode); |
48 | } | ||
49 | } else if (opt == 'p') { | ||
50 | flags |= FILEUTILS_RECUR; | ||
51 | } else { | ||
52 | bb_show_usage(); | ||
53 | } | 57 | } |
54 | } | 58 | } |
59 | if(opt & 2) | ||
60 | flags |= FILEUTILS_RECUR; | ||
55 | 61 | ||
56 | if (optind == argc) { | 62 | if (optind == argc) { |
57 | bb_show_usage(); | 63 | bb_show_usage(); |