summaryrefslogtreecommitdiff
path: root/main/streams/plain_wrapper.c
diff options
context:
space:
mode:
authorAntony Dovgal <tony2001@php.net>2006-01-16 19:48:23 +0000
committerAntony Dovgal <tony2001@php.net>2006-01-16 19:48:23 +0000
commit3062348c75963e14a4030faedd08f81bdd0120f7 (patch)
tree706be897cd9945e9f25eb4bfff7f547cd31ec348 /main/streams/plain_wrapper.c
parentbc410c3863eb4aba783ec2bfd1ccbc723589cf9c (diff)
downloadphp-git-3062348c75963e14a4030faedd08f81bdd0120f7.tar.gz
MFH: fix #35999 (recursive mkdir() does not work with relative path like "foo/bar")
Diffstat (limited to 'main/streams/plain_wrapper.c')
-rw-r--r--main/streams/plain_wrapper.c17
1 files changed, 11 insertions, 6 deletions
diff --git a/main/streams/plain_wrapper.c b/main/streams/plain_wrapper.c
index c61bcc4862..f05283fe3b 100644
--- a/main/streams/plain_wrapper.c
+++ b/main/streams/plain_wrapper.c
@@ -1095,12 +1095,17 @@ static int php_plain_files_mkdir(php_stream_wrapper *wrapper, char *dir, int mod
offset = p - buf + 1;
}
- /* find a top level directory we need to create */
- while ((p = strrchr(buf + offset, DEFAULT_SLASH))) {
- *p = '\0';
- if (VCWD_STAT(buf, &sb) == 0) {
- *p = DEFAULT_SLASH;
- break;
+ if (p && dir_len == 1) {
+ /* buf == "DEFAULT_SLASH" */
+ }
+ else {
+ /* find a top level directory we need to create */
+ while ( (p = strrchr(buf + offset, DEFAULT_SLASH)) || (p = strrchr(buf, DEFAULT_SLASH)) ) {
+ *p = '\0';
+ if (VCWD_STAT(buf, &sb) == 0) {
+ *p = DEFAULT_SLASH;
+ break;
+ }
}
}