From cc8ed39b240180b58810784f844e253263594ac3 Mon Sep 17 00:00:00 2001 From: Eric Andersen Date: Tue, 5 Oct 1999 16:24:54 +0000 Subject: Initial revision --- coreutils/mknod.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 coreutils/mknod.c (limited to 'coreutils/mknod.c') diff --git a/coreutils/mknod.c b/coreutils/mknod.c new file mode 100644 index 000000000..b18394bec --- /dev/null +++ b/coreutils/mknod.c @@ -0,0 +1,52 @@ +#include "internal.h" +#include +#include +#include +#include +#include + +const char mknod_usage[] = "mknod file b|c|u|p major minor\n" +"\tMake special files.\n" +"\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"; + +int +mknod_main(struct FileInfo * i, int argc, char * * argv) +{ + mode_t mode = 0; + dev_t dev = 0; + + switch(argv[2][0]) { + case 'c': + case 'u': + mode = S_IFCHR; + break; + case 'b': + mode = S_IFBLK; + break; + case 'p': + mode = S_IFIFO; + break; + default: + usage(mknod_usage); + return 1; + } + + if ( mode == S_IFCHR || mode == S_IFBLK ) { + dev = (atoi(argv[3]) << 8) | atoi(argv[4]); + if ( argc != 5 ) { + usage(mknod_usage); + return 1; + } + } + + mode |= 0666; + + if ( mknod(argv[1], mode, dev) != 0 ) { + name_and_error(argv[1]); + return 1; + } + return 0; +} -- cgit v1.2.3