diff toys/mkfifo.c @ 551:2548e6e590b2

Add string to mode_t parser added new function string_to_mode(char *m_string, mode_t base) which parses a given string and converts it to a mode_t. If either + or - are part of m_string the permissions are either added or removed from base. Currently support for permision copy is missing (e.g. g=u), but all other flags should work. Format for m_string: either symbolic modes or octal representation. symbolic modes: [auog][[+-=][rwxst]*] examples: string_to_mode("u=rwx,g=rw,o=r", 0); string_to_mode("a-x", 0777); string_to_mode("0744", 0);
author Daniel Walter <d.walter@0x90.at>
date Mon, 19 Mar 2012 19:57:56 -0500
parents 6fedb88874a4
children
line wrap: on
line diff
--- a/toys/mkfifo.c	Mon Mar 19 19:19:21 2012 -0500
+++ b/toys/mkfifo.c	Mon Mar 19 19:57:56 2012 -0500
@@ -8,7 +8,7 @@
  *
  * TODO: Add -m
 
-USE_MKFIFO(NEWTOY(mkfifo, "<1", TOYFLAG_BIN))
+USE_MKFIFO(NEWTOY(mkfifo, "<1m:", TOYFLAG_BIN))
 
 config MKFIFO
 	bool "mkfifo"
@@ -22,16 +22,21 @@
 #include "toys.h"
 
 DEFINE_GLOBALS(
-	long mode;
+	char *m_string;
+	mode_t mode;
 )
 
 #define TT this.mkfifo
+#define FLAG_m (1)
 
 void mkfifo_main(void)
 {
 	char **s;
 
 	TT.mode = 0666;
+	if (toys.optflags & FLAG_m) {
+		TT.mode = string_to_mode(TT.m_string, 0);
+	}
 
 	for (s = toys.optargs; *s; s++) {
 		if (mknod(*s, S_IFIFO | TT.mode, 0) < 0) {