From: Andi Gutmans Date: Sun, 2 Apr 2000 19:45:02 +0000 (+0000) Subject: - This version of chdir_file should be compatible with the Apache one. X-Git-Tag: php-4.0RC2~515 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d8e64d623ec7e72d2d63b8105da188fa91a3f21f;p=php - This version of chdir_file should be compatible with the Apache one. --- diff --git a/main/php.h b/main/php.h index 76494cbdd8..5e1d8d84dd 100644 --- a/main/php.h +++ b/main/php.h @@ -291,11 +291,13 @@ PHPAPI int cfg_get_string(char *varname, char **result); #define PHP_GETCWD(buff, size) virtual_getcwd(buff,size) #define PHP_FOPEN(path, mode) virtual_fopen(path, mode) #define PHP_CHDIR(path) virtual_chdir(path) +#define PHP_CHDIR_FILE(path) virtual_chdir_file(path) #define PHP_GETWD(buf) #else #define PHP_GETCWD(buff, size) getcwd(buff,size) #define PHP_FOPEN(path, mode) fopen(path, mode) #define PHP_CHDIR(path) chdir(path) +#define PHP_CHDIR_FILE(path) chdir_file(path) #define PHP_GETWD(buf) getwd(buf) #endif diff --git a/main/php_virtual_cwd.c b/main/php_virtual_cwd.c index 820db5ce40..470c28a2b3 100644 --- a/main/php_virtual_cwd.c +++ b/main/php_virtual_cwd.c @@ -286,6 +286,24 @@ int virtual_chdir(char *path) return virtual_file_ex(&CWDG(cwd), path, php_is_dir_ok); } +int virtual_chdir_file(char *path) +{ + int length = strlen(path); + + if (length == 0) { + return 1; /* Can't CD to empty string */ + } + while(--length >= 0 && !IS_SLASH(path[length])) { + } + + if (length == -1) { + return virtual_chdir(path); + } + path[length] = DEFAULT_SLASH; + return virtual_chdir(path); +} + + int virtual_filepath(char *path, char **filepath) { cwd_state new_state; diff --git a/main/php_virtual_cwd.h b/main/php_virtual_cwd.h index 8b4f40a9dc..e98bb5344c 100644 --- a/main/php_virtual_cwd.h +++ b/main/php_virtual_cwd.h @@ -25,6 +25,7 @@ void virtual_cwd_startup(); char *virtual_getcwd_ex(int *length); char *virtual_getcwd(char *buf, size_t size); int virtual_chdir(char *path); +int virtual_chdir_file(char *path); int virtual_filepath(char *path, char **filepath); FILE *virtual_fopen(char *path, const char *mode); diff --git a/sapi/apache/mod_php4.c b/sapi/apache/mod_php4.c index 328e179080..fe062e08eb 100644 --- a/sapi/apache/mod_php4.c +++ b/sapi/apache/mod_php4.c @@ -483,7 +483,7 @@ int send_php(request_rec *r, int display_source_mode, char *filename) SG(server_context) = r; php_save_umask(); - chdir_file(filename); + PHP_CHDIR_FILE(filename); add_common_vars(r); add_cgi_vars(r);