Patch from Denis Vlasenko to constify things and fix a few typos.
[oweals/busybox.git] / coreutils / mkfifo.c
index c74402d4c992d14f4e02d0422a1f0c9f3c3729f5..77e0e6dd8fdb02c6cea84bdbe2d4f2f9204207b6 100644 (file)
@@ -1,8 +1,8 @@
 /* vi: set sw=4 ts=4: */
 /*
- * Mini mkfifo implementation for busybox
+ * mkfifo implementation for busybox
  *
- * Copyright (C) 1999 by Randolph Chung <tausq@debian.org>
+ * Copyright (C) 2003  Manuel Novoa III  <mjn3@codepoet.org>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  *
  */
 
-#include "internal.h"
-#include <stdio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <errno.h>
-
-static const char mkfifo_usage[] = "mkfifo [OPTIONS] name\n\n"
-       "Create the named fifo\n\n"
+/* BB_AUDIT SUSv3 compliant */
+/* http://www.opengroup.org/onlinepubs/007904975/utilities/mkfifo.html */
 
-       "Options:\n"
-       "\t-m\tcreate the fifo with the specified mode; default = a=rw-umask\n";
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include "busybox.h"
+#include "libcoreutils/coreutils.h"
 
 extern int mkfifo_main(int argc, char **argv)
 {
-       char *thisarg;
-       mode_t mode = 0666;
+       mode_t mode;
+       int retval = EXIT_SUCCESS;
 
-       argc--;
-       argv++;
+       mode = getopt_mk_fifo_nod(argc, argv);
 
-       /* Parse any options */
-       while (argc > 1) {
-               if (**argv != '-')
-                       usage(mkfifo_usage);
-               thisarg = *argv;
-               thisarg++;
-               switch (*thisarg) {
-               case 'm':
-                       argc--;
-                       argv++;
-                       parse_mode(*argv, &mode);
-                       break;
-               default:
-                       usage(mkfifo_usage);
-               }
-               argc--;
-               argv++;
-       }
-       if (argc < 1)
-               usage(mkfifo_usage);
-       if (mkfifo(*argv, mode) < 0) {
-               perror("mkfifo");
-               exit(255);
-       } else {
-               exit(TRUE);
+       if (!*(argv += optind)) {
+               bb_show_usage();
        }
+
+       do {
+               if (mkfifo(*argv, mode) < 0) {
+                       bb_perror_msg("%s", *argv);     /* Avoid multibyte problems. */
+                       retval = EXIT_FAILURE;
+               }
+       } while (*++argv);
+
+       return retval;
 }