-/* mkdir.c -- BSD compatible make directory function for System V
+/* BSD compatible make directory function for System V
Copyright (C) 1988, 1990 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
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., 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-#ifdef HAVE_CONFIG_H
-#if defined (CONFIG_BROKETS)
-/* We use <config.h> instead of "config.h" so that a compilation
- using -I. -I$srcdir will use ./config.h rather than $srcdir/config.h
- (which it would do because it found this file in $srcdir). */
-#include <config.h>
-#else
-#include "config.h"
-#endif
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
+#if HAVE_CONFIG_H
+# include <config.h>
#endif
#include <sys/types.h>
#include <sys/stat.h>
-
#include <errno.h>
#ifndef errno
extern int errno;
#endif
-#ifdef STAT_MACROS_BROKEN
-#undef S_ISDIR
+#if STAT_MACROS_BROKEN
+# undef S_ISDIR
#endif
#if !defined(S_ISDIR) && defined(S_IFDIR)
-#define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
+# define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
#endif
-#include "safe-stat.h"
-
/* mkdir adapted from GNU tar. */
/* Make directory DPATH, with permission mode DMODE.
int cpid, status;
struct stat statbuf;
- if (SAFE_STAT (dpath, &statbuf) == 0)
+ if (stat (dpath, &statbuf) == 0)
{
- errno = EEXIST; /* stat worked, it already exists */
+ errno = EEXIST; /* stat worked, so it already exists. */
return -1;
}
cpid = fork ();
switch (cpid)
{
- case -1: /* cannot fork */
- return -1; /* errno already set */
-
- case 0: /* child process */
+ case -1: /* Cannot fork. */
+ return -1; /* errno is already set. */
+ case 0: /* Child process. */
/* Cheap hack to set mode of new directory. Since this child
- 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);
- umask (status | (0777 & ~dmode));
+ 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. */
execl ("/bin/mkdir", "mkdir", dpath, (char *) 0);
_exit (1);
- default: /* parent process */
-
+ default: /* Parent process. */
/* Wait for kid to finish. */
-
while (wait (&status) != cpid)
/* Do nothing. */ ;
if (status & 0xFFFF)
{
-
/* /bin/mkdir failed. */
-
errno = EIO;
return -1;
}