# HG changeset patch # User Rob Landley # Date 1349498016 18000 # Node ID 40bc0523ae61cd6476f989ea051d11617add50b6 # Parent b88859043af22303b048f267d0e4e9962d075881 Cleanup mknod. diff -r b88859043af2 -r 40bc0523ae61 toys/lsb/mknod.c --- a/toys/lsb/mknod.c Mon Sep 17 00:17:16 2012 -0500 +++ b/toys/lsb/mknod.c Fri Oct 05 23:33:36 2012 -0500 @@ -15,37 +15,29 @@ usage: mknod NAME TYPE [MAJOR MINOR] Create a special file NAME with a given type, possible types are - b create a block device with the given MAJOR/MINOR - c or u create a character device with the given MAJOR/MINOR - p create a named pipe ignoring MAJOR/MINOR + b block device + c or u character device + p named pipe (ignores MAJOR/MINOR) */ #include "toys.h" -static const char modes_char[] = {'p', 'c', 'u', 'b'}; -static const mode_t modes[] = {S_IFIFO, S_IFCHR, S_IFCHR, S_IFBLK}; - void mknod_main(void) { + mode_t modes[] = {S_IFIFO, S_IFCHR, S_IFCHR, S_IFBLK}; int major=0, minor=0, type; - char * tmp; int mode = 0660; - tmp = strchr(modes_char, toys.optargs[1][0]); - if (!tmp) - perror_exit("unknown special device type %c", toys.optargs[1][0]); - - type = modes[tmp-modes_char]; - - if (type == S_IFCHR || type == S_IFBLK) { - if (toys.optc != 4) - perror_exit("creating a block/char device requires major/minor"); + type = stridx("pcub", *toys.optargs[1]); + if (type == -1) perror_exit("bad type '%c'", *toys.optargs[1]); + if (type) { + if (toys.optc != 4) perror_exit("need major/minor"); major = atoi(toys.optargs[2]); minor = atoi(toys.optargs[3]); } - if (mknod(toys.optargs[0], mode | type, makedev(major, minor))) + if (mknod(toys.optargs[0], mode | modes[type], makedev(major, minor))) perror_exit("mknod %s failed", toys.optargs[0]); }