cvs: /php4 php_virtual_cwd.c

From: Date: Thu, 16 Mar 2000 22:38:29 +0000
Subject: cvs: /php4 php_virtual_cwd.c
Groups: php.version4 
Request: Send a blank email to php-version4+get-12287@lists.php.net to get a copy of this message
andi Thu Mar 16 14:38:29 2000 EDT Modified files: /php4 php_virtual_cwd.c Log: - Allow passing of a verify function. This way we can easily create chdir() and expandpath() wrappers. Index: php4/php_virtual_cwd.c diff -u php4/php_virtual_cwd.c:1.9 php4/php_virtual_cwd.c:1.10 --- php4/php_virtual_cwd.c:1.9 Thu Mar 16 11:19:14 2000 +++ php4/php_virtual_cwd.c Thu Mar 16 14:37:59 2000 @@ -15,7 +15,9 @@ #define S_ISDIR(mode) ((mode) & _S_IFDIR) #endif -typedef unsigned int uint; +#ifndef S_ISREG +#define S_ISREG(mode) ((mode) & _S_IFREG) +#endif #ifdef PHP_WIN32 #define strtok_r(a,b,c) strtok((a),(b)) @@ -82,6 +84,8 @@ uint cwd_length; } cwd_state; +typedef int (*verify_path_func)(const cwd_state *); + static int php_is_dir_ok(const cwd_state *state) { struct stat buf; @@ -92,7 +96,17 @@ return (1); } +static int php_is_file_ok(const cwd_state *state) +{ + struct stat buf; + + if (stat(state->cwd, &buf) == 0 && S_ISREG(buf.st_mode)) + return (0); + return (1); +} + + char *virtual_getcwd(cwd_state *state, uint *length) { if (state->cwd_length == 0) { @@ -123,7 +137,7 @@ } /* returns 0 for ok, 1 for error */ -int virtual_chdir(cwd_state *state, char *path) +int virtual_chdir(cwd_state *state, char *path, verify_path_func verify_path) { uint path_length = strlen(path); char *ptr = path; @@ -192,7 +206,7 @@ ptr = strtok_r(NULL, TOKENIZER_STRING, &tok); } - if (!IS_DIR_OK(state)) { + if (verify_path && !verify_path(state)) { free(state->cwd); *state = *old_state; @@ -206,7 +220,7 @@ return (ret); } -void main(void) +main(void) { cwd_state state; uint length; @@ -226,7 +240,7 @@ #define T(a) \ printf("[%s] $ cd %s\n", virtual_getcwd(&state, &length), a); \ - virtual_chdir(&state, strdup(a)); \ + virtual_chdir(&state, strdup(a), NULL); \ printf("new path is %s\n", virtual_getcwd(&state, &length)); T("..") @@ -240,4 +254,6 @@ T("...foo") T("D:/flash/zone") T("../foo/bar/../baz") + + return 0; }

« previous php.version4 (#12287) next »