X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=makedevs.c;h=5072095b532cab61e67ed556ed428e17c3283996;hb=e714bce003a1b0e2c49e58fe14af86abc8b31f23;hp=f7fbeb2fe848788fdaa84a53d650d299c3fd9473;hpb=e77ae3a2c0328590b43447550bdb1284650b8236;p=oweals%2Fbusybox.git diff --git a/makedevs.c b/makedevs.c index f7fbeb2fe..5072095b5 100644 --- a/makedevs.c +++ b/makedevs.c @@ -1,3 +1,4 @@ +/* vi: set sw=4 ts=4: */ /* * public domain -- Dave 'Kill a Cop' Cinege * @@ -5,7 +6,7 @@ * Make ranges of device files quickly. * known bugs: can't deal with alpha ranges */ - + #include "internal.h" #include #include @@ -15,60 +16,78 @@ #include #include -static const char makedevs_usage[] = -"makedevs 0.01 -- Create an entire range of device files\n\n" -"\tmakedevs /dev/ttyS c 4 64 0 63 (ttyS0-ttyS63)\n" -"\tmakedevs /dev/hda b 3 0 0 8 s (hda,hda1-hda8)\n"; +static const char makedevs_usage[] = + "makedevs NAME TYPE MAJOR MINOR FIRST LAST [s]\n" +#ifndef BB_FEATURE_TRIVIAL_HELP + "\nCreates a range of block or character special files\n\n" + "TYPEs include:\n" + "\tb:\tMake a block (buffered) device.\n" + "\tc or u:\tMake a character (un-buffered) device.\n" + "\tp:\tMake a named pipe. MAJOR and MINOR are ignored for named pipes.\n\n" + "FIRST specifies the number appended to NAME to create the first device.\n" + "LAST specifies the number of the last item that should be created.\n" + "If 's' is the last argument, the base device is created as well.\n\n" + "For example:\n" + "\tmakedevs /dev/ttyS c 4 66 2 63 -> ttyS2-ttyS63\n" + "\tmakedevs /dev/hda b 3 0 0 8 s -> hda,hda1-hda8\n" +#endif + ; -int -makedevs_main(int argc, char * * argv) +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; + 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]; -mode_t mode = 0; -dev_t dev = 0; -char devname[255]; -char buf[255]; + if (argc < 7 || *argv[1]=='-') + usage(makedevs_usage); switch (type[0]) { - case 'c': - mode = S_IFCHR; break; - case 'b': - mode = S_IFBLK; break; - case 'f': - mode = S_IFIFO; break; - default: - usage( makedevs_usage); - } - mode |= 0660; - - while ( S <= E ) { - + case 'c': + mode = S_IFCHR; + break; + case 'b': + mode = S_IFBLK; + break; + case 'f': + mode = S_IFIFO; + break; + default: + usage(makedevs_usage); + } + mode |= 0660; + + while (S <= E) { + if (type[0] != 'f') dev = (major << 8) | Sminor; strcpy(devname, basedev); - + if (sbase == 0) { - sprintf(buf, "%d", S); + sprintf(buf, "%d", S); strcat(devname, buf); } else { sbase = 0; } - - if (mknod (devname, mode, dev)) - printf("Failed to create: %s\n", devname); - - S++; Sminor++; + + if (mknod(devname, mode, dev)) + printf("Failed to create: %s\n", devname); + + S++; + Sminor++; } -return 0; + return 0; } /*