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 /coreutils | |
parent | 83c99ab4469e0f8a9a0e84ec506a8bc101cdcb91 (diff) | |
download | busybox-2f55404bbc7f56deca193995b7c373d129297a94.tar.gz |
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>
Diffstat (limited to 'coreutils')
-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 @@ /* BB_AUDIT SUSv3 N/A -- Matches GNU behavior. */ //usage:#define mknod_trivial_usage -//usage: "[-m MODE] " IF_SELINUX("[-Z] ") "NAME TYPE MAJOR MINOR" +//usage: "[-m MODE] " IF_SELINUX("[-Z] ") "NAME TYPE [MAJOR MINOR]" //usage:#define mknod_full_usage "\n\n" //usage: "Create a special file (block, character, or pipe)\n" //usage: "\n -m MODE Creation mode (default a=rw)" @@ -30,7 +30,7 @@ //usage: "\nTYPE:" //usage: "\n b Block device" //usage: "\n c or u Character device" -//usage: "\n p Named pipe (MAJOR and MINOR are ignored)" +//usage: "\n p Named pipe (MAJOR MINOR must be omitted)" //usage: //usage:#define mknod_example_usage //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 }; static const mode_t modes_cubp[] = { S_IFIFO, S_IFCHR, S_IFBLK }; int mknod_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; -int mknod_main(int argc, char **argv) +int mknod_main(int argc UNUSED_PARAM, char **argv) { mode_t mode; dev_t dev; - const char *name; + const char *type, *arg; mode = getopt_mk_fifo_nod(argv); argv += optind; - argc -= optind; + //argc -= optind; - if (argc >= 2) { - name = strchr(modes_chars, argv[1][0]); - if (name != NULL) { - mode |= modes_cubp[(int)(name[4])]; + if (!argv[0] || !argv[1]) + bb_show_usage(); + type = strchr(modes_chars, argv[1][0]); + if (!type) + bb_show_usage(); - dev = 0; - if (*name != 'p') { - argc -= 2; - if (argc == 2) { - /* Autodetect what the system supports; these macros should - * optimize out to two constants. */ - dev = makedev(xatoul_range(argv[2], 0, major(UINT_MAX)), - xatoul_range(argv[3], 0, minor(UINT_MAX))); - } - } + mode |= modes_cubp[(int)(type[4])]; - if (argc == 2) { - name = *argv; - if (mknod(name, mode, dev) == 0) { - return EXIT_SUCCESS; - } - bb_simple_perror_msg_and_die(name); - } - } + dev = 0; + arg = argv[2]; + if (*type != 'p') { + if (!argv[2] || !argv[3]) + bb_show_usage(); + /* Autodetect what the system supports; these macros should + * optimize out to two constants. */ + dev = makedev(xatoul_range(argv[2], 0, major(UINT_MAX)), + xatoul_range(argv[3], 0, minor(UINT_MAX))); + arg = argv[4]; } - bb_show_usage(); + if (arg) + bb_show_usage(); + + if (mknod(argv[0], mode, dev) != 0) { + bb_simple_perror_msg_and_die(argv[0]); + } + return EXIT_SUCCESS; } |