--- a2ps-4.13/src/sheets-map.l.includes 2000-02-04 21:07:47.000000000 +0000
+++ a2ps-4.13/src/sheets-map.l 2004-09-07 16:06:27.575891868 +0100
@@ -40,6 +40,7 @@
#define MAX_INCLUDE_DEPTH 10
static YY_BUFFER_STATE include_stack[MAX_INCLUDE_DEPTH];
+static int lineno_stack[MAX_INCLUDE_DEPTH];
static char *filename_stack[MAX_INCLUDE_DEPTH];
static int include_stack_ptr;
static char *yyfilename;
@@ -93,7 +94,7 @@
white [[:space:]]+
key [-a-zA-Z0-9_]+:
comment #.*
-include include([^)]+)
+include include\([^)]+\)
%%
{key} token_val = xstrndup (yytext, yyleng - 1); return tKEY;
@@ -102,7 +103,7 @@
{white} ;
{comment} ;
{include} { /* Kill the closing paren and pass the file name. */
- yytext[yyleng] = '\0';
+ yytext[yyleng-1] = '\0';
yy_include_push (yytext + strlen ("include("));
}
@@ -210,11 +211,13 @@
error (1, 0, _("too many includes"));
include_stack[include_stack_ptr] = YY_CURRENT_BUFFER;
- filename_stack[include_stack_ptr++] = file;
+ lineno_stack[include_stack_ptr] = yylineno;
+ filename_stack[include_stack_ptr++] = yyfilename;
message (msg_file, (stderr, "%s:%d: includes %s\n",
yyfilename, yylineno, file));
+ yyfilename = file;
yyin = xrfopen (yyfilename);
yy_switch_to_buffer (yy_create_buffer (yyin, YY_BUF_SIZE));
@@ -227,8 +230,8 @@
{
fclose (yyin);
yy_delete_buffer (YY_CURRENT_BUFFER);
- free (yyfilename);
yyfilename = filename_stack[include_stack_ptr];
+ yylineno = lineno_stack[include_stack_ptr];
yy_switch_to_buffer (include_stack[include_stack_ptr]);
message (msg_file, (stderr, "Back to file `%s'.\n", yyfilename));
}
@@ -254,6 +257,7 @@
yy_close (void)
{
fclose (yyin);
+ free (yyfilename);
}
int