summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Zend/zend-scanner.l20
1 files changed, 18 insertions, 2 deletions
diff --git a/Zend/zend-scanner.l b/Zend/zend-scanner.l
index aa50dd62e4..ce76c75e50 100644
--- a/Zend/zend-scanner.l
+++ b/Zend/zend-scanner.l
@@ -170,8 +170,24 @@ ZEND_API inline int open_file_for_scanning(zend_file_handle *file_handle CLS_DC)
yyin = tmp;
yy_switch_to_buffer(yy_create_buffer(yyin, YY_BUF_SIZE));
BEGIN(INITIAL);
- #else
- ifstream *input_file = new ifstream(file_handle->filename);
+#else
+ ifstream *input_file;
+
+ switch (file_handle->type) {
+ case ZEND_HANDLE_FD:
+ input_file = new ifstream(file_handle->handle.fd);
+ break;
+ case ZEND_HANDLE_FILENAME:
+ input_file = new ifstream(file_handle->filename);
+ break;
+ case ZEND_HANDLE_FP:
+ if (file_handle->handle.fp==stdin) {
+ input_file = (ifstream *) &cin;
+ } else {
+ input_file = new ifstream(file_handle->filename);
+ }
+ break;
+ }
CG(ZFL) = new ZendFlexLexer;
CG(ZFL)->switch_streams(input_file, &cout);