Allow mknod(8) to be only invoked with a pathname as an argument.
In 99% of the cases people just want to recreate device nodes they removed from /dev. There is no reason to pass the additional "c 0 0" anymore. Also slightly improve the manpage. Remove references to non-existent device names and platforms.
This commit is contained in:
parent
c2a5f1a57a
commit
04e532d50b
@ -28,7 +28,7 @@
|
||||
.\" @(#)mknod.8 8.2 (Berkeley) 12/11/93
|
||||
.\" $FreeBSD$
|
||||
.\"
|
||||
.Dd October 31, 2009
|
||||
.Dd January 31, 2010
|
||||
.Dt MKNOD 8
|
||||
.Os
|
||||
.Sh NAME
|
||||
@ -37,6 +37,8 @@
|
||||
.Sh SYNOPSIS
|
||||
.Nm
|
||||
.Ar name
|
||||
.Nm
|
||||
.Ar name
|
||||
.Op Cm b | c
|
||||
.Ar major minor
|
||||
.Op Ar owner : Ns Ar group
|
||||
@ -52,14 +54,14 @@ systems.
|
||||
The
|
||||
.Nm
|
||||
utility creates device special files.
|
||||
To make nodes manually, the four required arguments are:
|
||||
To make nodes manually, the arguments are:
|
||||
.Pp
|
||||
.Bl -tag -width indent
|
||||
.It Ar name
|
||||
Device name, for example
|
||||
.Dq sd
|
||||
for a SCSI disk on an HP300 or a
|
||||
.Dq pty
|
||||
.Pa /dev/da0
|
||||
for a SCSI disk or
|
||||
.Pa /dev/pts/0
|
||||
for pseudo-terminals.
|
||||
.It Cm b | c
|
||||
Type of device.
|
||||
@ -110,13 +112,13 @@ The
|
||||
.Nm
|
||||
utility can be used to recreate deleted device nodes under a
|
||||
.Xr devfs 5
|
||||
mount point by invoking it using dummy arguments.
|
||||
mount point by invoking it with only a filename as an argument.
|
||||
Example:
|
||||
.Pp
|
||||
.Dl "mknod cd0 c 0 0"
|
||||
.Dl "mknod /dev/cd0"
|
||||
.Pp
|
||||
where
|
||||
.Dq Li cd0
|
||||
.Pa /dev/cd0
|
||||
is the name of the deleted device node.
|
||||
.Sh COMPATIBILITY
|
||||
The
|
||||
|
@ -61,7 +61,8 @@ usage(void)
|
||||
{
|
||||
|
||||
(void)fprintf(stderr,
|
||||
"usage: mknod name [b | c] major minor [owner:group]\n");
|
||||
"usage: mknod name\n"
|
||||
" mknod name [b | c] major minor [owner:group]\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
@ -115,31 +116,36 @@ main(int argc, char **argv)
|
||||
char *cp, *endp;
|
||||
long mymajor, myminor;
|
||||
|
||||
if (argc != 5 && argc != 6)
|
||||
if (argc != 2 && argc != 5 && argc != 6)
|
||||
usage();
|
||||
|
||||
mode = 0666;
|
||||
if (argv[2][0] == 'c')
|
||||
mode |= S_IFCHR;
|
||||
else if (argv[2][0] == 'b')
|
||||
mode |= S_IFBLK;
|
||||
else
|
||||
errx(1, "node must be type 'b' or 'c'");
|
||||
if (argc >= 5) {
|
||||
mode = 0666;
|
||||
if (argv[2][0] == 'c')
|
||||
mode |= S_IFCHR;
|
||||
else if (argv[2][0] == 'b')
|
||||
mode |= S_IFBLK;
|
||||
else
|
||||
errx(1, "node must be type 'b' or 'c'");
|
||||
|
||||
errno = 0;
|
||||
mymajor = (long)strtoul(argv[3], &endp, 0);
|
||||
if (endp == argv[3] || *endp != '\0')
|
||||
errx(1, "%s: non-numeric major number", argv[3]);
|
||||
range_error = errno;
|
||||
errno = 0;
|
||||
myminor = (long)strtoul(argv[4], &endp, 0);
|
||||
if (endp == argv[4] || *endp != '\0')
|
||||
errx(1, "%s: non-numeric minor number", argv[4]);
|
||||
range_error |= errno;
|
||||
dev = makedev(mymajor, myminor);
|
||||
if (range_error || major(dev) != (u_int) mymajor ||
|
||||
(long)(u_int)minor(dev) != myminor)
|
||||
errx(1, "major or minor number too large");
|
||||
errno = 0;
|
||||
mymajor = (long)strtoul(argv[3], &endp, 0);
|
||||
if (endp == argv[3] || *endp != '\0')
|
||||
errx(1, "%s: non-numeric major number", argv[3]);
|
||||
range_error = errno;
|
||||
errno = 0;
|
||||
myminor = (long)strtoul(argv[4], &endp, 0);
|
||||
if (endp == argv[4] || *endp != '\0')
|
||||
errx(1, "%s: non-numeric minor number", argv[4]);
|
||||
range_error |= errno;
|
||||
dev = makedev(mymajor, myminor);
|
||||
if (range_error || major(dev) != (u_int) mymajor ||
|
||||
(long)(u_int)minor(dev) != myminor)
|
||||
errx(1, "major or minor number too large");
|
||||
} else {
|
||||
mode = 0666 | S_IFCHR;
|
||||
dev = 0;
|
||||
}
|
||||
|
||||
uid = gid = -1;
|
||||
if (6 == argc) {
|
||||
|
Loading…
Reference in New Issue
Block a user