passwd: rework:
[oweals/busybox.git] / libbb / make_directory.c
index d07ccb93c0f524cac8d5373d4b21bcd06557c4f3..fbec4e20e3081816ac2708705ec0a5c5b62201e6 100644 (file)
@@ -4,20 +4,7 @@
  *
  * 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
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
+ * Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
  */
 
 /* Mar 5, 2003    Manuel Novoa III
@@ -49,7 +36,14 @@ int bb_make_directory (char *path, long mode, int flags)
        struct stat st;
 
        mask = umask(0);
-       umask(mask & ~0300);
+       if (mode == -1) {
+               umask(mask);
+               mode = (S_IXUSR | S_IXGRP | S_IXOTH |
+                               S_IWUSR | S_IWGRP | S_IWOTH |
+                               S_IRUSR | S_IRGRP | S_IROTH) & ~mask;
+       } else {
+               umask(mask & ~0300);
+       }
 
        do {
                c = 0;
@@ -105,6 +99,6 @@ int bb_make_directory (char *path, long mode, int flags)
 
        } while (1);
 
-       bb_perror_msg ("Cannot %s directory `%s'", fail_msg, path);
+       bb_perror_msg ("cannot %s directory '%s'", fail_msg, path);
        return -1;
 }