]> granicus.if.org Git - php/commitdiff
Fix zend_fiel_handle handling. Should fix URL include
authorStanislav Malyshev <stas@php.net>
Sun, 13 Aug 2000 18:00:50 +0000 (18:00 +0000)
committerStanislav Malyshev <stas@php.net>
Sun, 13 Aug 2000 18:00:50 +0000 (18:00 +0000)
and various opened_path inconsistencies.

Zend/zend-scanner.l
Zend/zend.c
Zend/zend_compile.c
Zend/zend_compile.h
Zend/zend_execute.c
main/main.c
sapi/cgi/cgi_main.c
sapi/isapi/php4isapi.c
sapi/nsapi/nsapi.c
sapi/roxen/roxen.c
sapi/thttpd/thttpd.c

index f95d7a13da48ed9c0ea890a14179063dd6ddb1c4..ada9c08cff3727e3e67b2e9700429a8797843a80 100644 (file)
@@ -183,7 +183,7 @@ inline void restore_lexical_state(zend_lex_state *lex_state CLS_DC)
 BEGIN_EXTERN_C()
 
 
-ZEND_API void zend_open_file_dtor(zend_file_handle *fh)
+ZEND_API void zend_file_handle_dtor(zend_file_handle *fh)
 {
        switch (fh->type) {
                case ZEND_HANDLE_FP:
@@ -235,7 +235,7 @@ int zend_compare_file_handles(zend_file_handle *fh1, zend_file_handle *fh2)
 }
 
 
-ZEND_API void zend_close_file_handle(zend_file_handle *file_handle CLS_DC)
+ZEND_API void zend_destroy_file_handle(zend_file_handle *file_handle CLS_DC)
 {
        zend_llist_del_element(&CG(open_files), file_handle, (int (*)(void *, void *)) zend_compare_file_handles);
 }
@@ -252,19 +252,20 @@ ZEND_API int open_file_for_scanning(zend_file_handle *file_handle CLS_DC)
                    file_path = file_handle->opened_path; 
                        break;
                case ZEND_HANDLE_FD:
-                       file_path = file_handle->filename;
-                       file_handle->opened_path = NULL;
+                 /* file_handle->opened_path = NULL; */
                        file_handle->handle.fp = fdopen(file_handle->handle.fd, "r");
                        break;
                case ZEND_HANDLE_FP:
-                       file_path = file_handle->filename;
-                       file_handle->opened_path = NULL;
+                 /* file_handle->opened_path = NULL; */
                        file_handle->handle.fp = file_handle->handle.fp;
                        break;
        }
        if (!file_handle->handle.fp) {
                return FAILURE;
        }
+       if (!file_path) {
+               file_path = file_handle->filename;
+       }
        file_handle->type = ZEND_HANDLE_FP;     
        if (file_handle->handle.fp != stdin) {
                zend_llist_add_element(&CG(open_files), file_handle);
@@ -276,7 +277,7 @@ ZEND_API int open_file_for_scanning(zend_file_handle *file_handle CLS_DC)
 #else
        switch (file_handle->type) {
                case ZEND_HANDLE_FD:
-                       file_handle->opened_path = NULL;
+                 /* file_handle->opened_path = NULL; */
                        file_handle->handle.is = new ifstream(file_handle->handle.fd);
                        file_handle->type = ZEND_HANDLE_FSTREAM;
                        break;
@@ -291,7 +292,7 @@ ZEND_API int open_file_for_scanning(zend_file_handle *file_handle CLS_DC)
                                break;
                        }
                case ZEND_HANDLE_FP:
-                       file_handle->opened_path = NULL;
+                 /* file_handle->opened_path = NULL; */
                        if (file_handle->handle.fp==stdin) {
                                file_handle->handle.is = &cin;
                        } else {
@@ -353,7 +354,6 @@ ZEND_API zend_op_array *compile_file(zend_file_handle *file_handle CLS_DC)
                CG(in_compilation) = 1;
                CG(active_op_array) = op_array;
                compiler_result = zendparse(CLS_C);
-               zend_close_file_handle(file_handle CLS_CC);
                do_return(&retval_znode, 0 CLS_CC);
                restore_lexical_state(&original_lex_state CLS_CC);
                CG(in_compilation) = original_in_compilation;
@@ -404,6 +404,7 @@ zend_op_array *compile_filename(int type, zval *filename CLS_DC ELS_DC)
                EG(error_reporting) = 0;
        }
        retval = zend_compile_file(&file_handle CLS_CC);
+       zend_destroy_file_handle(&file_handle CLS_CC);
 
        if (type==ZEND_REQUIRE) {
                EG(error_reporting) = error_reporting;
@@ -513,7 +514,7 @@ int highlight_file(char *filename, zend_syntax_highlighter_ini *syntax_highlight
                return FAILURE;
        }
        zend_highlight(syntax_highlighter_ini);
-       zend_close_file_handle(&file_handle CLS_CC);
+       zend_destroy_file_handle(&file_handle CLS_CC);
        restore_lexical_state(&original_lex_state CLS_CC);
        return SUCCESS;
 }
index 5a12267e9c9ba90999da8ccd093ea9cec876515c..f18beea9f4363712dbd265297fa39fb38191f165 100644 (file)
@@ -707,6 +707,7 @@ ZEND_API int zend_execute_scripts(int type CLS_DC ELS_DC, int file_count, ...)
                        continue;
                }
                EG(active_op_array) = zend_compile_file(file_handle CLS_CC);
