More documentation updates, and minor fixes to make things sync
up with the docs.
 -Erik
diff --git a/mknod.c b/mknod.c
index 40f508d..0c93df6 100644
--- a/mknod.c
+++ b/mknod.c
@@ -28,23 +28,47 @@
 #include <fcntl.h>
 #include <unistd.h>
 
-static const char mknod_usage[] = "mknod NAME TYPE MAJOR MINOR\n\n"
-	"Make block or character special files.\n\n"
+static const char mknod_usage[] = "mknod [OPTIONS] NAME TYPE MAJOR MINOR\n\n"
+	"Create a special file (block, character, or pipe).\n\n"
+	"Options:\n"
+	"\t-m\tcreate the special file using the specified mode (default a=rw)\n\n"
 	"TYPEs include:\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";
+	"\tp:\tMake a named pipe. MAJOR and MINOR are ignored for named pipes.\n";
 
 int mknod_main(int argc, char **argv)
 {
+	char *thisarg;
 	mode_t mode = 0;
+	mode_t perm = 0666;
 	dev_t dev = 0;
 
-	if (argc != 5 || **(argv + 1) == '-') {
+	argc--;
+	argv++;
+
+	/* Parse any options */
+	while (argc > 1) {
+		if (**argv != '-')
+			break;
+		thisarg = *argv;
+		thisarg++;
+		switch (*thisarg) {
+		case 'm':
+			argc--;
+			argv++;
+			parse_mode(*argv, &perm);
+			break;
+		default:
+			usage(mknod_usage);
+		}
+		argc--;
+		argv++;
+	}
+	if (argc != 4 && argc != 2) {
 		usage(mknod_usage);
 	}
-	switch (argv[2][0]) {
+	switch (argv[1][0]) {
 	case 'c':
 	case 'u':
 		mode = S_IFCHR;
@@ -54,23 +78,22 @@
 		break;
 	case 'p':
 		mode = S_IFIFO;
+		if (argc!=2) {
+			usage(mknod_usage);
+		}
 		break;
 	default:
 		usage(mknod_usage);
 	}
 
 	if (mode == S_IFCHR || mode == S_IFBLK) {
-		dev = (atoi(argv[3]) << 8) | atoi(argv[4]);
-		if (argc != 5) {
-			usage(mknod_usage);
-		}
+		dev = (atoi(argv[2]) << 8) | atoi(argv[1]);
 	}
 
-	mode |= 0666;
+	mode |= perm;
 
-	if (mknod(argv[1], mode, dev) != 0) {
-		perror(argv[1]);
-		exit (FALSE);
-	}
+	if (mknod(argv[0], mode, dev) != 0)
+		fatalError("%s: %s\n", argv[0], strerror(errno));
 	exit (TRUE);
 }
+