@@ -57,6 +57,7 @@ static intGUC_flex_fatal(const char *msg);
57
57
58
58
%}
59
59
60
+ %option reentrant
60
61
%option 8bit
61
62
%option never-interactive
62
63
%option nodefault
@@ -353,6 +354,8 @@ ParseConfigFp(FILE *fp, const char *config_file, int depth, int elevel,
353
354
unsigned int save_ConfigFileLineno = ConfigFileLineno;
354
355
sigjmp_buf *save_GUC_flex_fatal_jmp = GUC_flex_fatal_jmp;
355
356
sigjmp_bufflex_fatal_jmp;
357
+ yyscan_t scanner;
358
+ struct yyguts_t *yyg;/* needed for yytext macro */
356
359
volatile YY_BUFFER_STATE lex_buffer =NULL ;
357
360
int errorcount;
358
361
int token;
@@ -381,11 +384,15 @@ ParseConfigFp(FILE *fp, const char *config_file, int depth, int elevel,
381
384
ConfigFileLineno =1 ;
382
385
errorcount =0 ;
383
386
384
- lex_buffer =yy_create_buffer (fp, YY_BUF_SIZE);
385
- yy_switch_to_buffer (lex_buffer);
387
+ if (yylex_init (&scanner) !=0 )
388
+ elog (elevel," yylex_init() failed: %m" );
389
+ yyg = (struct yyguts_t *) scanner;
390
+
391
+ lex_buffer =yy_create_buffer (fp, YY_BUF_SIZE, scanner);
392
+ yy_switch_to_buffer (lex_buffer, scanner);
386
393
387
394
/* This loop iterates once per logical line */
388
- while ((token =yylex ()))
395
+ while ((token =yylex (scanner )))
389
396
{
390
397
char *opt_name =NULL ;
391
398
char *opt_value =NULL ;
@@ -400,9 +407,9 @@ ParseConfigFp(FILE *fp, const char *config_file, int depth, int elevel,
400
407
opt_name =pstrdup (yytext);
401
408
402
409
/* next we have an optional equal sign; discard if present */
403
- token =yylex ();
410
+ token =yylex (scanner );
404
411
if (token == GUC_EQUALS)
405
- token =yylex ();
412
+ token =yylex (scanner );
406
413
407
414
/* now we must have the option value */
408
415
if (token != GUC_ID &&
@@ -417,7 +424,7 @@ ParseConfigFp(FILE *fp, const char *config_file, int depth, int elevel,
417
424
opt_value =pstrdup (yytext);
418
425
419
426
/* now we'd like an end of line, or possibly EOF */
420
- token =yylex ();
427
+ token =yylex (scanner );
421
428
if (token != GUC_EOL)
422
429
{
423
430
if (token !=0 )
@@ -438,7 +445,7 @@ ParseConfigFp(FILE *fp, const char *config_file, int depth, int elevel,
438
445
depth +1 , elevel,
439
446
head_p, tail_p))
440
447
OK =false ;
441
- yy_switch_to_buffer (lex_buffer);
448
+ yy_switch_to_buffer (lex_buffer, scanner );
442
449
pfree (opt_name);
443
450
pfree (opt_value);
444
451
}
@@ -453,7 +460,7 @@ ParseConfigFp(FILE *fp, const char *config_file, int depth, int elevel,
453
460
depth +1 , elevel,
454
461
head_p, tail_p))
455
462
OK =false ;
456
- yy_switch_to_buffer (lex_buffer);
463
+ yy_switch_to_buffer (lex_buffer, scanner );
457
464
pfree (opt_name);
458
465
pfree (opt_value);
459
466
}
@@ -468,7 +475,7 @@ ParseConfigFp(FILE *fp, const char *config_file, int depth, int elevel,
468
475
depth +1 , elevel,
469
476
head_p, tail_p))
470
477
OK =false ;
471
- yy_switch_to_buffer (lex_buffer);
478
+ yy_switch_to_buffer (lex_buffer, scanner );
472
479
pfree (opt_name);
473
480
pfree (opt_value);
474
481
}
@@ -545,14 +552,15 @@ parse_error:
545
552
546
553
/* resync to next end-of-line or EOF */
547
554
while (token != GUC_EOL && token !=0 )
548
- token =yylex ();
555
+ token =yylex (scanner );
549
556
/* break out of loop on EOF */
550
557
if (token ==0 )
551
558
break ;
552
559
}
553
560
554
561
cleanup:
555
- yy_delete_buffer (lex_buffer);
562
+ yy_delete_buffer (lex_buffer, scanner);
563
+ yylex_destroy (scanner);
556
564
/* Each recursion level must save and restore these static variables. */
557
565
ConfigFileLineno = save_ConfigFileLineno;
558
566
GUC_flex_fatal_jmp = save_GUC_flex_fatal_jmp;