cvs: /php4 php_virtual_cwd.c php_virtual_cwd.h
| From: | Zeev Suraski | Date: | Wed, 05 Apr 2000 19:02:58 +0000 |
| Subject: | cvs: /php4 php_virtual_cwd.c php_virtual_cwd.h | ||
| Groups: | php.version4 | ||
| Request: | Send a blank email to php-version4+get-13177@lists.php.net to get a copy of this message | ||
zeev Wed Apr 5 12:02:58 2000 EDT
Modified files:
/php4 php_virtual_cwd.c php_virtual_cwd.h
Log:
Fix a problem with the virtual directory mechanism (corruption of the filenames to open)
Index: php4/php_virtual_cwd.c
diff -u php4/php_virtual_cwd.c:1.24 php4/php_virtual_cwd.c:1.25
--- php4/php_virtual_cwd.c:1.24 Sun Apr 2 13:26:06 2000
+++ php4/php_virtual_cwd.c Wed Apr 5 12:02:28 2000
@@ -19,6 +19,8 @@
#ifndef ZEND_WIN32
#include <unistd.h>
+#else
+#include <direct.h>
#endif
#ifndef S_ISDIR
@@ -128,7 +130,7 @@
CWD_STATE_FREE(&cwd_globals->cwd);
}
-void virtual_cwd_startup()
+CWD_API void virtual_cwd_startup()
{
char cwd[1024]; /* Should probably use system define here */
char *result;
@@ -143,7 +145,7 @@
ZEND_INIT_MODULE_GLOBALS(cwd, cwd_globals_ctor, cwd_globals_dtor);
}
-void virtual_cwd_shutdown()
+CWD_API void virtual_cwd_shutdown()
{
#ifndef ZTS
cwd_globals_dtor(&cwd_globals);
@@ -151,7 +153,7 @@
free(main_cwd_state.cwd); /* Don't use CWD_STATE_FREE because the non global states will
probably use emalloc()/efree() */
}
-char *virtual_getcwd_ex(int *length)
+CWD_API char *virtual_getcwd_ex(int *length)
{
cwd_state *state;
CWDLS_FETCH();
@@ -187,9 +189,9 @@
/* Same semantics as UNIX getcwd() */
-char *virtual_getcwd(char *buf, size_t size)
+CWD_API char *virtual_getcwd(char *buf, size_t size)
{
- int length;
+ size_t length;
char *cwd;
cwd = virtual_getcwd_ex(&length);
@@ -209,7 +211,7 @@
/* returns 0 for ok, 1 for error */
-int virtual_file_ex(cwd_state *state, char *path, verify_path_func verify_path)
+CWD_API int virtual_file_ex(cwd_state *state, char *path, verify_path_func verify_path)
{
int path_length = strlen(path);
char *ptr = path;
@@ -222,6 +224,8 @@
if (path_length == 0)
return (0);
+ path = estrndup(path, path_length);
+
old_state = (cwd_state *) malloc(sizeof(cwd_state));
CWD_STATE_COPY(old_state, state);
@@ -289,17 +293,19 @@
free(old_state);
+ efree(path);
+
return (ret);
}
-int virtual_chdir(char *path)
+CWD_API int virtual_chdir(char *path)
{
CWDLS_FETCH();
return virtual_file_ex(&CWDG(cwd), path, php_is_dir_ok);
}
-int virtual_chdir_file(char *path)
+CWD_API int virtual_chdir_file(char *path)
{
int length = strlen(path);
@@ -317,7 +323,7 @@
}
-int virtual_filepath(char *path, char **filepath)
+CWD_API int virtual_filepath(char *path, char **filepath)
{
cwd_state new_state;
int retval;
@@ -330,7 +336,7 @@
return retval;
}
-FILE *virtual_fopen(char *path, const char *mode)
+CWD_API FILE *virtual_fopen(char *path, const char *mode)
{
cwd_state new_state;
FILE *f;
Index: php4/php_virtual_cwd.h
diff -u php4/php_virtual_cwd.h:1.8 php4/php_virtual_cwd.h:1.9
--- php4/php_virtual_cwd.h:1.8 Sun Apr 2 13:26:06 2000
+++ php4/php_virtual_cwd.h Wed Apr 5 12:02:28 2000
@@ -4,6 +4,10 @@
#include "zend.h"
#include "zend_API.h"
+#ifdef PHP_EXPORTS
+#define CWD_EXPORTS
+#endif
+
#ifdef ZEND_WIN32
# ifdef CWD_EXPORTS
# define CWD_API __declspec(dllexport)
@@ -21,14 +25,14 @@
typedef int (*verify_path_func)(const cwd_state *);
-void virtual_cwd_startup();
-void virtual_cwd_shutdown();
-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);
+CWD_API void virtual_cwd_startup();
+CWD_API void virtual_cwd_shutdown();
+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_filepath(char *path, char **filepath);
+CWD_API FILE *virtual_fopen(char *path, const char *mode);
ZEND_BEGIN_MODULE_GLOBALS(cwd)
cwd_state cwd;