diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2018-01-08 11:22:37 +0100 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2018-01-08 11:22:37 +0100 |
commit | 2f55404bbc7f56deca193995b7c373d129297a94 (patch) | |
tree | 2a27999f558d1930f9b0ebb425a6ecbb5cde22c8 | |
parent | 83c99ab4469e0f8a9a0e84ec506a8bc101cdcb91 (diff) | |
download | busybox-w32-2f55404bbc7f56deca193995b7c373d129297a94.tar.gz busybox-w32-2f55404bbc7f56deca193995b7c373d129297a94.tar.bz2 busybox-w32-2f55404bbc7f56deca193995b7c373d129297a94.zip |
mknod: better --help, much clearer code
function old new delta
packed_usage 32066 32091 +25
mknod_main 173 174 +1
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r-- | coreutils/mknod.c | 56 |
1 files changed, 28 insertions, 28 deletions
diff --git a/coreutils/mknod.c b/coreutils/mknod.c index 565b33d20..d57167f7d 100644 --- a/coreutils/mknod.c +++ b/coreutils/mknod.c | |||
@@ -20,7 +20,7 @@ | |||
20 | /* BB_AUDIT SUSv3 N/A -- Matches GNU behavior. */ | 20 | /* BB_AUDIT SUSv3 N/A -- Matches GNU behavior. */ |
21 | 21 | ||
22 | //usage:#define mknod_trivial_usage | 22 | //usage:#define mknod_trivial_usage |
23 | //usage: "[-m MODE] " IF_SELINUX("[-Z] ") "NAME TYPE MAJOR MINOR" | 23 | //usage: "[-m MODE] " IF_SELINUX("[-Z] ") "NAME TYPE [MAJOR MINOR]" |
24 | //usage:#define mknod_full_usage "\n\n" | 24 | //usage:#define mknod_full_usage "\n\n" |
25 | //usage: "Create a special file (block, character, or pipe)\n" | 25 | //usage: "Create a special file (block, character, or pipe)\n" |
26 | //usage: "\n -m MODE Creation mode (default a=rw)" | 26 | //usage: "\n -m MODE Creation mode (default a=rw)" |
@@ -30,7 +30,7 @@ | |||
30 | //usage: "\nTYPE:" | 30 | //usage: "\nTYPE:" |
31 | //usage: "\n b Block device" | 31 | //usage: "\n b Block device" |
32 | //usage: "\n c or u Character device" | 32 | //usage: "\n c or u Character device" |
33 | //usage: "\n p Named pipe (MAJOR and MINOR are ignored)" | 33 | //usage: "\n p Named pipe (MAJOR MINOR must be omitted)" |
34 | //usage: | 34 | //usage: |
35 | //usage:#define mknod_example_usage | 35 | //usage:#define mknod_example_usage |
36 | //usage: "$ mknod /dev/fd0 b 2 0\n" | 36 | //usage: "$ mknod /dev/fd0 b 2 0\n" |
@@ -47,40 +47,40 @@ static const char modes_chars[] ALIGN1 = { 'p', 'c', 'u', 'b', 0, 1, 1, 2 }; | |||
47 | static const mode_t modes_cubp[] = { S_IFIFO, S_IFCHR, S_IFBLK }; | 47 | static const mode_t modes_cubp[] = { S_IFIFO, S_IFCHR, S_IFBLK }; |
48 | 48 | ||
49 | int mknod_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; | 49 | int mknod_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; |
50 | int mknod_main(int argc, char **argv) | 50 | int mknod_main(int argc UNUSED_PARAM, char **argv) |
51 | { | 51 | { |
52 | mode_t mode; | 52 | mode_t mode; |
53 | dev_t dev; | 53 | dev_t dev; |
54 | const char *name; | 54 | const char *type, *arg; |
55 | 55 | ||
56 | mode = getopt_mk_fifo_nod(argv); | 56 | mode = getopt_mk_fifo_nod(argv); |
57 | argv += optind; | 57 | argv += optind; |
58 | argc -= optind; | 58 | //argc -= optind; |
59 | 59 | ||
60 | if (argc >= 2) { | 60 | if (!argv[0] || !argv[1]) |
61 | name = strchr(modes_chars, argv[1][0]); | 61 | bb_show_usage(); |
62 | if (name != NULL) { | 62 | type = strchr(modes_chars, argv[1][0]); |
63 | mode |= modes_cubp[(int)(name[4])]; | 63 | if (!type) |
64 | bb_show_usage(); | ||
64 | 65 | ||
65 | dev = 0; | 66 | mode |= modes_cubp[(int)(type[4])]; |
66 | if (*name != 'p') { | ||
67 | argc -= 2; | ||
68 | if (argc == 2) { | ||
69 | /* Autodetect what the system supports; these macros should | ||
70 | * optimize out to two constants. */ | ||
71 | dev = makedev(xatoul_range(argv[2], 0, major(UINT_MAX)), | ||
72 | xatoul_range(argv[3], 0, minor(UINT_MAX))); | ||
73 | } | ||
74 | } | ||
75 | 67 | ||
76 | if (argc == 2) { | 68 | dev = 0; |
77 | name = *argv; | 69 | arg = argv[2]; |
78 | if (mknod(name, mode, dev) == 0) { | 70 | if (*type != 'p') { |
79 | return EXIT_SUCCESS; | 71 | if (!argv[2] || !argv[3]) |
80 | } | 72 | bb_show_usage(); |
81 | bb_simple_perror_msg_and_die(name); | 73 | /* Autodetect what the system supports; these macros should |
82 | } | 74 | * optimize out to two constants. */ |
83 | } | 75 | dev = makedev(xatoul_range(argv[2], 0, major(UINT_MAX)), |
76 | xatoul_range(argv[3], 0, minor(UINT_MAX))); | ||
77 | arg = argv[4]; | ||
84 | } | 78 | } |
85 | bb_show_usage(); | 79 | if (arg) |
80 | bb_show_usage(); | ||
81 | |||
82 | if (mknod(argv[0], mode, dev) != 0) { | ||
83 | bb_simple_perror_msg_and_die(argv[0]); | ||
84 | } | ||
85 | return EXIT_SUCCESS; | ||
86 | } | 86 | } |