diff options
author | Denis Vlasenko <vda.linux@googlemail.com> | 2008-08-01 02:15:05 +0000 |
---|---|---|
committer | Denis Vlasenko <vda.linux@googlemail.com> | 2008-08-01 02:15:05 +0000 |
commit | e1fa8179958b1d860584b93b649d18a79de31685 (patch) | |
tree | 33d8c0e44d579e9fa2ab5e75bc0c3ea0839ef7ec | |
parent | d498131168005ccc4768b9c92d7e3c3547e390df (diff) | |
download | busybox-w32-e1fa8179958b1d860584b93b649d18a79de31685.tar.gz busybox-w32-e1fa8179958b1d860584b93b649d18a79de31685.tar.bz2 busybox-w32-e1fa8179958b1d860584b93b649d18a79de31685.zip |
makedevs: shrink (by Vladimir); testsuite
function old new delta
makedevs_main 1153 1071 -82
-rw-r--r-- | miscutils/makedevs.c | 150 | ||||
-rw-r--r-- | testsuite/makedevs.device_table.txt | 172 | ||||
-rwxr-xr-x | testsuite/makedevs.tests | 139 |
3 files changed, 375 insertions, 86 deletions
diff --git a/miscutils/makedevs.c b/miscutils/makedevs.c index ed08f7ece..91da16924 100644 --- a/miscutils/makedevs.c +++ b/miscutils/makedevs.c | |||
@@ -10,26 +10,39 @@ | |||
10 | #include "libbb.h" | 10 | #include "libbb.h" |
11 | 11 | ||
12 | #if ENABLE_FEATURE_MAKEDEVS_LEAF | 12 | #if ENABLE_FEATURE_MAKEDEVS_LEAF |
13 | /* | ||
14 | makedevs NAME TYPE MAJOR MINOR FIRST LAST [s] | ||
15 | TYPEs: | ||
16 | b Block device | ||
17 | c Character device | ||
18 | p FIFO | ||
19 | |||
20 | FIRST..LAST specify numbers appended to NAME. | ||
21 | If 's' is the last argument, the base device is created as well. | ||
22 | Examples: | ||
23 | makedevs /dev/ttyS c 4 66 2 63 -> ttyS2-ttyS63 | ||
24 | makedevs /dev/hda b 3 0 0 8 s -> hda,hda1-hda8 | ||
25 | */ | ||
13 | int makedevs_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; | 26 | int makedevs_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; |
14 | int makedevs_main(int argc, char **argv) | 27 | int makedevs_main(int argc, char **argv) |
15 | { | 28 | { |
16 | mode_t mode; | 29 | mode_t mode; |
17 | char *basedev, *type, *nodname, buf[255]; | 30 | char *basedev, *type, *nodname, *buf; |
18 | int Smajor, Sminor, S, E; | 31 | int Smajor, Sminor, S, E; |
19 | 32 | ||
20 | if (argc < 7 || *argv[1]=='-') | 33 | if (argc < 7 || argv[1][0] == '-') |
21 | bb_show_usage(); | 34 | bb_show_usage(); |
22 | 35 | ||
23 | basedev = argv[1]; | 36 | basedev = argv[1]; |
37 | buf = xasprintf("%s%u", argv[1], (unsigned)-1); | ||
24 | type = argv[2]; | 38 | type = argv[2]; |
25 | Smajor = xatoi_u(argv[3]); | 39 | Smajor = xatoi_u(argv[3]); |
26 | Sminor = xatoi_u(argv[4]); | 40 | Sminor = xatoi_u(argv[4]); |
27 | S = xatoi_u(argv[5]); | 41 | S = xatoi_u(argv[5]); |
28 | E = xatoi_u(argv[6]); | 42 | E = xatoi_u(argv[6]); |
29 | nodname = argc == 8 ? basedev : buf; | 43 | nodname = argv[7] ? basedev : buf; |
30 | 44 | ||
31 | mode = 0660; | 45 | mode = 0660; |
32 | |||
33 | switch (type[0]) { | 46 | switch (type[0]) { |
34 | case 'c': | 47 | case 'c': |
35 | mode |= S_IFCHR; | 48 | mode |= S_IFCHR; |
@@ -45,18 +58,14 @@ int makedevs_main(int argc, char **argv) | |||
45 | } | 58 | } |
46 | 59 | ||
47 | while (S <= E) { | 60 | while (S <= E) { |
48 | int sz; | 61 | sprintf(buf, "%s%u", basedev, S); |
49 | |||
50 | sz = snprintf(buf, sizeof(buf), "%s%d", basedev, S); | ||
51 | if (sz < 0 || sz >= sizeof(buf)) /* libc different */ | ||
52 | bb_error_msg_and_die("%s too large", basedev); | ||
53 | |||
54 | /* if mode != S_IFCHR and != S_IFBLK third param in mknod() ignored */ | ||
55 | 62 | ||
63 | /* if mode != S_IFCHR and != S_IFBLK, | ||
64 | * third param in mknod() ignored */ | ||
56 | if (mknod(nodname, mode, makedev(Smajor, Sminor))) | 65 | if (mknod(nodname, mode, makedev(Smajor, Sminor))) |
57 | bb_error_msg("failed to create: %s", nodname); | 66 | bb_perror_msg("can't create %s", nodname); |
58 | 67 | ||
59 | if (nodname == basedev) /* ex. /dev/hda - to /dev/hda1 ... */ | 68 | /*if (nodname == basedev)*/ /* ex. /dev/hda - to /dev/hda1 ... */ |
60 | nodname = buf; | 69 | nodname = buf; |
61 | S++; | 70 | S++; |
62 | Sminor++; | 71 | Sminor++; |
@@ -70,34 +79,31 @@ int makedevs_main(int argc, char **argv) | |||
70 | /* Licensed under the GPL v2 or later, see the file LICENSE in this tarball. */ | 79 | /* Licensed under the GPL v2 or later, see the file LICENSE in this tarball. */ |
71 | 80 | ||
72 | int makedevs_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; | 81 | int makedevs_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; |
73 | int makedevs_main(int argc, char **argv) | 82 | int makedevs_main(int argc UNUSED_PARAM, char **argv) |
74 | { | 83 | { |
75 | FILE *table = stdin; | 84 | parser_t *parser; |
76 | char *rootdir = NULL; | 85 | char *rootdir = NULL; |
77 | char *line = NULL; | 86 | char *line = (char *)"-"; |
78 | int linenum = 0; | 87 | int linenum; |
79 | int ret = EXIT_SUCCESS; | 88 | int ret = EXIT_SUCCESS; |
80 | 89 | ||
90 | opt_complementary = "=1"; /* exactly one param */ | ||
81 | getopt32(argv, "d:", &line); | 91 | getopt32(argv, "d:", &line); |
82 | if (line) | 92 | rootdir = argv[optind]; |
83 | table = xfopen_for_read(line); | 93 | parser = config_open(line); |
84 | |||
85 | if (optind >= argc || (rootdir=argv[optind])==NULL) { | ||
86 | bb_error_msg_and_die("root directory not specified"); | ||
87 | } | ||
88 | 94 | ||
89 | xchdir(rootdir); | 95 | xchdir(rootdir); |
90 | 96 | ||
91 | umask(0); | 97 | umask(0); |
92 | 98 | ||
93 | printf("rootdir=%s\n", rootdir); | 99 | printf("rootdir=%s\n", rootdir); |
94 | if (line) { | 100 | if (NOT_LONE_DASH(line)) { |
95 | printf("table='%s'\n", line); | 101 | printf("table='%s'\n", line); |
96 | } else { | 102 | } else { |
97 | printf("table=<stdin>\n"); | 103 | printf("table=<stdin>\n"); |
98 | } | 104 | } |
99 | 105 | ||
100 | while ((line = xmalloc_fgetline(table)) != NULL) { | 106 | while (config_read(parser, &line, 1, 1, "# \t", PARSE_NORMAL)) { |
101 | char type; | 107 | char type; |
102 | unsigned mode = 0755; | 108 | unsigned mode = 0755; |
103 | unsigned major = 0; | 109 | unsigned major = 0; |
@@ -112,22 +118,17 @@ int makedevs_main(int argc, char **argv) | |||
112 | uid_t uid; | 118 | uid_t uid; |
113 | gid_t gid; | 119 | gid_t gid; |
114 | 120 | ||
115 | linenum++; | 121 | linenum = parser->lineno; |
116 | 122 | ||
117 | if ((2 > sscanf(line, "%40s %c %o %40s %40s %u %u %u %u %u", name, | 123 | if ((2 > sscanf(line, "%40s %c %o %40s %40s %u %u %u %u %u", |
118 | &type, &mode, user, group, &major, | 124 | name, &type, &mode, user, group, |
119 | &minor, &start, &increment, &count)) || | 125 | &major, &minor, &start, &increment, &count)) |
120 | ((major | minor | start | count | increment) > 255)) | 126 | || ((unsigned)(major | minor | start | count | increment) > 255) |
121 | { | 127 | ) { |
122 | if (*line=='\0' || *line=='#' || isspace(*line)) | ||
123 | continue; | ||
124 | bb_error_msg("invalid line %d: '%s'", linenum, line); | 128 | bb_error_msg("invalid line %d: '%s'", linenum, line); |
125 | ret = EXIT_FAILURE; | 129 | ret = EXIT_FAILURE; |
126 | continue; | 130 | continue; |
127 | } | 131 | } |
128 | if (name[0] == '#') { | ||
129 | continue; | ||
130 | } | ||
131 | 132 | ||
132 | gid = (*group) ? get_ug_id(group, xgroup2gid) : getgid(); | 133 | gid = (*group) ? get_ug_id(group, xgroup2gid) : getgid(); |
133 | uid = (*user) ? get_ug_id(user, xuname2uid) : getuid(); | 134 | uid = (*user) ? get_ug_id(user, xuname2uid) : getuid(); |
@@ -136,12 +137,14 @@ int makedevs_main(int argc, char **argv) | |||
136 | if (type == 'd') { | 137 | if (type == 'd') { |
137 | bb_make_directory(full_name, mode | S_IFDIR, FILEUTILS_RECUR); | 138 | bb_make_directory(full_name, mode | S_IFDIR, FILEUTILS_RECUR); |
138 | if (chown(full_name, uid, gid) == -1) { | 139 | if (chown(full_name, uid, gid) == -1) { |
139 | bb_perror_msg("line %d: chown failed for %s", linenum, full_name); | 140 | chown_fail: |
141 | bb_perror_msg("line %d: can't chown %s", linenum, full_name); | ||
140 | ret = EXIT_FAILURE; | 142 | ret = EXIT_FAILURE; |
141 | goto loop; | 143 | goto loop; |
142 | } | 144 | } |
143 | if (chmod(full_name, mode) < 0) { | 145 | if (chmod(full_name, mode) < 0) { |
144 | bb_perror_msg("line %d: chmod failed for %s", linenum, full_name); | 146 | chmod_fail: |
147 | bb_perror_msg("line %d: can't chmod %s", linenum, full_name); | ||
145 | ret = EXIT_FAILURE; | 148 | ret = EXIT_FAILURE; |
146 | goto loop; | 149 | goto loop; |
147 | } | 150 | } |
@@ -152,26 +155,20 @@ int makedevs_main(int argc, char **argv) | |||
152 | ret = EXIT_FAILURE; | 155 | ret = EXIT_FAILURE; |
153 | goto loop; | 156 | goto loop; |
154 | } | 157 | } |
155 | if (chown(full_name, uid, gid) == -1) { | 158 | if (chown(full_name, uid, gid) < 0) |
156 | bb_perror_msg("line %d: chown failed for %s", linenum, full_name); | 159 | goto chown_fail; |
157 | ret = EXIT_FAILURE; | 160 | if (chmod(full_name, mode) < 0) |
158 | goto loop; | 161 | goto chmod_fail; |
159 | } | ||
160 | if (chmod(full_name, mode) < 0) { | ||
161 | bb_perror_msg("line %d: chmod failed for %s", linenum, full_name); | ||
162 | ret = EXIT_FAILURE; | ||
163 | goto loop; | ||
164 | } | ||
165 | } else { | 162 | } else { |
166 | dev_t rdev; | 163 | dev_t rdev; |
164 | unsigned i; | ||
165 | char *full_name_inc; | ||
167 | 166 | ||
168 | if (type == 'p') { | 167 | if (type == 'p') { |
169 | mode |= S_IFIFO; | 168 | mode |= S_IFIFO; |
170 | } | 169 | } else if (type == 'c') { |
171 | else if (type == 'c') { | ||
172 | mode |= S_IFCHR; | 170 | mode |= S_IFCHR; |
173 | } | 171 | } else if (type == 'b') { |
174 | else if (type == 'b') { | ||
175 | mode |= S_IFBLK; | 172 | mode |= S_IFBLK; |
176 | } else { | 173 | } else { |
177 | bb_error_msg("line %d: unsupported file type %c", linenum, type); | 174 | bb_error_msg("line %d: unsupported file type %c", linenum, type); |
@@ -179,49 +176,30 @@ int makedevs_main(int argc, char **argv) | |||
179 | goto loop; | 176 | goto loop; |
180 | } | 177 | } |
181 | 178 | ||
182 | if (count > 0) { | 179 | full_name_inc = xmalloc(strlen(full_name) + sizeof(int)*3 + 2); |
183 | unsigned i; | 180 | if (count) |
184 | char *full_name_inc; | 181 | count--; |
185 | 182 | for (i = start; i <= start + count; i++) { | |
186 | full_name_inc = xmalloc(strlen(full_name) + 4); | 183 | sprintf(full_name_inc, count ? "%s%u" : "%s", full_name, i); |
187 | for (i = start; i < count; i++) { | 184 | rdev = makedev(major, minor + (i - start) * increment); |
188 | sprintf(full_name_inc, "%s%d", full_name, i); | 185 | if (mknod(full_name_inc, mode, rdev) < 0) { |
189 | rdev = makedev(major, minor + (i * increment - start)); | 186 | bb_perror_msg("line %d: can't create node %s", linenum, full_name_inc); |
190 | if (mknod(full_name_inc, mode, rdev) == -1) { | ||
191 | bb_perror_msg("line %d: cannot create node %s", linenum, full_name_inc); | ||
192 | ret = EXIT_FAILURE; | ||
193 | } | ||
194 | else if (chown(full_name_inc, uid, gid) == -1) { | ||
195 | bb_perror_msg("line %d: chown failed for %s", linenum, full_name_inc); | ||
196 | ret = EXIT_FAILURE; | ||
197 | } | ||
198 | if (chmod(full_name_inc, mode) < 0) { | ||
199 | bb_perror_msg("line %d: chmod failed for %s", linenum, full_name_inc); | ||
200 | ret = EXIT_FAILURE; | ||
201 | } | ||
202 | } | ||
203 | free(full_name_inc); | ||
204 | } else { | ||
205 | rdev = makedev(major, minor); | ||
206 | if (mknod(full_name, mode, rdev) == -1) { | ||
207 | bb_perror_msg("line %d: cannot create node %s", linenum, full_name); | ||
208 | ret = EXIT_FAILURE; | 187 | ret = EXIT_FAILURE; |
209 | } | 188 | } else if (chown(full_name_inc, uid, gid) < 0) { |
210 | else if (chown(full_name, uid, gid) == -1) { | 189 | bb_perror_msg("line %d: can't chown %s", linenum, full_name_inc); |
211 | bb_perror_msg("line %d: chown failed for %s", linenum, full_name); | ||
212 | ret = EXIT_FAILURE; | 190 | ret = EXIT_FAILURE; |
213 | } | 191 | } else if (chmod(full_name_inc, mode) < 0) { |
214 | if (chmod(full_name, mode) < 0) { | 192 | bb_perror_msg("line %d: can't chmod %s", linenum, full_name_inc); |
215 | bb_perror_msg("line %d: chmod failed for %s", linenum, full_name); | ||
216 | ret = EXIT_FAILURE; | 193 | ret = EXIT_FAILURE; |
217 | } | 194 | } |
218 | } | 195 | } |
196 | free(full_name_inc); | ||
219 | } | 197 | } |
220 | loop: | 198 | loop: |
221 | free(line); | ||
222 | free(full_name); | 199 | free(full_name); |
223 | } | 200 | } |
224 | fclose(table); | 201 | if (ENABLE_FEATURE_CLEAN_UP) |
202 | config_close(parser); | ||
225 | 203 | ||
226 | return ret; | 204 | return ret; |
227 | } | 205 | } |
diff --git a/testsuite/makedevs.device_table.txt b/testsuite/makedevs.device_table.txt new file mode 100644 index 000000000..8ca5a88c0 --- /dev/null +++ b/testsuite/makedevs.device_table.txt | |||
@@ -0,0 +1,172 @@ | |||
1 | # When building a target filesystem, it is desirable to not have to | ||
2 | # become root and then run 'mknod' a thousand times. Using a device | ||
3 | # table you can create device nodes and directories "on the fly". | ||
4 | # | ||
5 | # This is a sample device table file for use with genext2fs. You can | ||
6 | # do all sorts of interesting things with a device table file. For | ||
7 | # example, if you want to adjust the permissions on a particular file | ||
8 | # you can just add an entry like: | ||
9 | # /sbin/foobar f 2755 0 0 - - - - - | ||
10 | # and (assuming the file /sbin/foobar exists) it will be made setuid | ||
11 | # root (regardless of what its permissions are on the host filesystem. | ||
12 | # Furthermore, you can use a single table entry to create a many device | ||
13 | # minors. For example, if I wanted to create /dev/hda and /dev/hda[0-15] | ||
14 | # I could just use the following two table entries: | ||
15 | # /dev/hda b 640 0 0 3 0 0 0 - | ||
16 | # /dev/hda b 640 0 0 3 1 1 1 15 | ||
17 | # | ||
18 | # Device table entries take the form of: | ||
19 | # <name> <type> <mode> <uid> <gid> <major> <minor> <start> <inc> <count> | ||
20 | # where name is the file name, type can be one of: | ||
21 | # f A regular file | ||
22 | # d Directory | ||
23 | # c Character special device file | ||
24 | # b Block special device file | ||
25 | # p Fifo (named pipe) | ||
26 | # uid is the user id for the target file, gid is the group id for the | ||
27 | # target file. The rest of the entries (major, minor, etc) apply only | ||
28 | # to device special files. | ||
29 | |||
30 | # Have fun | ||
31 | # -Erik Andersen <andersen@codepoet.org> | ||
32 | # | ||
33 | |||
34 | #<name> <type> <mode> <uid> <gid> <major> <minor> <start> <inc> <count> | ||
35 | /dev d 755 0 0 - - - - - | ||
36 | /dev/pts d 755 0 0 - - - - - | ||
37 | /dev/shm d 755 0 0 - - - - - | ||
38 | /tmp d 1777 0 0 - - - - - | ||
39 | /etc d 755 0 0 - - - - - | ||
40 | /home/default d 2755 1000 1000 - - - - - | ||
41 | #<name> <type> <mode> <uid> <gid> <major> <minor> <start> <inc> <count> | ||
42 | ###/bin/busybox f 4755 0 0 - - - - - | ||
43 | ###/etc/shadow f 600 0 0 - - - - - | ||
44 | ###/etc/passwd f 644 0 0 - - - - - | ||
45 | /etc/network/if-up.d d 755 0 0 - - - - - | ||
46 | /etc/network/if-pre-up.d d 755 0 0 - - - - - | ||
47 | /etc/network/if-down.d d 755 0 0 - - - - - | ||
48 | /etc/network/if-post-down.d d 755 0 0 - - - - - | ||
49 | ###/usr/share/udhcpc/default.script f 755 0 0 - - - - - | ||
50 | # uncomment this to allow starting x as non-root | ||
51 | #/usr/X11R6/bin/Xfbdev f 4755 0 0 - - - - - | ||
52 | |||
53 | # Normal system devices | ||
54 | # <name> <type> <mode> <uid> <gid> <major> <minor> <start> <inc> <count> | ||
55 | /dev/mem c 640 0 0 1 1 0 0 - | ||
56 | /dev/kmem c 640 0 0 1 2 0 0 - | ||
57 | /dev/null c 666 0 0 1 3 0 0 - | ||
58 | /dev/zero c 666 0 0 1 5 0 0 - | ||
59 | /dev/random c 666 0 0 1 8 0 0 - | ||
60 | /dev/urandom c 666 0 0 1 9 0 0 - | ||
61 | /dev/ram b 640 0 0 1 1 0 0 - | ||
62 | /dev/ram b 640 0 0 1 0 0 1 4 | ||
63 | /dev/loop b 640 0 0 7 0 0 1 2 | ||
64 | /dev/rtc c 640 0 0 10 135 - - - | ||
65 | /dev/console c 666 0 0 5 1 - - - | ||
66 | /dev/tty c 666 0 0 5 0 - - - | ||
67 | /dev/tty c 666 0 0 4 0 0 1 8 | ||
68 | /dev/ttyp c 666 0 0 3 0 0 1 10 | ||
69 | /dev/ptyp c 666 0 0 2 0 0 1 10 | ||
70 | /dev/ptmx c 666 0 0 5 2 - - - | ||
71 | /dev/ttyP c 666 0 0 57 0 0 1 4 | ||
72 | /dev/ttyS c 666 0 0 4 64 0 1 4 | ||
73 | /dev/fb c 640 0 5 29 0 0 32 4 | ||
74 | #/dev/ttySA c 666 0 0 204 5 0 1 3 | ||
75 | /dev/psaux c 666 0 0 10 1 0 0 - | ||
76 | #/dev/ppp c 666 0 0 108 0 - - - | ||
77 | |||
78 | # Input stuff | ||
79 | /dev/input d 755 0 0 - - - - - | ||
80 | /dev/input/mice c 640 0 0 13 63 0 0 - | ||
81 | /dev/input/mouse c 660 0 0 13 32 0 1 4 | ||
82 | /dev/input/event c 660 0 0 13 64 0 1 4 | ||
83 | #/dev/input/js c 660 0 0 13 0 0 1 4 | ||
84 | |||
85 | |||
86 | # MTD stuff | ||
87 | /dev/mtd c 640 0 0 90 0 0 2 4 | ||
88 | /dev/mtdblock b 640 0 0 31 0 0 1 4 | ||
89 | |||
90 | #Tun/tap driver | ||
91 | /dev/net d 755 0 0 - - - - - | ||
92 | /dev/net/tun c 660 0 0 10 200 - - - | ||
93 | |||
94 | # Audio stuff | ||
95 | #/dev/audio c 666 0 29 14 4 - - - | ||
96 | #/dev/audio1 c 666 0 29 14 20 - - - | ||
97 | #/dev/dsp c 666 0 29 14 3 - - - | ||
98 | #/dev/dsp1 c 666 0 29 14 19 - - - | ||
99 | #/dev/sndstat c 666 0 29 14 6 - - - | ||
100 | |||
101 | # User-mode Linux stuff | ||
102 | #/dev/ubda b 640 0 0 98 0 0 0 - | ||
103 | #/dev/ubda b 640 0 0 98 1 1 1 15 | ||
104 | |||
105 | # IDE Devices | ||
106 | /dev/hda b 640 0 0 3 0 0 0 - | ||
107 | /dev/hda b 640 0 0 3 1 1 1 15 | ||
108 | /dev/hdb b 640 0 0 3 64 0 0 - | ||
109 | /dev/hdb b 640 0 0 3 65 1 1 15 | ||
110 | #/dev/hdc b 640 0 0 22 0 0 0 - | ||
111 | #/dev/hdc b 640 0 0 22 1 1 1 15 | ||
112 | #/dev/hdd b 640 0 0 22 64 0 0 - | ||
113 | #/dev/hdd b 640 0 0 22 65 1 1 15 | ||
114 | #/dev/hde b 640 0 0 33 0 0 0 - | ||
115 | #/dev/hde b 640 0 0 33 1 1 1 15 | ||
116 | #/dev/hdf b 640 0 0 33 64 0 0 - | ||
117 | #/dev/hdf b 640 0 0 33 65 1 1 15 | ||
118 | #/dev/hdg b 640 0 0 34 0 0 0 - | ||
119 | #/dev/hdg b 640 0 0 34 1 1 1 15 | ||
120 | #/dev/hdh b 640 0 0 34 64 0 0 - | ||
121 | #/dev/hdh b 640 0 0 34 65 1 1 15 | ||
122 | |||
123 | # SCSI Devices | ||
124 | #/dev/sda b 640 0 0 8 0 0 0 - | ||
125 | #/dev/sda b 640 0 0 8 1 1 1 15 | ||
126 | #/dev/sdb b 640 0 0 8 16 0 0 - | ||
127 | #/dev/sdb b 640 0 0 8 17 1 1 15 | ||
128 | #/dev/sdc b 640 0 0 8 32 0 0 - | ||
129 | #/dev/sdc b 640 0 0 8 33 1 1 15 | ||
130 | #/dev/sdd b 640 0 0 8 48 0 0 - | ||
131 | #/dev/sdd b 640 0 0 8 49 1 1 15 | ||
132 | #/dev/sde b 640 0 0 8 64 0 0 - | ||
133 | #/dev/sde b 640 0 0 8 65 1 1 15 | ||
134 | #/dev/sdf b 640 0 0 8 80 0 0 - | ||
135 | #/dev/sdf b 640 0 0 8 81 1 1 15 | ||
136 | #/dev/sdg b 640 0 0 8 96 0 0 - | ||
137 | #/dev/sdg b 640 0 0 8 97 1 1 15 | ||
138 | #/dev/sdh b 640 0 0 8 112 0 0 - | ||
139 | #/dev/sdh b 640 0 0 8 113 1 1 15 | ||
140 | #/dev/sg c 640 0 0 21 0 0 1 15 | ||
141 | #/dev/scd b 640 0 0 11 0 0 1 15 | ||
142 | #/dev/st c 640 0 0 9 0 0 1 8 | ||
143 | #/dev/nst c 640 0 0 9 128 0 1 8 | ||
144 | #/dev/st c 640 0 0 9 32 1 1 4 | ||
145 | #/dev/st c 640 0 0 9 64 1 1 4 | ||
146 | #/dev/st c 640 0 0 9 96 1 1 4 | ||
147 | |||
148 | # Floppy disk devices | ||
149 | #/dev/fd b 640 0 0 2 0 0 1 2 | ||
150 | #/dev/fd0d360 b 640 0 0 2 4 0 0 - | ||
151 | #/dev/fd1d360 b 640 0 0 2 5 0 0 - | ||
152 | #/dev/fd0h1200 b 640 0 0 2 8 0 0 - | ||
153 | #/dev/fd1h1200 b 640 0 0 2 9 0 0 - | ||
154 | #/dev/fd0u1440 b 640 0 0 2 28 0 0 - | ||
155 | #/dev/fd1u1440 b 640 0 0 2 29 0 0 - | ||
156 | #/dev/fd0u2880 b 640 0 0 2 32 0 0 - | ||
157 | #/dev/fd1u2880 b 640 0 0 2 33 0 0 - | ||
158 | |||
159 | # All the proprietary cdrom devices in the world | ||
160 | #/dev/aztcd b 640 0 0 29 0 0 0 - | ||
161 | #/dev/bpcd b 640 0 0 41 0 0 0 - | ||
162 | #/dev/capi20 c 640 0 0 68 0 0 1 2 | ||
163 | #/dev/cdu31a b 640 0 0 15 0 0 0 - | ||
164 | #/dev/cdu535 b 640 0 0 24 0 0 0 - | ||
165 | #/dev/cm206cd b 640 0 0 32 0 0 0 - | ||
166 | #/dev/sjcd b 640 0 0 18 0 0 0 - | ||
167 | #/dev/sonycd b 640 0 0 15 0 0 0 - | ||
168 | #/dev/gscd b 640 0 0 16 0 0 0 - | ||
169 | #/dev/sbpcd b 640 0 0 25 0 0 0 - | ||
170 | #/dev/sbpcd b 640 0 0 25 0 0 1 4 | ||
171 | #/dev/mcd b 640 0 0 23 0 0 0 - | ||
172 | #/dev/optcd b 640 0 0 17 0 0 0 - | ||
diff --git a/testsuite/makedevs.tests b/testsuite/makedevs.tests new file mode 100755 index 000000000..9e068bdca --- /dev/null +++ b/testsuite/makedevs.tests | |||
@@ -0,0 +1,139 @@ | |||
1 | #!/bin/sh | ||
2 | # Copyright 2008 by Denys Vlasenko | ||
3 | # Licensed under GPL v2, see file LICENSE for details. | ||
4 | |||
5 | . testing.sh | ||
6 | |||
7 | # ls -ln is showing date. Need to remove that, it's variable | ||
8 | # sed: (1) "maj, min" -> "maj,min" (2) coalesce spaces | ||
9 | # cut: remove date | ||
10 | FILTER_LS="sed -e 's/, */,/g' -e 's/ */ /g' | cut -d' ' -f 1-5,9-" | ||
11 | # cut: remove size+date | ||
12 | FILTER_LS2="sed -e 's/, */,/g' -e 's/ */ /g' | cut -d' ' -f 1-4,9-" | ||
13 | |||
14 | # testing "test name" "options" "expected result" "file input" "stdin" | ||
15 | |||
16 | rm -rf makedevs.testdir | ||
17 | mkdir makedevs.testdir | ||
18 | |||
19 | testing "makedevs -d ../makedevs.device_table.txt ." \ | ||
20 | "(cd makedevs.testdir && makedevs -d ../makedevs.device_table.txt . 2>&1); | ||
21 | find makedevs.testdir ! -type d | sort | xargs ls -lnR | $FILTER_LS" \ | ||
22 | "\ | ||
23 | rootdir=. | ||
24 | table='../makedevs.device_table.txt' | ||
25 | crw-rw-rw- 1 0 0 5,1 makedevs.testdir/dev/console | ||
26 | crw-r----- 1 0 5 29,0 makedevs.testdir/dev/fb0 | ||
27 | crw-r----- 1 0 5 29,32 makedevs.testdir/dev/fb1 | ||
28 | crw-r----- 1 0 5 29,64 makedevs.testdir/dev/fb2 | ||
29 | crw-r----- 1 0 5 29,96 makedevs.testdir/dev/fb3 | ||
30 | brw-r----- 1 0 0 3,0 makedevs.testdir/dev/hda | ||
31 | brw-r----- 1 0 0 3,1 makedevs.testdir/dev/hda1 | ||
32 | brw-r----- 1 0 0 3,10 makedevs.testdir/dev/hda10 | ||
33 | brw-r----- 1 0 0 3,11 makedevs.testdir/dev/hda11 | ||
34 | brw-r----- 1 0 0 3,12 makedevs.testdir/dev/hda12 | ||
35 | brw-r----- 1 0 0 3,13 makedevs.testdir/dev/hda13 | ||
36 | brw-r----- 1 0 0 3,14 makedevs.testdir/dev/hda14 | ||
37 | brw-r----- 1 0 0 3,15 makedevs.testdir/dev/hda15 | ||
38 | brw-r----- 1 0 0 3,2 makedevs.testdir/dev/hda2 | ||
39 | brw-r----- 1 0 0 3,3 makedevs.testdir/dev/hda3 | ||
40 | brw-r----- 1 0 0 3,4 makedevs.testdir/dev/hda4 | ||
41 | brw-r----- 1 0 0 3,5 makedevs.testdir/dev/hda5 | ||
42 | brw-r----- 1 0 0 3,6 makedevs.testdir/dev/hda6 | ||
43 | brw-r----- 1 0 0 3,7 makedevs.testdir/dev/hda7 | ||
44 | brw-r----- 1 0 0 3,8 makedevs.testdir/dev/hda8 | ||
45 | brw-r----- 1 0 0 3,9 makedevs.testdir/dev/hda9 | ||
46 | brw-r----- 1 0 0 3,64 makedevs.testdir/dev/hdb | ||
47 | brw-r----- 1 0 0 3,65 makedevs.testdir/dev/hdb1 | ||
48 | brw-r----- 1 0 0 3,74 makedevs.testdir/dev/hdb10 | ||
49 | brw-r----- 1 0 0 3,75 makedevs.testdir/dev/hdb11 | ||
50 | brw-r----- 1 0 0 3,76 makedevs.testdir/dev/hdb12 | ||
51 | brw-r----- 1 0 0 3,77 makedevs.testdir/dev/hdb13 | ||
52 | brw-r----- 1 0 0 3,78 makedevs.testdir/dev/hdb14 | ||
53 | brw-r----- 1 0 0 3,79 makedevs.testdir/dev/hdb15 | ||
54 | brw-r----- 1 0 0 3,66 makedevs.testdir/dev/hdb2 | ||
55 | brw-r----- 1 0 0 3,67 makedevs.testdir/dev/hdb3 | ||
56 | brw-r----- 1 0 0 3,68 makedevs.testdir/dev/hdb4 | ||
57 | brw-r----- 1 0 0 3,69 makedevs.testdir/dev/hdb5 | ||
58 | brw-r----- 1 0 0 3,70 makedevs.testdir/dev/hdb6 | ||
59 | brw-r----- 1 0 0 3,71 makedevs.testdir/dev/hdb7 | ||
60 | brw-r----- 1 0 0 3,72 makedevs.testdir/dev/hdb8 | ||
61 | brw-r----- 1 0 0 3,73 makedevs.testdir/dev/hdb9 | ||
62 | crw-rw---- 1 0 0 13,64 makedevs.testdir/dev/input/event0 | ||
63 | crw-rw---- 1 0 0 13,65 makedevs.testdir/dev/input/event1 | ||
64 | crw-rw---- 1 0 0 13,66 makedevs.testdir/dev/input/event2 | ||
65 | crw-rw---- 1 0 0 13,67 makedevs.testdir/dev/input/event3 | ||
66 | crw-r----- 1 0 0 13,63 makedevs.testdir/dev/input/mice | ||
67 | crw-rw---- 1 0 0 13,32 makedevs.testdir/dev/input/mouse0 | ||
68 | crw-rw---- 1 0 0 13,33 makedevs.testdir/dev/input/mouse1 | ||
69 | crw-rw---- 1 0 0 13,34 makedevs.testdir/dev/input/mouse2 | ||
70 | crw-rw---- 1 0 0 13,35 makedevs.testdir/dev/input/mouse3 | ||
71 | crw-r----- 1 0 0 1,2 makedevs.testdir/dev/kmem | ||
72 | brw-r----- 1 0 0 7,0 makedevs.testdir/dev/loop0 | ||
73 | brw-r----- 1 0 0 7,1 makedevs.testdir/dev/loop1 | ||
74 | crw-r----- 1 0 0 1,1 makedevs.testdir/dev/mem | ||
75 | crw-r----- 1 0 0 90,0 makedevs.testdir/dev/mtd0 | ||
76 | crw-r----- 1 0 0 90,2 makedevs.testdir/dev/mtd1 | ||
77 | crw-r----- 1 0 0 90,4 makedevs.testdir/dev/mtd2 | ||
78 | crw-r----- 1 0 0 90,6 makedevs.testdir/dev/mtd3 | ||
79 | brw-r----- 1 0 0 31,0 makedevs.testdir/dev/mtdblock0 | ||
80 | brw-r----- 1 0 0 31,1 makedevs.testdir/dev/mtdblock1 | ||
81 | brw-r----- 1 0 0 31,2 makedevs.testdir/dev/mtdblock2 | ||
82 | brw-r----- 1 0 0 31,3 makedevs.testdir/dev/mtdblock3 | ||
83 | crw-rw---- 1 0 0 10,200 makedevs.testdir/dev/net/tun | ||
84 | crw-rw-rw- 1 0 0 1,3 makedevs.testdir/dev/null | ||
85 | crw-rw-rw- 1 0 0 10,1 makedevs.testdir/dev/psaux | ||
86 | crw-rw-rw- 1 0 0 5,2 makedevs.testdir/dev/ptmx | ||
87 | crw-rw-rw- 1 0 0 2,0 makedevs.testdir/dev/ptyp0 | ||
88 | crw-rw-rw- 1 0 0 2,1 makedevs.testdir/dev/ptyp1 | ||
89 | crw-rw-rw- 1 0 0 2,2 makedevs.testdir/dev/ptyp2 | ||
90 | crw-rw-rw- 1 0 0 2,3 makedevs.testdir/dev/ptyp3 | ||
91 | crw-rw-rw- 1 0 0 2,4 makedevs.testdir/dev/ptyp4 | ||
92 | crw-rw-rw- 1 0 0 2,5 makedevs.testdir/dev/ptyp5 | ||
93 | crw-rw-rw- 1 0 0 2,6 makedevs.testdir/dev/ptyp6 | ||
94 | crw-rw-rw- 1 0 0 2,7 makedevs.testdir/dev/ptyp7 | ||
95 | crw-rw-rw- 1 0 0 2,8 makedevs.testdir/dev/ptyp8 | ||
96 | crw-rw-rw- 1 0 0 2,9 makedevs.testdir/dev/ptyp9 | ||
97 | brw-r----- 1 0 0 1,1 makedevs.testdir/dev/ram | ||
98 | brw-r----- 1 0 0 1,0 makedevs.testdir/dev/ram0 | ||
99 | brw-r----- 1 0 0 1,1 makedevs.testdir/dev/ram1 | ||
100 | brw-r----- 1 0 0 1,2 makedevs.testdir/dev/ram2 | ||
101 | brw-r----- 1 0 0 1,3 makedevs.testdir/dev/ram3 | ||
102 | crw-rw-rw- 1 0 0 1,8 makedevs.testdir/dev/random | ||
103 | crw-r----- 1 0 0 10,135 makedevs.testdir/dev/rtc | ||
104 | crw-rw-rw- 1 0 0 5,0 makedevs.testdir/dev/tty | ||
105 | crw-rw-rw- 1 0 0 4,0 makedevs.testdir/dev/tty0 | ||
106 | crw-rw-rw- 1 0 0 4,1 makedevs.testdir/dev/tty1 | ||
107 | crw-rw-rw- 1 0 0 4,2 makedevs.testdir/dev/tty2 | ||
108 | crw-rw-rw- 1 0 0 4,3 makedevs.testdir/dev/tty3 | ||
109 | crw-rw-rw- 1 0 0 4,4 makedevs.testdir/dev/tty4 | ||
110 | crw-rw-rw- 1 0 0 4,5 makedevs.testdir/dev/tty5 | ||
111 | crw-rw-rw- 1 0 0 4,6 makedevs.testdir/dev/tty6 | ||
112 | crw-rw-rw- 1 0 0 4,7 makedevs.testdir/dev/tty7 | ||
113 | crw-rw-rw- 1 0 0 57,0 makedevs.testdir/dev/ttyP0 | ||
114 | crw-rw-rw- 1 0 0 57,1 makedevs.testdir/dev/ttyP1 | ||
115 | crw-rw-rw- 1 0 0 57,2 makedevs.testdir/dev/ttyP2 | ||
116 | crw-rw-rw- 1 0 0 57,3 makedevs.testdir/dev/ttyP3 | ||
117 | crw-rw-rw- 1 0 0 4,64 makedevs.testdir/dev/ttyS0 | ||
118 | crw-rw-rw- 1 0 0 4,65 makedevs.testdir/dev/ttyS1 | ||
119 | crw-rw-rw- 1 0 0 4,66 makedevs.testdir/dev/ttyS2 | ||
120 | crw-rw-rw- 1 0 0 4,67 makedevs.testdir/dev/ttyS3 | ||
121 | crw-rw-rw- 1 0 0 3,0 makedevs.testdir/dev/ttyp0 | ||
122 | crw-rw-rw- 1 0 0 3,1 makedevs.testdir/dev/ttyp1 | ||
123 | crw-rw-rw- 1 0 0 3,2 makedevs.testdir/dev/ttyp2 | ||
124 | crw-rw-rw- 1 0 0 3,3 makedevs.testdir/dev/ttyp3 | ||
125 | crw-rw-rw- 1 0 0 3,4 makedevs.testdir/dev/ttyp4 | ||
126 | crw-rw-rw- 1 0 0 3,5 makedevs.testdir/dev/ttyp5 | ||
127 | crw-rw-rw- 1 0 0 3,6 makedevs.testdir/dev/ttyp6 | ||
128 | crw-rw-rw- 1 0 0 3,7 makedevs.testdir/dev/ttyp7 | ||
129 | crw-rw-rw- 1 0 0 3,8 makedevs.testdir/dev/ttyp8 | ||
130 | crw-rw-rw- 1 0 0 3,9 makedevs.testdir/dev/ttyp9 | ||
131 | crw-rw-rw- 1 0 0 1,9 makedevs.testdir/dev/urandom | ||
132 | crw-rw-rw- 1 0 0 1,5 makedevs.testdir/dev/zero | ||
133 | " \ | ||
134 | "" "" | ||
135 | |||
136 | # clean up | ||
137 | rm -rf makedevs.testdir | ||
138 | |||
139 | exit $FAILCOUNT | ||