aboutsummaryrefslogtreecommitdiff
path: root/toys/mkfifo.c
diff options
context:
space:
mode:
Diffstat (limited to 'toys/mkfifo.c')
-rw-r--r--toys/mkfifo.c39
1 files changed, 39 insertions, 0 deletions
diff --git a/toys/mkfifo.c b/toys/mkfifo.c
new file mode 100644
index 00000000..f7cc5b6b
--- /dev/null
+++ b/toys/mkfifo.c
@@ -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;
+}