summaryrefslogtreecommitdiff
path: root/Zend/zend_ini_scanner.l
diff options
context:
space:
mode:
authorZeev Suraski <zeev@php.net>2000-10-29 22:40:01 +0000
committerZeev Suraski <zeev@php.net>2000-10-29 22:40:01 +0000
commitab3beffad78160010a58d377e0d507c76e87e6c4 (patch)
treef51f5129ad383e98db2d1889ba7f6b68fab40f6f /Zend/zend_ini_scanner.l
parentd0fbddcc2b363bb69ecc10c507f8172a47d1727b (diff)
downloadphp-git-ab3beffad78160010a58d377e0d507c76e87e6c4.tar.gz
The new INI parser is showing some signs of life
Diffstat (limited to 'Zend/zend_ini_scanner.l')
-rw-r--r--Zend/zend_ini_scanner.l60
1 files changed, 60 insertions, 0 deletions
diff --git a/Zend/zend_ini_scanner.l b/Zend/zend_ini_scanner.l
index 6f1880d9d9..48379e3485 100644
--- a/Zend/zend_ini_scanner.l
+++ b/Zend/zend_ini_scanner.l
@@ -22,6 +22,20 @@
#include "zend_ini_parser.h"
#include "zend_ini_scanner.h"
+#ifdef ZTS
+# ifdef HAVE_STDIOSTR_H
+# include <stdiostr.h>
+# endif
+# ifdef HAVE_STDIOSTREAM_H
+# include <stdiostream.h>
+# endif
+# ifdef ZEND_WIN32
+# include <strstrea.h>
+# else
+# include <strstream.h>
+# endif
+#endif
+
#undef YYSTYPE
#define YYSTYPE zval
@@ -59,9 +73,55 @@ int ini_lex(zval *ini_lval)
return CG(ini_scanner)->lex_scan(ini_lval);
}
+ZendIniFlexLexer::~ZendIniFlexLexer()
+{
+ if (yy_start_stack) {
+ yy_flex_free(yy_start_stack);
+ }
+}
+
+int yyFlexLexer::yylex()
+{
+ fprintf(stderr, "Error: yyFlexLexer::yylex() called\n");
+ return -1;
+}
+
#endif
+int zend_ini_open_file_for_scanning(zend_file_handle *fh)
+{
+ FILE *fp;
+ CLS_FETCH();
+
+ switch (fh->type) {
+ case ZEND_HANDLE_FP:
+ fp = fh->handle.fp;
+ break;
+ case ZEND_HANDLE_FILENAME:
+ fp = zend_fopen(fh->filename, NULL);
+ break;
+ default:
+ return FAILURE;
+ }
+
+#ifdef ZTS
+ if (!fp) {
+ return FAILURE;
+ }
+ fh->handle.is = new istdiostream(fp);
+ fh->type = ZEND_HANDLE_STDIOSTREAM;
+
+ CG(ini_scanner) = new ZendIniFlexLexer;
+ CG(ini_scanner)->switch_streams(fh->handle.is, &cout);
+#else
+ init_cfg_scanner();
+ yyin = fp;
+ yy_switch_to_buffer(yy_create_buffer(yyin, YY_BUF_SIZE));
+#endif
+ return SUCCESS;
+}
+
%}
%option noyywrap