]> diplodocus.org Git - nmh/blobdiff - sbr/makedir.c
Added cpytrim() function. Unlike trimcpy(), it does not modify
[nmh] / sbr / makedir.c
index e4c3c26c15f60baea3645bf6ecadd814d0fe0400..98a5d7f367129aa3d22c2cd9962a7d07cc115534 100644 (file)
@@ -2,7 +2,9 @@
 /*
  * makedir.c -- make a directory
  *
- * $Id$
+ * This code is Copyright (c) 2002, by the authors of nmh.  See the
+ * COPYRIGHT file in the root directory of the nmh distribution for
+ * complete copyright information.
  */
 
 /*
@@ -13,8 +15,6 @@
 #include <errno.h>
 #include <sys/param.h>
 #include <sys/file.h>
-
-extern int errno;
        
 int
 makedir (char *dir)
@@ -30,13 +30,16 @@ makedir (char *dir)
     fflush(stdout);
 
     if (!(folder_perms_ASCII = context_find ("folder-protect")))
-       folder_perms_ASCII = foldprot;  /* defaults to "0700" */
+       folder_perms_ASCII = foldprot;  /* defaults to "700" */
     
-    /* Call strtoul() with radix=0, which means it'll determine the base by
-       looking at the first digit.  That way it'll know "0700" is an octal
-       constant (and if someone gets wacky and changes the representation to hex
-       it'll still work). */
-    folder_perms = strtoul(folder_perms_ASCII, NULL, 0);
+    /* Because mh-profile.man documents "Folder-Protect:" as an octal constant,
+       and we don't want to force the user to remember to include a leading
+       zero, we call atooi(folder_perms_ASCII) here rather than
+       strtoul(folder_perms_ASCII, NULL, 0).  Therefore, if anyone ever tries to
+       specify a mode in say, hex, they'll get garbage.  (I guess nmh uses its
+       atooi() function rather than calling strtoul() with a radix of 8 because
+       some ancient platforms are missing that functionality. */
+    folder_perms = atooi(folder_perms_ASCII);
 
     /* Folders have definite desired permissions that are set -- we don't want
        to interact with the umask.  Clear it temporarily. */
@@ -82,7 +85,7 @@ makedir (char *dir)
           nested directories like the above code can.
 
           -- Dan Harkless <dan-nmh@dilvish.speed.net> */
-       switch (pid = vfork()) {
+       switch (pid = fork()) {
            case -1: 
                advise ("fork", "unable to");
                return 0;
@@ -91,8 +94,8 @@ makedir (char *dir)
                setgid (getgid ());
                setuid (getuid ());
                
-               execl ("/bin/mkdir", "mkdir", dir, NULL);
-               execl ("/usr/bin/mkdir", "mkdir", dir, NULL);
+               execl ("/bin/mkdir", "mkdir", dir, (void *) NULL);
+               execl ("/usr/bin/mkdir", "mkdir", dir, (void *) NULL);
                fprintf (stderr, "unable to exec ");
                perror ("mkdir");
                _exit (-1);