Author: ed
Date: Sun Jan 31 11:48:25 2010
New Revision: 203277
URL: http://svn.freebsd.org/changeset/base/203277

Log:
  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.

Modified:
  head/sbin/mknod/mknod.8
  head/sbin/mknod/mknod.c

Modified: head/sbin/mknod/mknod.8
==============================================================================
--- head/sbin/mknod/mknod.8     Sun Jan 31 11:36:04 2010        (r203276)
+++ head/sbin/mknod/mknod.8     Sun Jan 31 11:48:25 2010        (r203277)
@@ -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

Modified: head/sbin/mknod/mknod.c
==============================================================================
--- head/sbin/mknod/mknod.c     Sun Jan 31 11:36:04 2010        (r203276)
+++ head/sbin/mknod/mknod.c     Sun Jan 31 11:48:25 2010        (r203277)
@@ -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'");
-
-       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");
+       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");
+       } else {
+               mode = 0666 | S_IFCHR;
+               dev = 0;
+       }
 
        uid = gid = -1;
        if (6 == argc) {
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to