changeset 1819:968a9cfcdb37

(S_IRWXU, S_IRWXG, S_IRWXO): Define if not defined. Use proper mode_t types and macros. Don't assume the traditional Unix values for mode bits.
author Jim Meyering <jim@meyering.net>
date Mon, 26 Apr 1999 13:22:23 +0000
parents b2644b45e17f
children 6908e7ed16b7
files lib/mkdir.c
diffstat 1 files changed, 15 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/lib/mkdir.c
+++ b/lib/mkdir.c
@@ -34,6 +34,16 @@
 # define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
 #endif
 
+#ifndef S_IRWXU
+# define S_IRWXU 0700
+#endif
+#ifndef S_IRWXG
+# define S_IRWXG 0070
+#endif
+#ifndef S_IRWXO
+# define S_IRWXO 0007
+#endif
+
 /* mkdir adapted from GNU tar.  */
 
 /* Make directory DPATH, with permission mode DMODE.
@@ -48,9 +58,10 @@
    subroutine didn't return EEXIST.  It does now.  */
 
 int
-mkdir (const char *dpath, int dmode)
+mkdir (const char *dpath, mode_t dmode)
 {
   pid_t cpid;
+  mode_t mode;
   int status;
   struct stat statbuf;
 
@@ -75,8 +86,9 @@
 	 process is going away anyway, we zap its umask.
 	 This won't suffice to set SUID, SGID, etc. on this
 	 directory, so the parent process calls chmod afterward.  */
-      status = umask (0);	/* Get current umask.  */
-      umask (status | (0777 & ~dmode));	/* Set for mkdir.  */
+      mode = umask (0);	/* Get current umask.  */
+      /* Set for mkdir.  */
+      umask (mode | ((S_IRWXU | S_IRWXG | S_IRWXO) & ~dmode));
       execl ("/bin/mkdir", "mkdir", dpath, (char *) 0);
       _exit (1);