diff options
| author | Anatol Belski <ab@php.net> | 2013-10-30 20:46:08 +0100 |
|---|---|---|
| committer | Anatol Belski <ab@php.net> | 2013-10-30 20:46:08 +0100 |
| commit | abb962d54d8a4d22095975d94cda7ea5d2c56fa8 (patch) | |
| tree | 4fb51594bef5ec3e690fe9de8a3081bfa7cb25d3 /Zend/zend_virtual_cwd.c | |
| parent | fc707a27ff1ede5494318e9d0eafd0ebb87d1d2e (diff) | |
| download | php-git-abb962d54d8a4d22095975d94cda7ea5d2c56fa8.tar.gz | |
compact the code to preserve the error info after state freeing
Diffstat (limited to 'Zend/zend_virtual_cwd.c')
| -rw-r--r-- | Zend/zend_virtual_cwd.c | 284 |
1 files changed, 42 insertions, 242 deletions
diff --git a/Zend/zend_virtual_cwd.c b/Zend/zend_virtual_cwd.c index 75bf3d2522..f281606f9d 100644 --- a/Zend/zend_virtual_cwd.c +++ b/Zend/zend_virtual_cwd.c @@ -127,7 +127,6 @@ static int php_check_dots(const char *element, int n) #define TOKENIZER_STRING "/" #endif - /* default macros */ #ifndef IS_DIRECTORY_UP @@ -158,6 +157,16 @@ static int php_check_dots(const char *element, int n) (s)->cwd = NULL; #ifdef TSRM_WIN32 +# define CWD_STATE_FREE_ERR(state) do { \ + DWORD last_error = GetLastError(); \ + CWD_STATE_FREE(state); \ + SetLastError(last_error); \ + } while (0) +#else +# define CWD_STATE_FREE_ERR(state) CWD_STATE_FREE(state) +#endif + +#ifdef TSRM_WIN32 #ifdef CTL_CODE #undef CTL_CODE @@ -432,7 +441,6 @@ static void cwd_globals_ctor(virtual_cwd_globals *cwd_g TSRMLS_DC) /* {{{ */ static void cwd_globals_dtor(virtual_cwd_globals *cwd_g TSRMLS_DC) /* {{{ */ { -/* CWD_STATE_FREE(&cwd_globals->cwd); */ realpath_cache_clean(TSRMLS_C); } /* }}} */ @@ -1488,9 +1496,6 @@ CWD_API FILE *virtual_fopen(const char *path, const char *mode TSRMLS_DC) /* {{{ { cwd_state new_state; FILE *f; -#ifdef TSRM_WIN32 - DWORD last_error; -#endif if (path[0] == '\0') { /* Fail to open empty path */ return NULL; @@ -1498,25 +1503,14 @@ CWD_API FILE *virtual_fopen(const char *path, const char *mode TSRMLS_DC) /* {{{ CWD_STATE_COPY(&new_state, &CWDG(cwd)); if (virtual_file_ex(&new_state, path, NULL, CWD_EXPAND TSRMLS_CC)) { -#ifdef TSRM_WIN32 - last_error = GetLastError(); -#endif - CWD_STATE_FREE(&new_state); -#ifdef TSRM_WIN32 - SetLastError(last_error); -#endif + CWD_STATE_FREE_ERR(&new_state); return NULL; } f = fopen(new_state.cwd, mode); -#ifdef TSRM_WIN32 - last_error = GetLastError(); -#endif - CWD_STATE_FREE(&new_state); -#ifdef TSRM_WIN32 - SetLastError(last_error); -#endif + CWD_STATE_FREE_ERR(&new_state); + return f; } /* }}} */ @@ -1525,33 +1519,20 @@ CWD_API int virtual_access(const char *pathname, int mode TSRMLS_DC) /* {{{ */ { cwd_state new_state; int ret; -#ifdef TSRM_WIN32 - DWORD last_error; -#endif CWD_STATE_COPY(&new_state, &CWDG(cwd)); if (virtual_file_ex(&new_state, pathname, NULL, CWD_REALPATH TSRMLS_CC)) { -#ifdef TSRM_WIN32 - last_error = GetLastError(); -#endif - CWD_STATE_FREE(&new_state); -#ifdef TSRM_WIN32 - SetLastError(last_error); -#endif + CWD_STATE_FREE_ERR(&new_state); return -1; } #if defined(TSRM_WIN32) ret = tsrm_win32_access(new_state.cwd, mode TSRMLS_CC); - last_error = GetLastError(); #else ret = access(new_state.cwd, mode); #endif - CWD_STATE_FREE(&new_state); -#ifdef TSRM_WIN32 - SetLastError(last_error); -#endif + CWD_STATE_FREE_ERR(&new_state); return ret; } @@ -1611,33 +1592,20 @@ CWD_API int virtual_utime(const char *filename, struct utimbuf *buf TSRMLS_DC) / { cwd_state new_state; int ret; -#ifdef TSRM_WIN32 - DWORD last_error; -#endif CWD_STATE_COPY(&new_state, &CWDG(cwd)); if (virtual_file_ex(&new_state, filename, NULL, CWD_REALPATH TSRMLS_CC)) { -#ifdef TSRM_WIN32 - last_error = GetLastError(); -#endif - CWD_STATE_FREE(&new_state); -#ifdef TSRM_WIN32 - SetLastError(last_error); -#endif + CWD_STATE_FREE_ERR(&new_state); return -1; } #ifdef TSRM_WIN32 ret = win32_utime(new_state.cwd, buf); - last_error = GetLastError(); #else ret = utime(new_state.cwd, buf); #endif - CWD_STATE_FREE(&new_state); -#ifdef TSRM_WIN32 - SetLastError(last_error); -#endif + CWD_STATE_FREE_ERR(&new_state); return ret; } /* }}} */ @@ -1647,31 +1615,16 @@ CWD_API int virtual_chmod(const char *filename, mode_t mode TSRMLS_DC) /* {{{ */ { cwd_state new_state; int ret; -#ifdef TSRM_WIN32 - DWORD last_error; -#endif CWD_STATE_COPY(&new_state, &CWDG(cwd)); if (virtual_file_ex(&new_state, filename, NULL, CWD_REALPATH TSRMLS_CC)) { -#ifdef TSRM_WIN32 - last_error = GetLastError(); -#endif - CWD_STATE_FREE(&new_state); -#ifdef TSRM_WIN32 - SetLastError(last_error); -#endif + CWD_STATE_FREE_ERR(&new_state); return -1; } ret = chmod(new_state.cwd, mode); -#ifdef TSRM_WIN32 - last_error = GetLastError(); -#endif - CWD_STATE_FREE(&new_state); -#ifdef TSRM_WIN32 - SetLastError(last_error); -#endif + CWD_STATE_FREE_ERR(&new_state); return ret; } /* }}} */ @@ -1681,19 +1634,10 @@ CWD_API int virtual_chown(const char *filename, uid_t owner, gid_t group, int li { cwd_state new_state; int ret; -#ifdef TSRM_WIN32 - DWORD last_error; -#endif CWD_STATE_COPY(&new_state, &CWDG(cwd)); if (virtual_file_ex(&new_state, filename, NULL, CWD_REALPATH TSRMLS_CC)) { -#ifdef TSRM_WIN32 - last_error = GetLastError(); -#endif - CWD_STATE_FREE(&new_state); -#ifdef TSRM_WIN32 - SetLastError(last_error); -#endif + CWD_STATE_FREE_ERR(&new_state); return -1; } @@ -1707,13 +1651,7 @@ CWD_API int virtual_chown(const char *filename, uid_t owner, gid_t group, int li ret = chown(new_state.cwd, owner, group); } -#ifdef TSRM_WIN32 - last_error = GetLastError(); -#endif - CWD_STATE_FREE(&new_state); -#ifdef TSRM_WIN32 - SetLastError(last_error); -#endif + CWD_STATE_FREE_ERR(&new_state); return ret; } /* }}} */ @@ -1723,19 +1661,10 @@ CWD_API int virtual_open(const char *path TSRMLS_DC, int flags, ...) /* {{{ */ { cwd_state new_state; int f; -#ifdef TSRM_WIN32 - DWORD last_error; -#endif CWD_STATE_COPY(&new_state, &CWDG(cwd)); if (virtual_file_ex(&new_state, path, NULL, CWD_FILEPATH TSRMLS_CC)) { -#ifdef TSRM_WIN32 - last_error = GetLastError(); -#endif - CWD_STATE_FREE(&new_state); -#ifdef TSRM_WIN32 - SetLastError(last_error); -#endif + CWD_STATE_FREE_ERR(&new_state); return -1; } @@ -1751,13 +1680,7 @@ CWD_API int virtual_open(const char *path TSRMLS_DC, int flags, ...) /* {{{ */ } else { f = open(new_state.cwd, flags); } -#ifdef TSRM_WIN32 - last_error = GetLastError(); -#endif - CWD_STATE_FREE(&new_state); -#ifdef TSRM_WIN32 - SetLastError(last_error); -#endif + CWD_STATE_FREE_ERR(&new_state); return f; } /* }}} */ @@ -1766,31 +1689,16 @@ CWD_API int virtual_creat(const char *path, mode_t mode TSRMLS_DC) /* {{{ */ { cwd_state new_state; int f; -#ifdef TSRM_WIN32 - DWORD last_error; -#endif CWD_STATE_COPY(&new_state, &CWDG(cwd)); if (virtual_file_ex(&new_state, path, NULL, CWD_FILEPATH TSRMLS_CC)) { -#ifdef TSRM_WIN32 - last_error = GetLastError(); -#endif - CWD_STATE_FREE(&new_state); -#ifdef TSRM_WIN32 - SetLastError(last_error); -#endif + CWD_STATE_FREE_ERR(&new_state); return -1; } f = creat(new_state.cwd, mode); -#ifdef TSRM_WIN32 - last_error = GetLastError(); -#endif - CWD_STATE_FREE(&new_state); -#ifdef TSRM_WIN32 - SetLastError(last_error); -#endif + CWD_STATE_FREE_ERR(&new_state); return f; } /* }}} */ @@ -1800,33 +1708,18 @@ CWD_API int virtual_rename(const char *oldname, const char *newname TSRMLS_DC) / cwd_state old_state; cwd_state new_state; int retval; -#ifdef TSRM_WIN32 - DWORD last_error; -#endif CWD_STATE_COPY(&old_state, &CWDG(cwd)); if (virtual_file_ex(&old_state, oldname, NULL, CWD_EXPAND TSRMLS_CC)) { -#ifdef TSRM_WIN32 - last_error = GetLastError(); -#endif - CWD_STATE_FREE(&old_state); -#ifdef TSRM_WIN32 - SetLastError(last_error); -#endif + CWD_STATE_FREE_ERR(&old_state); return -1; } oldname = old_state.cwd; CWD_STATE_COPY(&new_state, &CWDG(cwd)); if (virtual_file_ex(&new_state, newname, NULL, CWD_EXPAND TSRMLS_CC)) { -#ifdef TSRM_WIN32 - last_error = GetLastError(); -#endif - CWD_STATE_FREE(&old_state); - CWD_STATE_FREE(&new_state); -#ifdef TSRM_WIN32 - SetLastError(last_error); -#endif + CWD_STATE_FREE_ERR(&old_state); + CWD_STATE_FREE_ERR(&new_state); return -1; } newname = new_state.cwd; @@ -1836,17 +1729,12 @@ CWD_API int virtual_rename(const char *oldname, const char *newname TSRMLS_DC) / #ifdef TSRM_WIN32 /* MoveFileEx returns 0 on failure, other way 'round for this function */ retval = (MoveFileEx(oldname, newname, MOVEFILE_REPLACE_EXISTING|MOVEFILE_COPY_ALLOWED) == 0) ? -1 : 0; - last_error = GetLastError(); #else retval = rename(oldname, newname); #endif - CWD_STATE_FREE(&old_state); - CWD_STATE_FREE(&new_state); - -#ifdef TSRM_WIN32 - SetLastError(last_error); -#endif + CWD_STATE_FREE_ERR(&old_state); + CWD_STATE_FREE_ERR(&new_state); return retval; } @@ -1856,31 +1744,16 @@ CWD_API int virtual_stat(const char *path, struct stat *buf TSRMLS_DC) /* {{{ */ { cwd_state new_state; int retval; -#ifdef TSRM_WIN32 - DWORD last_error; -#endif CWD_STATE_COPY(&new_state, &CWDG(cwd)); if (virtual_file_ex(&new_state, path, NULL, CWD_REALPATH TSRMLS_CC)) { -#ifdef TSRM_WIN32 - last_error = GetLastError(); -#endif - CWD_STATE_FREE(&new_state); -#ifdef TSRM_WIN32 - SetLastError(last_error); -#endif + CWD_STATE_FREE_ERR(&new_state); return -1; } retval = php_sys_stat(new_state.cwd, buf); -#ifdef TSRM_WIN32 - last_error = GetLastError(); -#endif - CWD_STATE_FREE(&new_state); -#ifdef TSRM_WIN32 - SetLastError(last_error); -#endif + CWD_STATE_FREE_ERR(&new_state); return retval; } /* }}} */ @@ -1889,31 +1762,16 @@ CWD_API int virtual_lstat(const char *path, struct stat *buf TSRMLS_DC) /* {{{ * { cwd_state new_state; int retval; -#ifdef TSRM_WIN32 - DWORD last_error; -#endif CWD_STATE_COPY(&new_state, &CWDG(cwd)); if (virtual_file_ex(&new_state, path, NULL, CWD_EXPAND TSRMLS_CC)) { -#ifdef TSRM_WIN32 - last_error = GetLastError(); -#endif - CWD_STATE_FREE(&new_state); -#ifdef TSRM_WIN32 - SetLastError(last_error); -#endif + CWD_STATE_FREE_ERR(&new_state); return -1; } retval = php_sys_lstat(new_state.cwd, buf); -#ifdef TSRM_WIN32 - last_error = GetLastError(); -#endif - CWD_STATE_FREE(&new_state); -#ifdef TSRM_WIN32 - SetLastError(last_error); -#endif + CWD_STATE_FREE_ERR(&new_state); return retval; } /* }}} */ @@ -1922,31 +1780,16 @@ CWD_API int virtual_unlink(const char *path TSRMLS_DC) /* {{{ */ { cwd_state new_state; int retval; -#ifdef TSRM_WIN32 - DWORD last_error; -#endif CWD_STATE_COPY(&new_state, &CWDG(cwd)); if (virtual_file_ex(&new_state, path, NULL, CWD_EXPAND TSRMLS_CC)) { -#ifdef TSRM_WIN32 - last_error = GetLastError(); -#endif - CWD_STATE_FREE(&new_state); -#ifdef TSRM_WIN32 - SetLastError(last_error); -#endif + CWD_STATE_FREE_ERR(&new_state); return -1; } retval = unlink(new_state.cwd); -#ifdef TSRM_WIN32 - last_error = GetLastError(); -#endif - CWD_STATE_FREE(&new_state); -#ifdef TSRM_WIN32 - SetLastError(last_error); -#endif + CWD_STATE_FREE_ERR(&new_state); return retval; } /* }}} */ @@ -1955,32 +1798,19 @@ CWD_API int virtual_mkdir(const char *pathname, mode_t mode TSRMLS_DC) /* {{{ */ { cwd_state new_state; int retval; -#ifdef TSRM_WIN32 - DWORD last_error; -#endif CWD_STATE_COPY(&new_state, &CWDG(cwd)); if (virtual_file_ex(&new_state, pathname, NULL, CWD_FILEPATH TSRMLS_CC)) { -#ifdef TSRM_WIN32 - last_error = GetLastError(); -#endif - CWD_STATE_FREE(&new_state); -#ifdef TSRM_WIN32 - SetLastError(last_error); -#endif + CWD_STATE_FREE_ERR(&new_state); return -1; } #ifdef TSRM_WIN32 retval = mkdir(new_state.cwd); - last_error = GetLastError(); #else retval = mkdir(new_state.cwd, mode); #endif - CWD_STATE_FREE(&new_state); -#ifdef TSRM_WIN32 - SetLastError(last_error); -#endif + CWD_STATE_FREE_ERR(&new_state); return retval; } /* }}} */ @@ -1989,31 +1819,16 @@ CWD_API int virtual_rmdir(const char *pathname TSRMLS_DC) /* {{{ */ { cwd_state new_state; int retval; -#ifdef TSRM_WIN32 - DWORD last_error; -#endif CWD_STATE_COPY(&new_state, &CWDG(cwd)); if (virtual_file_ex(&new_state, pathname, NULL, CWD_EXPAND TSRMLS_CC)) { -#ifdef TSRM_WIN32 - last_error = GetLastError(); -#endif - CWD_STATE_FREE(&new_state); -#ifdef TSRM_WIN32 - SetLastError(last_error); -#endif + CWD_STATE_FREE_ERR(&new_state); return -1; } retval = rmdir(new_state.cwd); -#ifdef TSRM_WIN32 - last_error = GetLastError(); -#endif - CWD_STATE_FREE(&new_state); -#ifdef TSRM_WIN32 - SetLastError(last_error); -#endif + CWD_STATE_FREE_ERR(&new_state); return retval; } /* }}} */ @@ -2026,31 +1841,16 @@ CWD_API DIR *virtual_opendir(const char *pathname TSRMLS_DC) /* {{{ */ { cwd_state new_state; DIR *retval; -#ifdef TSRM_WIN32 - DWORD last_error; -#endif CWD_STATE_COPY(&new_state, &CWDG(cwd)); if (virtual_file_ex(&new_state, pathname, NULL, CWD_REALPATH TSRMLS_CC)) { -#ifdef TSRM_WIN32 - last_error = GetLastError(); -#endif - CWD_STATE_FREE(&new_state); -#ifdef TSRM_WIN32 - SetLastError(last_error); -#endif + CWD_STATE_FREE_ERR(&new_state); return NULL; } retval = opendir(new_state.cwd); -#ifdef TSRM_WIN32 - last_error = GetLastError(); -#endif - CWD_STATE_FREE(&new_state); -#ifdef TSRM_WIN32 - SetLastError(last_error); -#endif + CWD_STATE_FREE_ERR(&new_state); return retval; } /* }}} */ |
