aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCharlie Shepherd <masterdriverz@gentoo.org>2007-11-07 00:11:20 +0000
committerCharlie Shepherd <masterdriverz@gentoo.org>2007-11-07 00:11:20 +0000
commit60c2e3eb81abfaeea2c893d8a69d9b9802877d04 (patch)
tree3481cd5528cc0966301caa83804ad1f0bfc0708e
parent2c226859cfc911c4a1eea009897050a16714aeec (diff)
downloadtoybox-60c2e3eb81abfaeea2c893d8a69d9b9802877d04.tar.gz
Add initial mkfifo implementation
-rw-r--r--toys/Config.in11
-rw-r--r--toys/mkfifo.c39
-rw-r--r--toys/toylist.h6
3 files changed, 56 insertions, 0 deletions
diff --git a/toys/Config.in b/toys/Config.in
index fbc633fe..e9ab177d 100644
--- a/toys/Config.in
+++ b/toys/Config.in
@@ -189,6 +189,17 @@ config MKE2FS_EXTENDED
journal_dev Set by -J device=XXX
sparse_super Don't allocate huge numbers of redundant superblocks
+config MKFIFO
+ bool "mkfifo"
+ default y
+ help
+ usage: mkfifo [-m mode] name...
+
+ Makes a named pipe at name.
+
+ -m mode The mode of the pipe(s) created by mkfifo. It defaults to 0644.
+ The format is in octal, optionally preceded by a leading zero.
+
config ONEIT
bool "oneit"
default y
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;
+}
diff --git a/toys/toylist.h b/toys/toylist.h
index b717c93b..2c308ef7 100644
--- a/toys/toylist.h
+++ b/toys/toylist.h
@@ -61,9 +61,14 @@ struct toysh_data {
char *command;
};
+struct mkfifo_data {
+ char *mode;
+};
+
extern union toy_union {
struct df_data df;
struct mke2fs_data mke2fs;
+ struct mkfifo_data mkfifo;
struct sleep_data sleep;
struct touch_data touch;
struct toysh_data toysh;
@@ -104,6 +109,7 @@ USE_FALSE(NEWTOY(false, NULL, TOYFLAG_BIN))
USE_HELLO(NEWTOY(hello, NULL, TOYFLAG_USR|TOYFLAG_BIN))
USE_HELP(NEWTOY(help, "<1", TOYFLAG_BIN))
USE_MKE2FS(NEWTOY(mke2fs, MKE2FS_OPTSTRING, TOYFLAG_SBIN))
+USE_MKFIFO(NEWTOY(mkfifo, "<1m:", TOYFLAG_BIN))
USE_ONEIT(NEWTOY(oneit, "+<1p", TOYFLAG_SBIN))
USE_PWD(NEWTOY(pwd, NULL, TOYFLAG_BIN))
USE_READLINK(NEWTOY(readlink, "<1f", TOYFLAG_BIN))