diff options
author | Stanislav Malyshev <stas@php.net> | 2000-08-13 18:00:50 +0000 |
---|---|---|
committer | Stanislav Malyshev <stas@php.net> | 2000-08-13 18:00:50 +0000 |
commit | 5090b1e8d5d3a3dc2afcb418d059520e8b9dd528 (patch) | |
tree | 35d04f58ed639d32ca9e59f9f817b67be3c15dad /Zend | |
parent | 93acbedce8afa8f77478eea30985e89efcdc61d1 (diff) | |
download | php-git-5090b1e8d5d3a3dc2afcb418d059520e8b9dd528.tar.gz |
Fix zend_fiel_handle handling. Should fix URL include
and various opened_path inconsistencies.
Diffstat (limited to 'Zend')
-rw-r--r-- | Zend/zend-scanner.l | 21 | ||||
-rw-r--r-- | Zend/zend.c | 1 | ||||
-rw-r--r-- | Zend/zend_compile.c | 8 | ||||
-rw-r--r-- | Zend/zend_compile.h | 4 | ||||
-rw-r--r-- | Zend/zend_execute.c | 13 |
5 files changed, 20 insertions, 27 deletions
diff --git a/Zend/zend-scanner.l b/Zend/zend-scanner.l index f95d7a13da..ada9c08cff 100644 --- a/Zend/zend-scanner.l +++ b/Zend/zend-scanner.l @@ -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; } diff --git a/Zend/zend.c b/Zend/zend.c index 5a12267e9c..f18beea9f4 100644 --- a/Zend/zend.c +++ b/Zend/zend.c @@ -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)); diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index e76e542ba8..4061ccfa4b 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -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); } diff --git a/Zend/zend_compile.h b/Zend/zend_compile.h index bb49951afb..c0f64c3880 100644 --- a/Zend/zend_compile.h +++ b/Zend/zend_compile.h @@ -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); diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c index 1017543cf3..a4e3e3f36f 100644 --- a/Zend/zend_execute.c +++ b/Zend/zend_execute.c @@ -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); } |