diff options
author | Erik Andersen <andersen@codepoet.org> | 2000-04-15 16:34:54 +0000 |
---|---|---|
committer | Erik Andersen <andersen@codepoet.org> | 2000-04-15 16:34:54 +0000 |
commit | 5e1189e187f6a7957dadb8eda2c271c4a0777a23 (patch) | |
tree | 140cd30d77342c730afbc1df863bec93c63978a8 /coreutils/mknod.c | |
parent | 95c1c1e05f290ccbcc2ff863a62bcee5d57bf5c8 (diff) | |
download | busybox-w32-5e1189e187f6a7957dadb8eda2c271c4a0777a23.tar.gz busybox-w32-5e1189e187f6a7957dadb8eda2c271c4a0777a23.tar.bz2 busybox-w32-5e1189e187f6a7957dadb8eda2c271c4a0777a23.zip |
More documentation updates, and minor fixes to make things sync
up with the docs.
-Erik
Diffstat (limited to 'coreutils/mknod.c')
-rw-r--r-- | coreutils/mknod.c | 53 |
1 files changed, 38 insertions, 15 deletions
diff --git a/coreutils/mknod.c b/coreutils/mknod.c index 40f508d33..0c93df64d 100644 --- a/coreutils/mknod.c +++ b/coreutils/mknod.c | |||
@@ -28,23 +28,47 @@ | |||
28 | #include <fcntl.h> | 28 | #include <fcntl.h> |
29 | #include <unistd.h> | 29 | #include <unistd.h> |
30 | 30 | ||
31 | static const char mknod_usage[] = "mknod NAME TYPE MAJOR MINOR\n\n" | 31 | static const char mknod_usage[] = "mknod [OPTIONS] NAME TYPE MAJOR MINOR\n\n" |
32 | "Make block or character special files.\n\n" | 32 | "Create a special file (block, character, or pipe).\n\n" |
33 | "Options:\n" | ||
34 | "\t-m\tcreate the special file using the specified mode (default a=rw)\n\n" | ||
33 | "TYPEs include:\n" | 35 | "TYPEs include:\n" |
34 | "\tb:\tMake a block (buffered) device.\n" | 36 | "\tb:\tMake a block (buffered) device.\n" |
35 | |||
36 | "\tc or u:\tMake a character (un-buffered) device.\n" | 37 | "\tc or u:\tMake a character (un-buffered) device.\n" |
37 | "\tp:\tMake a named pipe. Major and minor are ignored for named pipes.\n"; | 38 | "\tp:\tMake a named pipe. MAJOR and MINOR are ignored for named pipes.\n"; |
38 | 39 | ||
39 | int mknod_main(int argc, char **argv) | 40 | int mknod_main(int argc, char **argv) |
40 | { | 41 | { |
42 | char *thisarg; | ||
41 | mode_t mode = 0; | 43 | mode_t mode = 0; |
44 | mode_t perm = 0666; | ||
42 | dev_t dev = 0; | 45 | dev_t dev = 0; |
43 | 46 | ||
44 | if (argc != 5 || **(argv + 1) == '-') { | 47 | argc--; |
48 | argv++; | ||
49 | |||
50 | /* Parse any options */ | ||
51 | while (argc > 1) { | ||
52 | if (**argv != '-') | ||
53 | break; | ||
54 | thisarg = *argv; | ||
55 | thisarg++; | ||
56 | switch (*thisarg) { | ||
57 | case 'm': | ||
58 | argc--; | ||
59 | argv++; | ||
60 | parse_mode(*argv, &perm); | ||
61 | break; | ||
62 | default: | ||
63 | usage(mknod_usage); | ||
64 | } | ||
65 | argc--; | ||
66 | argv++; | ||
67 | } | ||
68 | if (argc != 4 && argc != 2) { | ||
45 | usage(mknod_usage); | 69 | usage(mknod_usage); |
46 | } | 70 | } |
47 | switch (argv[2][0]) { | 71 | switch (argv[1][0]) { |
48 | case 'c': | 72 | case 'c': |
49 | case 'u': | 73 | case 'u': |
50 | mode = S_IFCHR; | 74 | mode = S_IFCHR; |
@@ -54,23 +78,22 @@ int mknod_main(int argc, char **argv) | |||
54 | break; | 78 | break; |
55 | case 'p': | 79 | case 'p': |
56 | mode = S_IFIFO; | 80 | mode = S_IFIFO; |
81 | if (argc!=2) { | ||
82 | usage(mknod_usage); | ||
83 | } | ||
57 | break; | 84 | break; |
58 | default: | 85 | default: |
59 | usage(mknod_usage); | 86 | usage(mknod_usage); |
60 | } | 87 | } |
61 | 88 | ||
62 | if (mode == S_IFCHR || mode == S_IFBLK) { | 89 | if (mode == S_IFCHR || mode == S_IFBLK) { |
63 | dev = (atoi(argv[3]) << 8) | atoi(argv[4]); | 90 | dev = (atoi(argv[2]) << 8) | atoi(argv[1]); |
64 | if (argc != 5) { | ||
65 | usage(mknod_usage); | ||
66 | } | ||
67 | } | 91 | } |
68 | 92 | ||
69 | mode |= 0666; | 93 | mode |= perm; |
70 | 94 | ||
71 | if (mknod(argv[1], mode, dev) != 0) { | 95 | if (mknod(argv[0], mode, dev) != 0) |
72 | perror(argv[1]); | 96 | fatalError("%s: %s\n", argv[0], strerror(errno)); |
73 | exit (FALSE); | ||
74 | } | ||
75 | exit (TRUE); | 97 | exit (TRUE); |
76 | } | 98 | } |
99 | |||