]> granicus.if.org Git - php/commitdiff
- More virtual_cwd work
authorAndi Gutmans <andi@php.net>
Sat, 1 Apr 2000 18:21:03 +0000 (18:21 +0000)
committerAndi Gutmans <andi@php.net>
Sat, 1 Apr 2000 18:21:03 +0000 (18:21 +0000)
main/php_virtual_cwd.c
main/php_virtual_cwd.h

index a09d9826a5a0e84079b15d3d59db9972f74164a9..29fb4b9a000a62c413ff715ada7a58f9becfdaa7 100644 (file)
@@ -16,6 +16,8 @@ CWD_API int cwd_globals_id;
 cwd_globals_struct cwd_globals;
 #endif
 
+cwd_state true_global_cwd_state;
+
 #ifndef PHP_WIN32
 #include <unistd.h>
 #endif
@@ -108,9 +110,29 @@ static int php_is_file_ok(const cwd_state *state)
        return (1);
 }
 
-void virtual_cwd_init()
+static void cwd_globals_ctor(cwd_globals_struct *cwd_globals)
+{
+       cwd_globals->cwd.cwd = (char *) malloc(true_global_cwd_state.cwd_length+1);
+       memcpy(cwd_globals->cwd.cwd, true_global_cwd_state.cwd, true_global_cwd_state.cwd_length+1);
+       cwd_globals->cwd.cwd_length = true_global_cwd_state.cwd_length;
+}
+
+void virtual_cwd_startup()
 {
-       /* Initialize the true global cwd */
+       char cwd[1024]; /* Should probably use system define here */
+       char *result;
+
+       result = getcwd(cwd, sizeof(cwd));      
+       if (!result) {
+               cwd[0] = '\0';
+       }
+       true_global_cwd_state.cwd = strdup(cwd);
+       true_global_cwd_state.cwd_length = strlen(cwd);
+#ifdef ZTS
+        cwd_globals_id = ts_allocate_id(sizeof(cwd_globals_struct), (ts_allocate_ctor) cwd_globals_ctor, NULL);
+#else   
+        cwd_globals_ctor(&cwd_globals);
+#endif  
 }
 
 char *virtual_getcwd_ex(int *length)
index 42149ebdac4af47830c974a1bdb3060c205a5342..9b1d3aad71e69627a2cc9e3545ee4ab0d17af5a1 100644 (file)
@@ -20,7 +20,7 @@ typedef struct _cwd_state {
 
 typedef int (*verify_path_func)(const cwd_state *);
 
-void virtual_cwd_init();
+void virtual_cwd_startup();
 char *virtual_getcwd_ex(int *length);
 char *virtual_getcwd(char *buf, size_t size);
 int virtual_chdir(char *path);