summaryrefslogtreecommitdiff
path: root/gnu/libexec/uucp/libunix/mkdirs.c
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/libexec/uucp/libunix/mkdirs.c')
-rw-r--r--gnu/libexec/uucp/libunix/mkdirs.c20
1 files changed, 11 insertions, 9 deletions
diff --git a/gnu/libexec/uucp/libunix/mkdirs.c b/gnu/libexec/uucp/libunix/mkdirs.c
index a4e0b67bb8c3..9b5b23ffd7b1 100644
--- a/gnu/libexec/uucp/libunix/mkdirs.c
+++ b/gnu/libexec/uucp/libunix/mkdirs.c
@@ -29,17 +29,19 @@ fsysdep_make_dirs (zfile, fpublic)
if (*z == '/' && z != zcopy)
{
*z = '\0';
- if (! fsysdep_directory (zcopy))
+ if (mkdir (zcopy, imode) != 0
+ && errno != EEXIST
+ && (errno != EACCES || ! fsysdep_directory (zcopy)))
{
- if (mkdir (zcopy, imode) != 0)
- {
- ulog (LOG_ERROR, "mkdir (%s): %s", zcopy,
- strerror (errno));
- ubuffree (zcopy);
- return FALSE;
- }
+ ulog (LOG_ERROR, "mkdir (%s): %s", zcopy,
+ strerror (errno));
+ ubuffree (zcopy);
+ return FALSE;
}
- *z = '/';
+ *z = '/'; /* replace '/' in its place */
+ /* now skips over multiple '/' in name */
+ while ( (*(z + 1)) && (*(z + 1)) == '/')
+ z++;
}
}