guc-file.diff
application/octet-stream
Filename: guc-file.diff
Type: application/octet-stream
Part: 0
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: context
| File | + | − |
|---|---|---|
| src/backend/utils/misc/guc-file.l | 44 | 0 |
*** a/src/backend/utils/misc/guc-file.l
--- b/src/backend/utils/misc/guc-file.l
***************
*** 103,109 **** STRING \'([^'\\\n]|\\.|\'\')*\'
void
ProcessConfigFile(GucContext context)
{
! int elevel;
ConfigVariable *item,
*head,
*tail;
--- 103,110 ----
void
ProcessConfigFile(GucContext context)
{
! int elevel,
! errorcount;
ConfigVariable *item,
*head,
*tail;
***************
*** 127,132 **** ProcessConfigFile(GucContext context)
--- 128,134 ----
/* Parse the file into a list of option names and values */
head = tail = NULL;
+ errorcount = 0;
if (!ParseConfigFile(ConfigFileName, NULL, 0, elevel, &head, &tail))
goto cleanup_list;
***************
*** 145,151 **** ProcessConfigFile(GucContext context)
{
cvc = guc_strdup(elevel, cvc_struct->reset_val);
if (cvc == NULL)
! goto cleanup_list;
}
else if (head != NULL &&
guc_name_compare(head->name, "custom_variable_classes") == 0)
--- 147,153 ----
{
cvc = guc_strdup(elevel, cvc_struct->reset_val);
if (cvc == NULL)
! errorcount++;
}
else if (head != NULL &&
guc_name_compare(head->name, "custom_variable_classes") == 0)
***************
*** 162,168 **** ProcessConfigFile(GucContext context)
(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
errmsg("invalid value for parameter \"%s\": \"%s\"",
head->name, head->value)));
! goto cleanup_list;
}
}
--- 164,170 ----
(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
errmsg("invalid value for parameter \"%s\": \"%s\"",
head->name, head->value)));
! errorcount++;
}
}
***************
*** 201,207 **** ProcessConfigFile(GucContext context)
(errcode(ERRCODE_UNDEFINED_OBJECT),
errmsg("unrecognized configuration parameter \"%s\"",
item->name)));
! goto cleanup_list;
}
/*
* 2. There is no GUC entry. If we called set_config_option then
--- 203,209 ----
(errcode(ERRCODE_UNDEFINED_OBJECT),
errmsg("unrecognized configuration parameter \"%s\"",
item->name)));
! errorcount++;
}
/*
* 2. There is no GUC entry. If we called set_config_option then
***************
*** 221,228 **** ProcessConfigFile(GucContext context)
if (!set_config_option(item->name, item->value, context,
PGC_S_FILE, GUC_ACTION_SET, false))
! goto cleanup_list;
}
/*
* Check for variables having been removed from the config file, and
--- 223,239 ----
if (!set_config_option(item->name, item->value, context,
PGC_S_FILE, GUC_ACTION_SET, false))
! errorcount++;
!
! /* avoid excessive bloat of the log file */
! if (IsUnderPostmaster || errorcount >= 100 )
! break;
}
+
+ /* Don't change configuration options if errors were detected earlier */
+ if (errorcount > 0)
+ goto cleanup_list;
+
/*
* Check for variables having been removed from the config file, and
***************
*** 294,300 **** ProcessConfigFile(GucContext context)
set_config_option("client_encoding", envvar, PGC_POSTMASTER,
PGC_S_ENV_VAR, GUC_ACTION_SET, true);
!
/* If we got here all the options checked out okay, so apply them. */
for (item = head; item; item = item->next)
{
--- 305,311 ----
set_config_option("client_encoding", envvar, PGC_POSTMASTER,
PGC_S_ENV_VAR, GUC_ACTION_SET, true);
!
/* If we got here all the options checked out okay, so apply them. */
for (item = head; item; item = item->next)
{
***************
*** 354,360 **** ParseConfigFile(const char *config_file, const char *calling_file,
ConfigVariable **head_p,
ConfigVariable **tail_p)
{
! bool OK = true;
FILE *fp;
char abs_path[MAXPGPATH];
--- 365,371 ----
ConfigVariable **head_p,
ConfigVariable **tail_p)
{
! bool ok = true;
FILE *fp;
char abs_path[MAXPGPATH];
***************
*** 407,417 **** ParseConfigFile(const char *config_file, const char *calling_file,
return false;
}
! OK = ParseConfigFp(fp, config_file, depth, elevel, head_p, tail_p);
FreeFile(fp);
! return OK;
}
/*
--- 418,428 ----
return false;
}
! ok = ParseConfigFp(fp, config_file, depth, elevel, head_p, tail_p);
FreeFile(fp);
! return ok;
}
/*
***************
*** 444,452 **** bool
ParseConfigFp(FILE *fp, const char *config_file, int depth, int elevel,
ConfigVariable **head_p, ConfigVariable **tail_p)
{
- bool OK = true;
YY_BUFFER_STATE lex_buffer;
! int token;
/*
* Parse
--- 455,463 ----
ParseConfigFp(FILE *fp, const char *config_file, int depth, int elevel,
ConfigVariable **head_p, ConfigVariable **tail_p)
{
YY_BUFFER_STATE lex_buffer;
! int token,
! errorcount;
/*
* Parse
***************
*** 455,460 **** ParseConfigFp(FILE *fp, const char *config_file, int depth, int elevel,
--- 466,472 ----
yy_switch_to_buffer(lex_buffer);
ConfigFileLineno = 1;
+ errorcount = 0;
/* This loop iterates once per logical line */
while ((token = yylex()))
***************
*** 512,519 **** ParseConfigFp(FILE *fp, const char *config_file, int depth, int elevel,
{
pfree(opt_name);
pfree(opt_value);
! OK = false;
! goto cleanup_exit;
}
yy_switch_to_buffer(lex_buffer);
ConfigFileLineno = save_ConfigFileLineno;
--- 524,530 ----
{
pfree(opt_name);
pfree(opt_value);
! goto parse_error;
}
yy_switch_to_buffer(lex_buffer);
ConfigFileLineno = save_ConfigFileLineno;
***************
*** 573,599 **** ParseConfigFp(FILE *fp, const char *config_file, int depth, int elevel,
/* break out of loop if read EOF, else loop for next line */
if (token == 0)
break;
}
/* successful completion of parsing */
- goto cleanup_exit;
-
- parse_error:
- if (token == GUC_EOL || token == 0)
- ereport(elevel,
- (errcode(ERRCODE_SYNTAX_ERROR),
- errmsg("syntax error in file \"%s\" line %u, near end of line",
- config_file, ConfigFileLineno - 1)));
- else
- ereport(elevel,
- (errcode(ERRCODE_SYNTAX_ERROR),
- errmsg("syntax error in file \"%s\" line %u, near token \"%s\"",
- config_file, ConfigFileLineno, yytext)));
- OK = false;
-
- cleanup_exit:
yy_delete_buffer(lex_buffer);
! return OK;
}
--- 584,613 ----
/* break out of loop if read EOF, else loop for next line */
if (token == 0)
break;
+
+ /* skip over parse_error if we made it this far without error */
+ continue;
+
+ parse_error:
+ if (token == GUC_EOL || token == 0)
+ ereport(elevel,
+ (errcode(ERRCODE_SYNTAX_ERROR),
+ errmsg("syntax error in file \"%s\" line %u, near end of line",
+ config_file, ConfigFileLineno - 1)));
+ else
+ ereport(elevel,
+ (errcode(ERRCODE_SYNTAX_ERROR),
+ errmsg("syntax error in file \"%s\" line %u, near token \"%s\"",
+ config_file, ConfigFileLineno, yytext)));
+ errorcount++;
+ /* avoid excessive bloat of the log file */
+ if (IsUnderPostmaster || errorcount >= 100)
+ break;
}
/* successful completion of parsing */
yy_delete_buffer(lex_buffer);
! return (errorcount == 0);
}