changeset 168:14fa82969ea3

Tighten up error handling, add a umask() call so -m 123 actually works.
author Rob Landley <rob@landley.net>
date Mon, 19 Nov 2007 07:07:50 -0600
parents f16c8e5e9435
children 56034b162074
files toys/mkfifo.c
diffstat 1 files changed, 6 insertions(+), 16 deletions(-) [+]
line wrap: on
line diff
--- a/toys/mkfifo.c	Mon Nov 19 01:51:00 2007 -0600
+++ b/toys/mkfifo.c	Mon Nov 19 07:07:50 2007 -0600
@@ -1,6 +1,8 @@
 /* vi: set sw=4 ts=4: */
 /*
  * mkfifo.c: Create a named pipe.
+ *
+ * See http://www.opengroup.org/onlinepubs/009695399/utilities/mkfifo.html
  */
 
 #include "toys.h"
@@ -12,25 +14,13 @@
 	mode_t mode;
 
 	if (toys.optflags) {
-		long temp;
 		char *end;
-		int len = strlen(toy.mkfifo.mode);
-		temp = strtol(toy.mkfifo.mode, &end, 8);
-		switch (temp) {
-			case LONG_MAX:
-			case LONG_MIN:
-			case 0:
-				if (!errno)
-					break;
-				error_exit("Invalid mode");
-		}
-		if (temp > 0777 || *end || len < 3 || len > 4)
+		mode = (mode_t)strtol(toy.mkfifo.mode, &end, 8);
+		if (end<=toy.mkfifo.mode || *end || mode<0 || mode>0777)
 			error_exit("Invalid mode");
-		mode = (mode_t)temp;
-	} else {
-		mode = 0644;
-	}
+	} else mode = 0644;
 
+	umask(0);
 	for (i = 0; (arg = toys.optargs[i]); i++)
 		if (mkfifo(arg, mode))
 			perror_exit(arg);