diff options
author | Andreas Baumann <mail@andreasbaumann.cc> | 2015-01-03 12:04:58 +0100 |
---|---|---|
committer | Andreas Baumann <mail@andreasbaumann.cc> | 2015-01-03 12:04:58 +0100 |
commit | 008d0be72b2f160382c6e880765e96b64a050c65 (patch) | |
tree | 36f48a98a3815a408e2ce1693dd182af90f80305 /release/src/router/busybox/makedevs.c | |
parent | 611becfb8726c60cb060368541ad98191d4532f5 (diff) | |
download | tomato-008d0be72b2f160382c6e880765e96b64a050c65.tar.gz tomato-008d0be72b2f160382c6e880765e96b64a050c65.tar.bz2 |
imported original firmware WRT54GL_v4.30.11_11_US
Diffstat (limited to 'release/src/router/busybox/makedevs.c')
-rw-r--r-- | release/src/router/busybox/makedevs.c | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/release/src/router/busybox/makedevs.c b/release/src/router/busybox/makedevs.c new file mode 100644 index 00000000..b8c6dd1d --- /dev/null +++ b/release/src/router/busybox/makedevs.c @@ -0,0 +1,95 @@ +/* vi: set sw=4 ts=4: */ +/* + * public domain -- Dave 'Kill a Cop' Cinege <dcinege@psychosis.com> + * + * makedevs + * Make ranges of device files quickly. + * known bugs: can't deal with alpha ranges + */ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <fcntl.h> +#include <unistd.h> +#include <sys/types.h> +#include "busybox.h" + +int makedevs_main(int argc, char **argv) +{ + + const char *basedev = argv[1]; + const char *type = argv[2]; + int major = atoi(argv[3]); + int Sminor = atoi(argv[4]); + int S = atoi(argv[5]); + int E = atoi(argv[6]); + int sbase = argc == 8 ? 1 : 0; + + mode_t mode = 0; + dev_t dev = 0; + char devname[255]; + char buf[255]; + + if (argc < 7 || *argv[1]=='-') + show_usage(); + + switch (type[0]) { + case 'c': + mode = S_IFCHR; + break; + case 'b': + mode = S_IFBLK; + break; + case 'f': + mode = S_IFIFO; + break; + default: + show_usage(); + } + mode |= 0660; + + while (S <= E) { + + if (type[0] != 'f') + dev = (major << 8) | Sminor; + strcpy(devname, basedev); + + if (sbase == 0) { + sprintf(buf, "%d", S); + strcat(devname, buf); + } else { + sbase = 0; + } + + if (mknod(devname, mode, dev)) + printf("Failed to create: %s\n", devname); + + S++; + Sminor++; + } + + return 0; +} + +/* +And this is what this program replaces. The shell is too slow! + +makedev () { +local basedev=$1; local S=$2; local E=$3 +local major=$4; local Sminor=$5; local type=$6 +local sbase=$7 + + if [ ! "$sbase" = "" ]; then + mknod "$basedev" $type $major $Sminor + S=`expr $S + 1` + Sminor=`expr $Sminor + 1` + fi + + while [ $S -le $E ]; do + mknod "$basedev$S" $type $major $Sminor + S=`expr $S + 1` + Sminor=`expr $Sminor + 1` + done +} +*/ |