Rewrite -c and -b processing to shrink code and eliminate buffer overrun.
[oweals/busybox.git] / coreutils / mkdir.c
index 92357a665f7cf8a01afb5fdbb80ebc0c1d9057a8..d78f57e2bb4786288d729528189416d62d27ea86 100644 (file)
@@ -2,7 +2,7 @@
 /*
  * Mini mkdir implementation for busybox
  *
- * Copyright (C) 1999,2000 by Lineo, inc.
+ * Copyright (C) 1999,2000,2001 by Lineo, inc.
  * Written by Erik Andersen <andersen@lineo.com>, <andersee@debian.org>
  *
  * This program is free software; you can redistribute it and/or modify
  *
  */
 
-#include "busybox.h"
-#define bb_need_name_too_long
-#define BB_DECLARE_EXTERN
-#include "messages.c"
-
 #include <stdio.h>
 #include <errno.h>
+#include <string.h>
+#include <stdlib.h>
+#include "busybox.h"
+
 
 static int parentFlag = FALSE;
 static mode_t mode = 0777;
@@ -46,12 +45,11 @@ extern int mkdir_main(int argc, char **argv)
                        switch (**argv) {
                        case 'm':
                                if (--argc == 0)
-                                       usage(mkdir_usage);
+                                       show_usage();
                                /* Find the specified modes */
                                mode = 0;
                                if (parse_mode(*(++argv), &mode) == FALSE) {
-                                       error_msg("Unknown mode: %s\n", *argv);
-                                       return EXIT_FAILURE;
+                                       error_msg_and_die("Unknown mode: %s", *argv);
                                }
                                /* Set the umask for this process so it doesn't 
                                 * screw up whatever the user just entered. */
@@ -62,7 +60,7 @@ extern int mkdir_main(int argc, char **argv)
                                parentFlag = TRUE;
                                break;
                        default:
-                               usage(mkdir_usage);
+                               show_usage();
                        }
                }
                argc--;
@@ -70,7 +68,7 @@ extern int mkdir_main(int argc, char **argv)
        }
 
        if (argc < 1) {
-               usage(mkdir_usage);
+               show_usage();
        }
 
        while (argc > 0) {
@@ -79,22 +77,19 @@ extern int mkdir_main(int argc, char **argv)
                char buf[BUFSIZ + 1];
 
                if (strlen(*argv) > BUFSIZ - 1) {
-                       error_msg(name_too_long);
-                       return EXIT_FAILURE;
+                       error_msg_and_die(name_too_long);
                }
                strcpy(buf, *argv);
                status = stat(buf, &statBuf);
                if (parentFlag == FALSE && status != -1 && errno != ENOENT) {
-                       error_msg("%s: File exists\n", buf);
-                       return EXIT_FAILURE;
+                       error_msg_and_die("%s: File exists", buf);
                }
                if (parentFlag == TRUE) {
                        strcat(buf, "/");
                        create_path(buf, mode);
                } else {
                        if (mkdir(buf, mode) != 0 && parentFlag == FALSE) {
-                               perror(buf);
-                               return EXIT_FAILURE;
+                               perror_msg_and_die(buf);
                        }
                }
                argc--;