From c86ec8b1a95e9c4716bffff816427419f295183c Mon Sep 17 00:00:00 2001 From: Sascha Schumann Date: Sun, 20 Aug 2000 12:49:56 +0000 Subject: [PATCH] Add virtual_real_chdir_file. Silly name for a useful function. --- main/php.h | 2 +- main/php_virtual_cwd.c | 20 ++++++++++++++++++++ main/php_virtual_cwd.h | 1 + 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/main/php.h b/main/php.h index 0fa464dc14..b0b25500d5 100644 --- a/main/php.h +++ b/main/php.h @@ -324,7 +324,7 @@ PHPAPI int cfg_get_string(char *varname, char **result); #define V_OPEN(open_args) open open_args #define V_CREAT(path, mode) creat(path, mode) #define V_CHDIR(path) chdir(path) -#define V_CHDIR_FILE(path) chdir_file(path) +#define V_CHDIR_FILE(path) virtual_real_chdir_file(path) #define V_GETWD(buf) getwd(buf) #define V_STAT(path, buff) stat(path, buff) #define V_LSTAT(path, buff) lstat(path, buff) diff --git a/main/php_virtual_cwd.c b/main/php_virtual_cwd.c index 4d09ce6750..5b2838385c 100644 --- a/main/php_virtual_cwd.c +++ b/main/php_virtual_cwd.c @@ -745,6 +745,26 @@ CWD_API FILE *virtual_popen(const char *command, const char *type) #endif +/* taken from Apache 1.3 */ + +CWD_API void virtual_real_chdir_file(const char *file) +{ + const char *x; + char buf[4096]; + + x = strrchr(file, '/'); + if (x == NULL) { + chdir(file); + } + else if (x - file < sizeof(buf) - 1) { + memcpy(buf, file, x - file); + buf[x - file] = '\0'; + chdir(buf); + } + /* XXX: well, this is a silly function, no method of reporting an + * error... ah well. */ +} + #if 0 main(void) diff --git a/main/php_virtual_cwd.h b/main/php_virtual_cwd.h index 53d569f22f..d5416513d5 100644 --- a/main/php_virtual_cwd.h +++ b/main/php_virtual_cwd.h @@ -78,6 +78,7 @@ CWD_API char *virtual_getcwd_ex(int *length); CWD_API char *virtual_getcwd(char *buf, size_t size); CWD_API int virtual_chdir(char *path); CWD_API int virtual_chdir_file(char *path); +CWD_API int virtual_real_chdir_file(char *path); CWD_API int virtual_filepath(char *path, char **filepath); CWD_API char *virtual_realpath(char *path, char *real_path); CWD_API FILE *virtual_fopen(const char *path, const char *mode); -- 2.40.0