ZEND_API int open_file_for_scanning(zend_file_handle *file_handle CLS_DC)
{
- char *file_path = file_handle->opened_path;
- if(!file_path) {
- file_path = file_handle->filename;
- }
+ char *file_path;
#ifndef ZTS
switch (file_handle->type) {
file_path = file_handle->opened_path;
break;
case ZEND_HANDLE_FD:
+ file_path = file_handle->filename;
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->handle.fp = file_handle->handle.fp;
break;
}
break;
}
+
+ file_path = file_handle->filename;
+
if (file_handle->handle.is->fail()) {
delete file_handle->handle.is;
return FAILURE;
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.opened_path = opened_path;
- file_handle.free_filename = 0;
+ if (opened_path) {
+ file_handle.filename = estrdup(opened_path);
+ file_handle.free_filename = 1;
+ } else {
+ file_handle.filename = inc_filename->value.str.val;
+ 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) {
} else {
fclose(file_handle.handle.fp);
}
- if (opened_path) {
- free(opened_path);
- }
} else {
zend_message_dispatcher(ZMSG_FAILED_INCLUDE_FOPEN, file_handle.filename);
}
+ if (opened_path) {
+ free (opened_path);
+ }
break;
}
break;