commit 1f7b76f6f2b74c4108eb19f2cae0b0de06cbc856
Author: sin <[email protected]>
Date:   Tue Jan 28 16:49:25 2014 +0000

    Import mknod(1) from sbase
    
    mknod(1) is not POSIX and it is not portable so it should be
    in ubase instead of sbase.

diff --git a/Makefile b/Makefile
index 753b227..959dd1a 100644
--- a/Makefile
+++ b/Makefile
@@ -29,6 +29,7 @@ SRC = \
        insmod.c            \
        lsmod.c             \
        lsusb.c             \
+       mknod.c             \
        mkswap.c            \
        mount.c             \
        mountpoint.c        \
diff --git a/mknod.1 b/mknod.1
new file mode 100644
index 0000000..3c89b5b
--- /dev/null
+++ b/mknod.1
@@ -0,0 +1,40 @@
+.TH MKNOD 1 sbase\-VERSION
+.SH NAME
+mknod \- create a special device file
+
+.SH SYNOPSIS
+.B mknod
+.RB [ \-m
+.IR mode ]
+.I name
+.I type
+.I major
+.I minor
+
+.SH DESCRIPTION
+.B mknod
+Creates a special device file named
+.I name
+with major number
+.IR major ,
+and minor number
+.IR minor .
+
+.IR type
+specifies what kind of special file will be created,
+and must be one of:
+.TP
+.BR u \ or\  c
+A character device.
+.TP
+.BR b
+A block device.
+
+.SH OPTIONS
+.TP
+.B \-m "mode"
+Set the mode of the new file based on the octal value of
+.IR mode .
+
+.SH SEE ALSO
+.IR mknod (2)
diff --git a/mknod.c b/mknod.c
new file mode 100644
index 0000000..0603c1d
--- /dev/null
+++ b/mknod.c
@@ -0,0 +1,43 @@
+/* See LICENSE file for copyright and license details. */
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <string.h>
+#include "util.h"
+
+static void
+usage(void)
+{
+       eprintf("usage: mknod [-m mode] name type major minor
");
+}
+
+int
+main(int argc, char **argv)
+{
+       mode_t type, mode = 0644;
+       dev_t dev;
+
+       ARGBEGIN {
+       case 'm':
+               mode = estrtol(EARGF(usage()), 8);
+               break;
+       default:
+               usage();
+       } ARGEND;
+
+       if(argc != 4)
+               usage();
+
+       if(strlen(argv[1]) != 1 || !strchr("ucb", argv[1][0]))
+               eprintf("mknod: '%s': invalid type
", argv[1]);
+       type = (argv[1][0] == 'b') ? S_IFBLK : S_IFCHR;
+
+       dev = makedev(estrtol(argv[2], 0), estrtol(argv[3], 0));
+
+       if(mknod(argv[0], type|mode, dev) == -1)
+               eprintf("mknod: '%s':", argv[0]);
+       return EXIT_SUCCESS;
+}


Reply via email to