aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2018-01-08 11:22:37 +0100
committerDenys Vlasenko <vda.linux@googlemail.com>2018-01-08 11:22:37 +0100
commit2f55404bbc7f56deca193995b7c373d129297a94 (patch)
tree2a27999f558d1930f9b0ebb425a6ecbb5cde22c8
parent83c99ab4469e0f8a9a0e84ec506a8bc101cdcb91 (diff)
downloadbusybox-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.c56
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 };
47static const mode_t modes_cubp[] = { S_IFIFO, S_IFCHR, S_IFBLK }; 47static const mode_t modes_cubp[] = { S_IFIFO, S_IFCHR, S_IFBLK };
48 48
49int mknod_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; 49int mknod_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
50int mknod_main(int argc, char **argv) 50int 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}