cvs: ZendEngine2 / zend_language_scanner.c zend_language_scanner.l zend_language_scanner_defs.h zend_stream.c php-src/sapi/cli php_cli.c

[email protected] ("Ilia Alshanetsky") Fri, 09 Jan 2009 17:20:57 -0000
Newsgroups php.zend-engine.cvs
Message-ID <cvsiliaa1231521657@cvsserver>
iliaa		Fri Jan  9 17:20:57 2009 UTC

  Modified files:              
    /php-src/sapi/cli	php_cli.c 
    /ZendEngine2	zend_language_scanner.l zend_stream.c 
                	zend_language_scanner_defs.h zend_language_scanner.c 
  Log:
  
  Corrected fix for bug #46844 to only trigger on the 1st line of CLI opened
  files.
  
http://cvs.php.net/viewvc.cgi/php-src/sapi/cli/php_cli.c?r1=1.204&r2=1.205&diff_format=u
Index: php-src/sapi/cli/php_cli.c
diff -u php-src/sapi/cli/php_cli.c:1.204 php-src/sapi/cli/php_cli.c:1.205
--- php-src/sapi/cli/php_cli.c:1.204	Fri Jan  2 13:14:17 2009
+++ php-src/sapi/cli/php_cli.c	Fri Jan  9 17:20:56 2009
@@ -20,7 +20,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_cli.c,v 1.204 2009/01/02 13:14:17 helly Exp $ */
+/* $Id: php_cli.c,v 1.205 2009/01/09 17:20:56 iliaa Exp $ */
 
 #include "php.h"
 #include "php_globals.h"
@@ -574,6 +574,8 @@
  */
 static int cli_seek_file_begin(zend_file_handle *file_handle, char *script_file, int *lineno TSRMLS_DC)
 {
+	char c;
+
 	*lineno = 1;
 
 	file_handle->type = ZEND_HANDLE_FP;
@@ -584,6 +586,25 @@
 		return FAILURE;
 	}
 	file_handle->filename = script_file;
+
+	/* #!php support */
+	c = fgetc(file_handle->handle.fp);
+	if (c == '#' && (c = fgetc(file_handle->handle.fp)) == '!') {
+		while (c != '\n' && c != '\r' && c != EOF) {
+			c = fgetc(file_handle->handle.fp);	/* skip to end of line */
+		}
+		/* handle situations where line is terminated by \r\n */
+		if (c == '\r') {
+			if (fgetc(file_handle->handle.fp) != '\n') {
+				long pos = ftell(file_handle->handle.fp);
+				fseek(file_handle->handle.fp, pos - 1, SEEK_SET);
+			}
+		}
+		*lineno = 2;
+	} else {
+		rewind(file_handle->handle.fp);
+	}
+
 	return SUCCESS;
 }
 /* }}} */
http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_language_scanner.l?r1=1.199&r2=1.200&diff_format=u
Index: ZendEngine2/zend_language_scanner.l
diff -u ZendEngine2/zend_language_scanner.l:1.199 ZendEngine2/zend_language_scanner.l:1.200
--- ZendEngine2/zend_language_scanner.l:1.199	Thu Jan  1 20:19:39 2009
+++ ZendEngine2/zend_language_scanner.l	Fri Jan  9 17:20:56 2009
@@ -21,7 +21,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_language_scanner.l,v 1.199 2009/01/01 20:19:39 iliaa Exp $ */
+/* $Id: zend_language_scanner.l,v 1.200 2009/01/09 17:20:56 iliaa Exp $ */
 
 #if 0
 # define YYDEBUG(s, c) printf("state: %d char: %c\n", s, c)
@@ -1336,27 +1336,6 @@
 		return 0;
 	}
 
-	/* ignore first line when it's started with a #! */
-	if (YYCURSOR == SCNG(yy_start) && *YYCURSOR == '#' && *(YYCURSOR + 1) == '!') {
-		while (++YYCURSOR < YYLIMIT) {
-			if (*YYCURSOR == '\n') {
-				++YYCURSOR;
-				CG(zend_lineno)++;
-				goto restart;
-			}
-
-			if (*YYCURSOR == '\r') {
-				if (++YYCURSOR < YYLIMIT && *YYCURSOR == '\n') { /* match \r\n as single newline */
-					++YYCURSOR;
-				}
-				CG(zend_lineno)++;
-				goto restart;
-			}
-		}
-
-		return 0; /* EOF */
-	}
-
 /*!re2c
 re2c:yyfill:check = 0;
 LNUM	[0-9]+
http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_stream.c?r1=1.24&r2=1.25&diff_format=u
Index: ZendEngine2/zend_stream.c
diff -u ZendEngine2/zend_stream.c:1.24 ZendEngine2/zend_stream.c:1.25
--- ZendEngine2/zend_stream.c:1.24	Wed Dec 31 11:12:29 2008
+++ ZendEngine2/zend_stream.c	Fri Jan  9 17:20:56 2009
@@ -19,7 +19,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_stream.c,v 1.24 2008/12/31 11:12:29 sebastian Exp $ */
+/* $Id: zend_stream.c,v 1.25 2009/01/09 17:20:56 iliaa Exp $ */
 
 
 #include "zend.h"
@@ -219,7 +219,7 @@
 #if HAVE_MMAP
 		if (file_handle->handle.fp) {
 			/*  *buf[size] is zeroed automatically by the kernel */
-			*buf = mmap(0, size + ZEND_MMAP_AHEAD, PROT_READ, MAP_PRIVATE, fileno(file_handle->handle.fp), 0);
+			*buf = mmap(0, size + ZEND_MMAP_AHEAD, PROT_READ, MAP_PRIVATE, fileno(file_handle->handle.fp), ftell(file_handle->handle.fp));
 			if (*buf != MAP_FAILED) {
 				file_handle->handle.stream.mmap.len = size;
 				file_handle->handle.stream.mmap.map = *buf;
http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_language_scanner_defs.h?r1=1.12&r2=1.13&diff_format=u
Index: ZendEngine2/zend_language_scanner_defs.h
diff -u ZendEngine2/zend_language_scanner_defs.h:1.12 ZendEngine2/zend_language_scanner_defs.h:1.13
--- ZendEngine2/zend_language_scanner_defs.h:1.12	Thu Dec  4 20:12:29 2008
+++ ZendEngine2/zend_language_scanner_defs.h	Fri Jan  9 17:20:56 2009
@@ -1,5 +1,5 @@
-/* Generated by re2c 0.13.5 on Tue Dec  2 17:02:52 2008 */
-#line 3 "Zend/zend_language_scanner_defs.h"
+/* Generated by re2c 0.13.5 on Fri Jan  9 12:18:37 2009 */
+#line 3 "./zend_language_scanner_defs.h"
 
 enum YYCONDTYPE {
 	yycST_IN_SCRIPTING,
http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_language_scanner.c?r1=1.20&r2=1.21&diff_format=u
Index: ZendEngine2/zend_language_scanner.c
diff -u ZendEngine2/zend_language_scanner.c:1.20 ZendEngine2/zend_language_scanner.c:1.21
--- ZendEngine2/zend_language_scanner.c:1.20	Thu Jan  1 20:19:39 2009
+++ ZendEngine2/zend_language_scanner.c	Fri Jan  9 17:20:57 2009
@@ -23,7 +23,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_language_scanner.c,v 1.20 2009/01/01 20:19:39 iliaa Exp $ */
+/* $Id: zend_language_scanner.c,v 1.21 2009/01/09 17:20:57 iliaa Exp $ */
 
 #if 0
 # define YYDEBUG(s, c) printf("state: %d char: %c\n", s, c)
@@ -6474,7 +6474,7 @@
 		++YYCURSOR;
 		YYDEBUG(556, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
-#line 1641 "Zend/zend_language_scanner.l"
+#line 1620 "Zend/zend_language_scanner.l"
 		{
 	return T_UNICODE_CAST;
 }
@@ -8614,7 +8614,7 @@
 yy888:
 		YYDEBUG(888, *YYCURSOR);
 		yyleng = YYCURSOR - SCNG(yy_text);
-#line 1580 "Zend/zend_language_scanner.l"
+#line 1559 "Zend/zend_language_scanner.l"
 		{
 	Z_STRVAL_P(zendlval) = yytext; /* no copying - intentional */
 	Z_STRLEN_P(zendlval) = yyleng;