summaryrefslogtreecommitdiff
path: root/lib/mkdir.c
diff options
context:
space:
mode:
authorJim Meyering <jim@meyering.net>2000-06-19 06:51:58 +0000
committerJim Meyering <jim@meyering.net>2000-06-19 06:51:58 +0000
commita49d66ffdf6cc9ad63f29b6cc150a36fcad6f5df (patch)
tree9a19fdbfce1d520e5ee0a44aadc82f61e1760a2c /lib/mkdir.c
parentfa168b1e063736fed62c4cc1aae2c8b87c7a2c5c (diff)
downloadcoreutils-a49d66ffdf6cc9ad63f29b6cc150a36fcad6f5df.tar.xz
.
Diffstat (limited to 'lib/mkdir.c')
-rw-r--r--lib/mkdir.c108
1 files changed, 0 insertions, 108 deletions
diff --git a/lib/mkdir.c b/lib/mkdir.c
deleted file mode 100644
index 1829a9e25..000000000
--- a/lib/mkdir.c
+++ /dev/null
@@ -1,108 +0,0 @@
-/* BSD compatible make directory function for System V
- Copyright (C) 1988, 1990, 1998 Free Software Foundation, Inc.
-
- 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, 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. */
-
-#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
-
-#if STAT_MACROS_BROKEN
-# undef S_ISDIR
-#endif
-
-#if !defined(S_ISDIR) && defined(S_IFDIR)
-# 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.
-
- Written by Robert Rother, Mariah Corporation, August 1985
- (sdcsvax!rmr or rmr@uscd). If you want it, it's yours.
-
- Severely hacked over by John Gilmore to make a 4.2BSD compatible
- subroutine. 11Mar86; hoptoad!gnu
-
- Modified by rmtodd@uokmax 6-28-87 -- when making an already existing dir,
- subroutine didn't return EEXIST. It does now. */
-
-int
-mkdir (const char *dpath, mode_t dmode)
-{
- pid_t cpid;
- mode_t mode;
- int status;
- struct stat statbuf;
-
- if (stat (dpath, &statbuf) == 0)
- {
- errno = EEXIST; /* stat worked, so it already exists. */
- return -1;
- }
-
- /* If stat fails for a reason other than non-existence, return error. */
- if (errno != ENOENT)
- return -1;
-
- cpid = fork ();
- switch (cpid)
- {
- 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. */
- 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);
-
- default: /* Parent process. */
- /* Wait for kid to finish. */
- while (wait (&status) != cpid)
- /* Do nothing. */ ;
-
- if (status)
- {
- /* /bin/mkdir failed. */
- errno = EIO;
- return -1;
- }
- return chmod (dpath, dmode);
- }
-}