int fd;
mode_t mode = 0;
- PHP_WIN32_IOUTIL_CHECK_PATH_W(path, -1)
+ PHP_WIN32_IOUTIL_CHECK_PATH_W(path, -1, 0)
if (flags & O_CREAT) {
va_list arg;
int ret = 0;
DWORD err = 0;
- PHP_WIN32_IOUTIL_CHECK_PATH_W(path, -1)
+ PHP_WIN32_IOUTIL_CHECK_PATH_W(path, -1, 0)
/* TODO extend with mode usage */
if (!CreateDirectoryW(path, NULL)) {
return -1;
}
- PHP_WIN32_IOUTIL_CHECK_PATH_W(pathw, -1)
+ PHP_WIN32_IOUTIL_CHECK_PATH_W(pathw, -1, 0)
if (!CreateDirectoryW(pathw, NULL)) {
err = GetLastError();
int ret = 0;
DWORD err = 0;
- PHP_WIN32_IOUTIL_CHECK_PATH_W(path, -1)
+ PHP_WIN32_IOUTIL_CHECK_PATH_W(path, -1, 0)
if (!DeleteFileW(path)) {
err = GetLastError();
int ret = 0;
DWORD err = 0;
- PHP_WIN32_IOUTIL_CHECK_PATH_W(path, -1)
+ PHP_WIN32_IOUTIL_CHECK_PATH_W(path, -1, 0)
if (!RemoveDirectoryW(path)) {
err = GetLastError();
int ret = 0;
DWORD err = 0;
- PHP_WIN32_IOUTIL_CHECK_PATH_W(oldname, -1)
- PHP_WIN32_IOUTIL_CHECK_PATH_W(newname, -1)
+ PHP_WIN32_IOUTIL_CHECK_PATH_W(oldname, -1, 0)
+ PHP_WIN32_IOUTIL_CHECK_PATH_W(newname, -1, 0)
if (!MoveFileExW(oldname, newname, MOVEFILE_REPLACE_EXISTING|MOVEFILE_COPY_ALLOWED)) {
pathw = php_win32_ioutil_any_to_w(path); \
} while (0);
-#define PHP_WIN32_IOUTIL_CHECK_PATH_W(pathw, ret) do { \
- size_t len = wcslen(pathw); \
- if (len >= 1 && L' ' == pathw[len-1] || \
- len > 1 && !PHP_WIN32_IOUTIL_IS_SLASHW(pathw[len-2]) && L'.' != pathw[len-2] && L'.' == pathw[len-1] \
- ) { \
+#define PHP_WIN32_IOUTIL_PATH_IS_OK_W(pathw, len) \
+ (!((len) >= 1 && L' ' == pathw[(len)-1] || \
+ (len) > 1 && !PHP_WIN32_IOUTIL_IS_SLASHW(pathw[(len)-2]) && L'.' != pathw[(len)-2] && L'.' == pathw[(len)-1]))
+
+#define PHP_WIN32_IOUTIL_CHECK_PATH_W(pathw, ret, dealloc) do { \
+ if (!PHP_WIN32_IOUTIL_PATH_IS_OK_W(pathw, wcslen(pathw))) { \
+ if (dealloc) { \
+ free(pathw); \
+ } \
SET_ERRNO_FROM_WIN32_CODE(ERROR_ACCESS_DENIED); \
return ret; \
} \
return -1;
}
- PHP_WIN32_IOUTIL_CHECK_PATH_W(pathw, -1)
+ PHP_WIN32_IOUTIL_CHECK_PATH_W(pathw, -1, 1)
ret = _waccess(pathw, mode);
_get_errno(&err);
return -1;
}
- PHP_WIN32_IOUTIL_CHECK_PATH_W(pathw, -1)
+ PHP_WIN32_IOUTIL_CHECK_PATH_W(pathw, -1, 1)
if (flags & O_CREAT) {
va_list arg;
return -1;
}
- PHP_WIN32_IOUTIL_CHECK_PATH_W(pathw, -1)
+ PHP_WIN32_IOUTIL_CHECK_PATH_W(pathw, -1, 1)
if (!DeleteFileW(pathw)) {
err = GetLastError();
return -1;
}
- PHP_WIN32_IOUTIL_CHECK_PATH_W(pathw, -1)
+ PHP_WIN32_IOUTIL_CHECK_PATH_W(pathw, -1, 1)
if (!RemoveDirectoryW(pathw)) {
err = GetLastError();
__forceinline static FILE *php_win32_ioutil_fopen(const char *patha, const char *modea)
{/*{{{*/
FILE *ret;
- wchar_t *pathw = php_win32_ioutil_any_to_w(patha);
- wchar_t *modew = php_win32_ioutil_ascii_to_w(modea);
+ wchar_t *pathw;
+ wchar_t *modew;
int err = 0;
- if (!pathw || !modew) {
- free(pathw);
- free(modew);
+ pathw = php_win32_ioutil_any_to_w(patha);
+ if (!pathw) {
SET_ERRNO_FROM_WIN32_CODE(ERROR_INVALID_PARAMETER);
return NULL;
}
- PHP_WIN32_IOUTIL_CHECK_PATH_W(pathw, NULL)
+ PHP_WIN32_IOUTIL_CHECK_PATH_W(pathw, NULL, 1)
+
+ modew = php_win32_ioutil_ascii_to_w(modea);
+ if (!modew) {
+ free(pathw);
+ SET_ERRNO_FROM_WIN32_CODE(ERROR_INVALID_PARAMETER);
+ return NULL;
+ }
ret = _wfopen(pathw, modew);
_get_errno(&err);
__forceinline static int php_win32_ioutil_rename(const char *oldnamea, const char *newnamea)
{/*{{{*/
- wchar_t *oldnamew = php_win32_ioutil_any_to_w(oldnamea);
- wchar_t *newnamew = php_win32_ioutil_any_to_w(newnamea);
+ wchar_t *oldnamew;
+ wchar_t *newnamew;
int ret;
DWORD err = 0;
- if (!oldnamew || !newnamew) {
- free(oldnamew);
- free(newnamew);
+ oldnamew = php_win32_ioutil_any_to_w(oldnamea);
+ if (!oldnamew) {
SET_ERRNO_FROM_WIN32_CODE(ERROR_INVALID_PARAMETER);
return -1;
}
+ PHP_WIN32_IOUTIL_CHECK_PATH_W(oldnamew, -1, 1)
- PHP_WIN32_IOUTIL_CHECK_PATH_W(oldnamew, -1)
- PHP_WIN32_IOUTIL_CHECK_PATH_W(newnamew, -1)
+ newnamew = php_win32_ioutil_any_to_w(newnamea);
+ if (!newnamew) {
+ free(oldnamew);
+ SET_ERRNO_FROM_WIN32_CODE(ERROR_INVALID_PARAMETER);
+ return -1;
+ } else if (!PHP_WIN32_IOUTIL_PATH_IS_OK_W(newnamew, wcslen(newnamew))) {
+ free(oldnamew);
+ free(newnamew);
+ SET_ERRNO_FROM_WIN32_CODE(ERROR_ACCESS_DENIED);
+ return -1;
+ }
ret = php_win32_ioutil_rename_w(oldnamew, newnamew);
err = GetLastError();
return -1;
}
- PHP_WIN32_IOUTIL_CHECK_PATH_W(pathw, -1)
+ PHP_WIN32_IOUTIL_CHECK_PATH_W(pathw, -1, 1)
ret = _wchmod(pathw, mode);
_get_errno(&err);