Contents of /trunk/mkinitrd-magellan/busybox/coreutils/mknod.c
Parent Directory | Revision Log
Revision 816 -
(show annotations)
(download)
Fri Apr 24 18:33:46 2009 UTC (15 years, 5 months ago) by niro
File MIME type: text/plain
File size: 1347 byte(s)
Fri Apr 24 18:33:46 2009 UTC (15 years, 5 months ago) by niro
File MIME type: text/plain
File size: 1347 byte(s)
-updated to busybox-1.13.4
1 | /* vi: set sw=4 ts=4: */ |
2 | /* |
3 | * mknod implementation for busybox |
4 | * |
5 | * Copyright (C) 2003 Manuel Novoa III <mjn3@codepoet.org> |
6 | * |
7 | * Licensed under GPLv2 or later, see file LICENSE in this tarball for details. |
8 | */ |
9 | |
10 | /* BB_AUDIT SUSv3 N/A -- Matches GNU behavior. */ |
11 | |
12 | #include <sys/sysmacros.h> // For makedev |
13 | |
14 | #include "libbb.h" |
15 | #include "libcoreutils/coreutils.h" |
16 | |
17 | static const char modes_chars[] ALIGN1 = { 'p', 'c', 'u', 'b', 0, 1, 1, 2 }; |
18 | static const mode_t modes_cubp[] = { S_IFIFO, S_IFCHR, S_IFBLK }; |
19 | |
20 | int mknod_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; |
21 | int mknod_main(int argc, char **argv) |
22 | { |
23 | mode_t mode; |
24 | dev_t dev; |
25 | const char *name; |
26 | |
27 | mode = getopt_mk_fifo_nod(argv); |
28 | argv += optind; |
29 | argc -= optind; |
30 | |
31 | if (argc >= 2) { |
32 | name = strchr(modes_chars, argv[1][0]); |
33 | if (name != NULL) { |
34 | mode |= modes_cubp[(int)(name[4])]; |
35 | |
36 | dev = 0; |
37 | if (*name != 'p') { |
38 | argc -= 2; |
39 | if (argc == 2) { |
40 | /* Autodetect what the system supports; these macros should |
41 | * optimize out to two constants. */ |
42 | dev = makedev(xatoul_range(argv[2], 0, major(UINT_MAX)), |
43 | xatoul_range(argv[3], 0, minor(UINT_MAX))); |
44 | } |
45 | } |
46 | |
47 | if (argc == 2) { |
48 | name = *argv; |
49 | if (mknod(name, mode, dev) == 0) { |
50 | return EXIT_SUCCESS; |
51 | } |
52 | bb_simple_perror_msg_and_die(name); |
53 | } |
54 | } |
55 | } |
56 | bb_show_usage(); |
57 | } |