summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZeev Suraski <zeev@php.net>2000-04-07 22:03:46 +0000
committerZeev Suraski <zeev@php.net>2000-04-07 22:03:46 +0000
commit1cf5c33627d693f5540ddd1080e3cf01bdd40c96 (patch)
tree1476235a08d0c07d4894c3b64b71e15e68842a32
parented6e734047d1d0f39b9ee95b40c0fe4626d00ee2 (diff)
downloadphp-git-1cf5c33627d693f5540ddd1080e3cf01bdd40c96.tar.gz
Thoroughly fix include_once()
-rw-r--r--Zend/zend_execute.c22
1 files changed, 12 insertions, 10 deletions
diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c
index 51003570df..a96db60de3 100644
--- a/Zend/zend_execute.c
+++ b/Zend/zend_execute.c
@@ -2050,11 +2050,11 @@ send_by_ref:
switch (opline->op2.u.constant.value.lval) {
case ZEND_INCLUDE_ONCE: {
- FILE *inc_file;
char *opened_path;
- int dummy = 0;
+ int dummy = 1;
zval *inc_filename = get_zval_ptr(&opline->op1, Ts, &EG(free_op1), BP_VAR_R);
zval tmp_inc_filename;
+ zend_file_handle file_handle;
if (inc_filename->type!=IS_STRING) {
tmp_inc_filename = *inc_filename;
@@ -2063,18 +2063,20 @@ send_by_ref:
inc_filename = &tmp_inc_filename;
}
- inc_file = zend_fopen(inc_filename->value.str.val, &opened_path);
+ file_handle.handle.fp = zend_fopen(inc_filename->value.str.val, &opened_path);
+ file_handle.type = ZEND_HANDLE_FP;
+ file_handle.filename = inc_filename->value.str.val;
+ file_handle.free_filename = 0;
- if (inc_file && opened_path) {
- if (zend_hash_add(&EG(included_files), opened_path, strlen(opened_path)+1, (void *)&dummy, sizeof(int), NULL)==FAILURE) {
- fclose(inc_file);
+ 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 = compile_files(1 CLS_CC, 1, &file_handle);
+ }
+ if (opened_path) {
free(opened_path);
- break;
}
- fclose(inc_file);
- free(opened_path);
}
- new_op_array = compile_filename(opline->op2.u.constant.value.lval, inc_filename CLS_CC ELS_CC);
+ break;
if (inc_filename==&tmp_inc_filename) {
zval_dtor(&tmp_inc_filename);
}