Commit 23524fb9 authored by Jim Blandy's avatar Jim Blandy
Browse files

* config.h.in: Add #undefs for HAVE_MKDIR and HAVE_RMDIR, for

configure to edit.
* sysdep.c [not HAVE_MKDIR] (mkdir): New function, taken from tar,
for use on systems lacking the mkdir function.
[not HAVE_RMDIR] (rmdir): New function, taken from tar, for use on
systems lacking the rmdir function.
parent d50a54c0
...@@ -113,8 +113,9 @@ and this notice must be preserved on all copies. */ ...@@ -113,8 +113,9 @@ and this notice must be preserved on all copies. */
#undef HAVE_XRMSETDATABASE #undef HAVE_XRMSETDATABASE
#undef HAVE_XSCREENRESOURCESTRING #undef HAVE_XSCREENRESOURCESTRING
#undef HAVE_MKDIR
#undef HAVE_RMDIR
#undef HAVE_RANDOM #undef HAVE_RANDOM
#undef HAVE_BCOPY #undef HAVE_BCOPY
#undef HAVE_AIX_SMT_EXP #undef HAVE_AIX_SMT_EXP
......
...@@ -3091,6 +3091,118 @@ readdirver (dirp) ...@@ -3091,6 +3091,118 @@ readdirver (dirp)
#endif /* VMS */ #endif /* VMS */
#endif /* NONSYSTEM_DIR_LIBRARY */ #endif /* NONSYSTEM_DIR_LIBRARY */
/* mkdir and rmdir functions, for systems which don't have them. */
#ifndef HAVE_MKDIR
/*
* Written by Robert Rother, Mariah Corporation, August 1985.
*
* If you want it, it's yours. All I ask in return is that if you
* figure out how to do this in a Bourne Shell script you send me
* a copy.
* sdcsvax!rmr or rmr@uscd
*
* 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.
*/
/*
* Make a directory.
*/
int
mkdir (dpath, dmode)
char *dpath;
int dmode;
{
int cpid, 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;
switch (cpid = fork ())
{
case -1: /* Error in fork() */
return (-1); /* Errno is set already */
case 0: /* Child process */
/*
* Cheap hack to set mode of new directory. Since this
* child process is going away anyway, we zap its umask.
* FIXME, this won't suffice to set SUID, SGID, etc. on this
* directory. Does anybody care?
*/
status = umask (0); /* Get current umask */
status = umask (status | (0777 & ~dmode)); /* Set for mkdir */
execl ("/bin/mkdir", "mkdir", dpath, (char *) 0);
_exit (-1); /* Can't exec /bin/mkdir */
default: /* Parent process */
while (cpid != wait (&status)); /* Wait for kid to finish */
}
if (WIFSIGNALED (status) || WEXITSTATUS (status) != 0)
{
errno = EIO; /* We don't know why, but */
return -1; /* /bin/mkdir failed */
}
return 0;
}
#endif /* not HAVE_MKDIR */
#ifndef HAVE_RMDIR
int
rmdir (dpath)
char *dpath;
{
int cpid, status;
struct stat statbuf;
if (stat (dpath, &statbuf) != 0)
{
/* Stat just set errno. We don't have to */
return -1;
}
switch (cpid = fork ())
{
case -1: /* Error in fork() */
return (-1); /* Errno is set already */
case 0: /* Child process */
execl ("/bin/rmdir", "rmdir", dpath, (char *) 0);
_exit (-1); /* Can't exec /bin/mkdir */
default: /* Parent process */
while (cpid != wait (&status)); /* Wait for kid to finish */
}
if (WIFSIGNALED (status) || WEXITSTATUS (status) != 0)
{
errno = EIO; /* We don't know why, but */
return -1; /* /bin/mkdir failed */
}
return 0;
}
#endif /* !HAVE_RMDIR */
/* Functions for VMS */ /* Functions for VMS */
#ifdef VMS #ifdef VMS
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment