From 7f7fb4e64c225e5f2a4ce99cc4d2eefc951139fd Mon Sep 17 00:00:00 2001
From: Michael Meskes <meskes@postgresql.org>
Date: Sun, 10 Mar 2002 12:09:54 +0000
Subject: [PATCH] Fixed two bugs in define command in pgc.l

---
 src/interfaces/ecpg/ChangeLog     |  4 ++++
 src/interfaces/ecpg/preproc/pgc.l | 19 ++++++++++++-------
 2 files changed, 16 insertions(+), 7 deletions(-)

diff --git a/src/interfaces/ecpg/ChangeLog b/src/interfaces/ecpg/ChangeLog
index 946d932394d..06e465ff9cf 100644
--- a/src/interfaces/ecpg/ChangeLog
+++ b/src/interfaces/ecpg/ChangeLog
@@ -1221,6 +1221,10 @@ Wed Jan 23 17:35:23 CET 2002
 Wed Mar  6 10:40:28 CET 2002
 
 	- Synced preproc.y with gram.y.
+
+Sun Mar 10 13:08:22 CET 2002
+
+	- Fixed two bugs in define command in lexer.
 	- Set ecpg version to 2.10.0.
 	- Set library version to 3.4.0.
 
diff --git a/src/interfaces/ecpg/preproc/pgc.l b/src/interfaces/ecpg/preproc/pgc.l
index 15e79c91961..41874ef54a1 100644
--- a/src/interfaces/ecpg/preproc/pgc.l
+++ b/src/interfaces/ecpg/preproc/pgc.l
@@ -12,7 +12,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/pgc.l,v 1.86 2002/03/06 06:10:36 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/pgc.l,v 1.87 2002/03/10 12:09:54 meskes Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -352,7 +352,7 @@ cppline			{space}*#(.*\\{space})*.*
 
 <xh><<EOF>>		{ mmerror(PARSE_ERROR, ET_ERROR, "Unterminated hexadecimal integer"); }
 
-{xqstart}			{
+<C,SQL>{xqstart}		{
 					state_before = YYSTATE;
 					BEGIN(xq);
 					startlit();
@@ -412,7 +412,7 @@ cppline			{space}*#(.*\\{space})*.*
 					addlit(yytext, yyleng);
 				}
 <xd,xdc><<EOF>> 	 	        { mmerror(PARSE_ERROR, ET_ERROR, "Unterminated quoted identifier"); }
-{xdstart}			{
+<C,SQL>{xdstart}		{
 					state_before = YYSTATE;
 					BEGIN(xdc);
 					startlit();
@@ -789,7 +789,6 @@ cppline			{space}*#(.*\\{space})*.*
 
                                         /* initial definition */
                                         this->old = old;
-                                        /* this->new = mm_strdup(scanstr(literalbuf));*/
                                         this->new = mm_strdup(literalbuf);
 					this->next = defines;
 					defines = this;
@@ -797,11 +796,11 @@ cppline			{space}*#(.*\\{space})*.*
 
 				BEGIN(C);
 			}
-<def>[^";"]		{
+<def>[^;]		{
 				addlit(yytext, yyleng);
 			}
 
-<incl>[^";"]+";" 	{ /* got the include file name */
+<incl>[^;]+";" 	{ /* got the include file name */
 			  struct _yy_buffer *yb;
 			  struct _include_path *ip;
 			  char inc_file[MAXPGPATH];
@@ -870,6 +869,7 @@ cppline			{space}*#(.*\\{space})*.*
 			  else
 			  {
 				struct _yy_buffer *yb = yy_buffer;
+				int i;
 
 				if (yyin != NULL)
 					fclose(yyin);
@@ -878,13 +878,18 @@ cppline			{space}*#(.*\\{space})*.*
 				yy_switch_to_buffer(yy_buffer->buffer);
 
 				yylineno = yy_buffer->lineno;
+				
+				/* We have to output the filename only if we change files here */
+				i = strcmp(input_filename, yy_buffer->filename);
 
 				free(input_filename);
 				input_filename = yy_buffer->filename;
 
 				yy_buffer = yy_buffer->next;
 				free(yb);
-				output_line_number();
+
+				if (i != 0)
+					output_line_number();
 			  }
 			}
 %%
-- 
GitLab