[hackers] [ubase] Import mknod(1) from sbase || sin

From: <git_AT_suckless.org>
Date: Tue, 28 Jan 2014 17:52:54 +0100

commit 1f7b76f6f2b74c4108eb19f2cae0b0de06cbc856
Author: sin <sin_AT_2f30.org>
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
_AT_@ -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
_AT_@ -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
_AT_@ -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;
+}
Received on Tue Jan 28 2014 - 17:52:54 CET

This archive was generated by hypermail 2.3.0 : Tue Jan 28 2014 - 18:00:16 CET