From: Jim Meyering Date: Mon, 19 Jun 2000 06:51:58 +0000 (+0000) Subject: . X-Git-Tag: cvs-readonly~6566 X-Git-Url: https://erislabs.net/gitweb/?a=commitdiff_plain;h=59350b88fa6f4ed4768da8f2490cf4cfd486cd5b;p=gnulib.git . --- 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 -#endif - -#include -#include -#include -#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); - } -}