rewrite the getcwd part

Also fixes a possible memory leak. Still not ideal, as seems CWD
longer than MAX_PATH is still not supported. But a heap allocation
is not needed anyway, as MAXPATHLEN value is the maximum supported.
This commit is contained in:
Anatol Belski 2016-09-01 21:31:40 +02:00
parent 7020e6f9ae
commit ac82a34185

View file

@ -328,13 +328,9 @@ CWD_API int php_sys_stat_ex(const char *path, zend_stat_t *buf, int lstat) /* {{
buf->st_dev = buf->st_rdev = 0;
} else {
wchar_t cur_path[MAXPATHLEN+1];
DWORD len = sizeof(cur_path);
wchar_t *tmp = cur_path;
while(1) {
DWORD r = GetCurrentDirectoryW(len, tmp);
if (r < len) {
if (tmp[1] == L':') {
if (NULL != _wgetcwd(cur_path, sizeof(cur_path)/sizeof(wchar_t))) {
if (cur_path[1] == L':') {
if (pathw[0] >= L'A' && pathw[0] <= L'Z') {
buf->st_dev = buf->st_rdev = pathw[0] - L'A';
} else {
@ -343,17 +339,8 @@ CWD_API int php_sys_stat_ex(const char *path, zend_stat_t *buf, int lstat) /* {{
} else {
buf->st_dev = buf->st_rdev = -1;
}
break;
} else if (!r) {
buf->st_dev = buf->st_rdev = -1;
break;
} else {
len = r+1;
tmp = (wchar_t*)malloc(len*sizeof(wchar_t));
}
}
if (tmp != cur_path) {
free(tmp);
buf->st_dev = buf->st_rdev = -1;
}
}