@@ -57,6 +57,7 @@ static intGUC_flex_fatal(const char *msg);
5757
5858%}
5959
60+ %option reentrant
6061%option 8bit
6162%option never-interactive
6263%option nodefault
@@ -353,6 +354,8 @@ ParseConfigFp(FILE *fp, const char *config_file, int depth, int elevel,
353354unsigned int save_ConfigFileLineno = ConfigFileLineno;
354355sigjmp_buf *save_GUC_flex_fatal_jmp = GUC_flex_fatal_jmp;
355356sigjmp_bufflex_fatal_jmp;
357+ yyscan_t scanner;
358+ struct yyguts_t *yyg;/* needed for yytext macro */
356359volatile YY_BUFFER_STATE lex_buffer =NULL ;
357360int errorcount;
358361int token;
@@ -381,11 +384,15 @@ ParseConfigFp(FILE *fp, const char *config_file, int depth, int elevel,
381384ConfigFileLineno =1 ;
382385errorcount =0 ;
383386
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);
386393
387394/* This loop iterates once per logical line */
388- while ((token =yylex ()))
395+ while ((token =yylex (scanner )))
389396{
390397char *opt_name =NULL ;
391398char *opt_value =NULL ;
@@ -400,9 +407,9 @@ ParseConfigFp(FILE *fp, const char *config_file, int depth, int elevel,
400407opt_name =pstrdup (yytext);
401408
402409/* next we have an optional equal sign; discard if present */
403- token =yylex ();
410+ token =yylex (scanner );
404411if (token == GUC_EQUALS)
405- token =yylex ();
412+ token =yylex (scanner );
406413
407414/* now we must have the option value */
408415if (token != GUC_ID &&
@@ -417,7 +424,7 @@ ParseConfigFp(FILE *fp, const char *config_file, int depth, int elevel,
417424opt_value =pstrdup (yytext);
418425
419426/* now we'd like an end of line, or possibly EOF */
420- token =yylex ();
427+ token =yylex (scanner );
421428if (token != GUC_EOL)
422429{
423430if (token !=0 )
@@ -438,7 +445,7 @@ ParseConfigFp(FILE *fp, const char *config_file, int depth, int elevel,
438445 depth +1 , elevel,
439446 head_p, tail_p))
440447OK =false ;
441- yy_switch_to_buffer (lex_buffer);
448+ yy_switch_to_buffer (lex_buffer, scanner );
442449pfree (opt_name);
443450pfree (opt_value);
444451}
@@ -453,7 +460,7 @@ ParseConfigFp(FILE *fp, const char *config_file, int depth, int elevel,
453460 depth +1 , elevel,
454461 head_p, tail_p))
455462OK =false ;
456- yy_switch_to_buffer (lex_buffer);
463+ yy_switch_to_buffer (lex_buffer, scanner );
457464pfree (opt_name);
458465pfree (opt_value);
459466}
@@ -468,7 +475,7 @@ ParseConfigFp(FILE *fp, const char *config_file, int depth, int elevel,
468475 depth +1 , elevel,
469476 head_p, tail_p))
470477OK =false ;
471- yy_switch_to_buffer (lex_buffer);
478+ yy_switch_to_buffer (lex_buffer, scanner );
472479pfree (opt_name);
473480pfree (opt_value);
474481}
@@ -545,14 +552,15 @@ parse_error:
545552
546553/* resync to next end-of-line or EOF */
547554while (token != GUC_EOL && token !=0 )
548- token =yylex ();
555+ token =yylex (scanner );
549556/* break out of loop on EOF */
550557if (token ==0 )
551558break ;
552559}
553560
554561cleanup:
555- yy_delete_buffer (lex_buffer);
562+ yy_delete_buffer (lex_buffer, scanner);
563+ yylex_destroy (scanner);
556564/* Each recursion level must save and restore these static variables. */
557565ConfigFileLineno = save_ConfigFileLineno;
558566GUC_flex_fatal_jmp = save_GUC_flex_fatal_jmp;