diff toys/mkfifo.c @ 157:714f4c051594

Add initial mkfifo implementation
author Charlie Shepherd <masterdriverz@gentoo.org>
date Wed, 07 Nov 2007 00:11:20 +0000
parents
children 14fa82969ea3
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toys/mkfifo.c	Wed Nov 07 00:11:20 2007 +0000
@@ -0,0 +1,39 @@
+/* vi: set sw=4 ts=4: */
+/*
+ * mkfifo.c: Create a named pipe.
+ */
+
+#include "toys.h"
+
+int mkfifo_main(void)
+{
+	char *arg;
+	int i;
+	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)
+			error_exit("Invalid mode");
+		mode = (mode_t)temp;
+	} else {
+		mode = 0644;
+	}
+
+	for (i = 0; (arg = toys.optargs[i]); i++)
+		if (mkfifo(arg, mode))
+			perror_exit(arg);
+
+	return 0;
+}