diff options
author | Pierre Joye <pajoye@php.net> | 2011-07-25 16:50:07 +0000 |
---|---|---|
committer | Pierre Joye <pajoye@php.net> | 2011-07-25 16:50:07 +0000 |
commit | a02d8cfa3398175f35c95da6d6acbd3b08823f06 (patch) | |
tree | 33fefa00b341b9b20f9a1062b604b7d8c7cec8aa | |
parent | 48ec4ace5f5f279fe5f2a82a7ea2e1b82dda350d (diff) | |
download | php-git-a02d8cfa3398175f35c95da6d6acbd3b08823f06.tar.gz |
- add expand_filepath_with_mode (not used anywhere yet but will be used for file ops (fopen&co) to avoid extra links resolution and other non required ops on open
-rw-r--r-- | UPGRADING.INTERNALS | 4 | ||||
-rw-r--r-- | main/fopen_wrappers.c | 10 | ||||
-rw-r--r-- | main/fopen_wrappers.h | 1 |
3 files changed, 14 insertions, 1 deletions
diff --git a/UPGRADING.INTERNALS b/UPGRADING.INTERNALS index a230a4db26..e9d0adf554 100644 --- a/UPGRADING.INTERNALS +++ b/UPGRADING.INTERNALS @@ -11,6 +11,7 @@ UPGRADE NOTES - PHP X.Y f. streams that enclose private streams g. leak_variable h. API Signature changes + i. new TSRM function expand_filepath_with_mode 2. Build system changes a. Unix build system changes @@ -184,6 +185,9 @@ it increments the refcounts of those objects instead. . php_unescape_html_entities PHPAPI char *php_unescape_html_entities(unsigned char *old, size_t oldlen, size_t *newlen, int all, int flags, char *hint_charset TSRMLS_DC); + i. + PHPAPI char *expand_filepath_with_mode(const char *filepath, char *real_path, const char *relative_to, size_t relative_to_len, int realpath_mode TSRMLS_DC); + expand_filepath_with_mode lets define how realpath will behave, using one of the existing mode: CWD_EXPAND , CWD_FILEPATH or CWD_REALPATH. ======================== 2. Build system changes diff --git a/main/fopen_wrappers.c b/main/fopen_wrappers.c index 812d591767..8766aaf893 100644 --- a/main/fopen_wrappers.c +++ b/main/fopen_wrappers.c @@ -741,6 +741,14 @@ PHPAPI char *expand_filepath(const char *filepath, char *real_path TSRMLS_DC) */ PHPAPI char *expand_filepath_ex(const char *filepath, char *real_path, const char *relative_to, size_t relative_to_len TSRMLS_DC) { + return expand_filepath_with_mode(filepath, real_path, relative_to, relative_to_len, CWD_FILEPATH TSRMLS_CC); +} +/* }}} */ + +/* {{{ expand_filepath_use_realpath + */ +PHPAPI char *expand_filepath_with_mode(const char *filepath, char *real_path, const char *relative_to, size_t relative_to_len, int realpath_mode TSRMLS_DC) +{ cwd_state new_state; char cwd[MAXPATHLEN]; int copy_len; @@ -785,7 +793,7 @@ PHPAPI char *expand_filepath_ex(const char *filepath, char *real_path, const cha new_state.cwd = strdup(cwd); new_state.cwd_length = strlen(cwd); - if (virtual_file_ex(&new_state, filepath, NULL, CWD_FILEPATH TSRMLS_CC)) { + if (virtual_file_ex(&new_state, filepath, NULL, realpath_mode TSRMLS_CC)) { free(new_state.cwd); return NULL; } diff --git a/main/fopen_wrappers.h b/main/fopen_wrappers.h index 842780a1b2..a5e97294cf 100644 --- a/main/fopen_wrappers.h +++ b/main/fopen_wrappers.h @@ -28,6 +28,7 @@ BEGIN_EXTERN_C() PHPAPI int php_fopen_primary_script(zend_file_handle *file_handle TSRMLS_DC); PHPAPI char *expand_filepath(const char *filepath, char *real_path TSRMLS_DC); PHPAPI char *expand_filepath_ex(const char *filepath, char *real_path, const char *relative_to, size_t relative_to_len TSRMLS_DC); +PHPAPI char *expand_filepath_with_mode(const char *filepath, char *real_path, const char *relative_to, size_t relative_to_len, int realpath_mode TSRMLS_DC); PHPAPI int php_check_open_basedir(const char *path TSRMLS_DC); PHPAPI int php_check_open_basedir_ex(const char *path, int warn TSRMLS_DC); |