+               zend_destroy_file_handle(file_handle CLS_CC);
                if (EG(active_op_array)) {
                        zend_execute(EG(active_op_array) ELS_CC);
                        zval_ptr_dtor(EG(return_value_ptr_ptr));
index e76e542ba8df8c7ba5e9f8a101fbd8abfad89f74..4061ccfa4be0225888510adf84f43cda46ff1ff7 100644 (file)
@@ -65,12 +65,6 @@ static void build_runtime_defined_function_key(zval *result, zval *name, zend_op
 }
 
 
-static void zend_open_file_dtor_wrapper(zend_file_handle *fh)
-{
-       zend_open_file_dtor(fh);
-}
-
-
 static void init_compiler_declarables(CLS_D ELS_DC)
 {
        CG(declarables).ticks.type = IS_LONG;
@@ -94,7 +88,7 @@ void init_compiler(CLS_D ELS_DC)
        CG(in_compilation) = 0;
        zend_init_rsrc_list(ELS_C);
        CG(unclean_shutdown) = 0;
-       zend_llist_init(&CG(open_files), sizeof(zend_file_handle), (void (*)(void *)) zend_open_file_dtor, 0);
+       zend_llist_init(&CG(open_files), sizeof(zend_file_handle), (void (*)(void *)) zend_file_handle_dtor, 0);
        init_compiler_declarables(CLS_C ELS_CC);
 }
 
index bb49951afb7bdab9817de28bd16f943d218b98b4..c0f64c3880470828b672a74e3c90bd6c9d2785a7 100644 (file)
@@ -382,8 +382,8 @@ ZEND_API int zend_execute_scripts(int type CLS_DC ELS_DC, int file_count, ...);
 ZEND_API int open_file_for_scanning(zend_file_handle *file_handle CLS_DC);
 ZEND_API void init_op_array(zend_op_array *op_array, int type, int initial_ops_size CLS_DC);
 ZEND_API void destroy_op_array(zend_op_array *op_array);
-ZEND_API void zend_close_file_handle(zend_file_handle *file_handle CLS_DC);
-ZEND_API void zend_open_file_dtor(zend_file_handle *fh);
+ZEND_API void zend_destroy_file_handle(zend_file_handle *file_handle CLS_DC);
+ZEND_API void zend_file_handle_dtor(zend_file_handle *fh);
 
 ZEND_API void destroy_zend_function(zend_function *function);
 ZEND_API void destroy_zend_class(zend_class_entry *ce);
index 1017543cf38ae58f189ec41ba72006339b3b4ff6..a4e3e3f36f366bc6c1c067ebc45b6e18ed10c5cf 100644 (file)
@@ -1978,17 +1978,14 @@ send_by_ref:
 
                                                                file_handle.handle.fp = zend_fopen(inc_filename->value.str.val, &opened_path);
                                                                file_handle.type = ZEND_HANDLE_FP;
-                                                               if (opened_path) {
-                                                                       file_handle.filename = opened_path;
-                                                                       file_handle.free_filename = 0;
-                                                               } else {
-                                                                       file_handle.filename = inc_filename->value.str.val;
-                                                                       file_handle.free_filename = 0;
-                                                               }
-                                                               
+                                                               file_handle.filename = inc_filename->value.str.val;
+                                                               file_handle.opened_path = opened_path;
+                                                               file_handle.free_filename = 0;
+
                                                                if (file_handle.handle.fp) {
                                                                        if (!opened_path || zend_hash_add(&EG(included_files), opened_path, strlen(opened_path)+1, (void *)&dummy, sizeof(int), NULL)==SUCCESS) {
                                                                                new_op_array = zend_compile_file(&file_handle CLS_CC);
+                                                                               zend_destroy_file_handle(&file_handle CLS_CC);
                                                                                if (!new_op_array) {
                                                                                        fclose(file_handle.handle.fp);
                                                                                }
index 8186830c3e20e7493af14fb974a3533e9b509bc6..c400928b5ba3b633895f1b647f5e45b9a29047b5 100644 (file)
@@ -1149,6 +1149,7 @@ PHPAPI void php_execute_script(zend_file_handle *primary_file CLS_DC ELS_DC PLS_
 
        if (PG(auto_prepend_file) && PG(auto_prepend_file)[0]) {
                prepend_file.filename = PG(auto_prepend_file);
+               prepend_file.opened_path = NULL;
                prepend_file.free_filename = 0;
                prepend_file.type = ZEND_HANDLE_FILENAME;
                prepend_file_p = &prepend_file;
@@ -1157,6 +1158,7 @@ PHPAPI void php_execute_script(zend_file_handle *primary_file CLS_DC ELS_DC PLS_
        }
        if (PG(auto_append_file) && PG(auto_append_file)[0]) {
                append_file.filename = PG(auto_append_file);
+               append_file.opened_path = NULL;
                append_file.free_filename = 0;
                append_file.type = ZEND_HANDLE_FILENAME;
                append_file_p = &append_file;
index a985ebee22560ab1d6122a458d103ad8fa7eb2d1..6e5ae1046757fe8e1bbdf30eb6f5faad4cc584e6 100644 (file)
@@ -641,6 +641,7 @@ any .htaccess restrictions anywhere on your site you can leave doc_root undefine
        file_handle.filename = "-";
        file_handle.type = ZEND_HANDLE_FP;
        file_handle.handle.fp = stdin;
+       file_handle.opened_path = NULL;
 
        /* This actually destructs the elements of the list - ugly hack */
        zend_llist_apply(&global_vars, (llist_apply_func_t) php_register_command_line_global_vars);
index 441b38d72a6b56599c3ef210848f3d5663a55e7d..6943ff20745cba964f69320184fd164d65ec2195 100644 (file)
@@ -575,6 +575,7 @@ DWORD WINAPI HttpExtensionProc(LPEXTENSION_CONTROL_BLOCK lpECB)
                file_handle.filename = sapi_globals->request_info.path_translated;
                file_handle.free_filename = 0;
                file_handle.type = ZEND_HANDLE_FILENAME;
+               file_handle.opened_path = NULL;
 
                php_request_startup(CLS_C ELS_CC PLS_CC SLS_CC);
                php_execute_script(&file_handle CLS_CC ELS_CC PLS_CC);
index 94ac4072f77042d9bb1cbc81c9b9cc5a0299a2bb..210ac1766f6328da96a8db748ac6aff7364c93cf 100644 (file)
@@ -514,6 +514,7 @@ nsapi_module_main(NSLS_D SLS_DC)
        file_handle.type = ZEND_HANDLE_FILENAME;
        file_handle.filename = SG(request_info).path_translated;
        file_handle.free_filename = 0;
+       file_handle.opened_path = NULL;
 
 #if defined(NSAPI_DEBUG)
        log_error(LOG_INFORM, "nsapi_module_main", NSG(sn), NSG(rq),
index 740104da91b9141bf7bcc00cbcfa313b16c9ce08..62c17a7726b84a1e9a189dff94fc3cf3670844a5 100644 (file)
@@ -609,6 +609,7 @@ static int php_roxen_module_main(SLS_D)
   file_handle.type = ZEND_HANDLE_FILENAME;
   file_handle.filename = THIS->filename;
   file_handle.free_filename = 0;
+  file_handle.opened_path = NULL;
 
   THREADS_ALLOW();
   res = php_request_startup(CLS_C ELS_CC PLS_CC SLS_CC);
index daef768dfc48e00adba288cad48912ece7928282..fb1fdd3c7ac3be7ba2c902bddb91c425e3e68e91 100644 (file)
@@ -213,6 +213,7 @@ static void thttpd_module_main(TLS_D SLS_DC)
        file_handle.type = ZEND_HANDLE_FILENAME;
        file_handle.filename = TG(hc)->expnfilename;
        file_handle.free_filename = 0;
+       file_handle.opened_path = NULL;
 
        if (php_request_startup(CLS_C ELS_CC PLS_CC SLS_CC) == FAILURE) {
                return;