summaryrefslogtreecommitdiff
path: root/src/backend/utils/misc
diff options
context:
space:
mode:
authorTom Lane2020-10-04 20:09:55 +0000
committerTom Lane2020-10-04 20:09:55 +0000
commit97b61448262eae5e1b4a631aeac63b11d902a474 (patch)
tree4f672fc955dcb1ff2da44753921c2f3fdd72de23 /src/backend/utils/misc
parent9081bddbd75e4e8994ca243c820ca63387bd33f7 (diff)
Make postgres.bki use the same literal-string syntax as postgresql.conf.
The BKI file's string quoting conventions were previously quite weird, perhaps as a result of repurposing a function built to scan single-quoted strings to scan double-quoted ones. Change to use the same rules as we use in GUC files, allowing some simplifications in genbki.pl and initdb.c. While at it, completely remove the backend's scanstr() function, which was essentially a duplicate of the string dequoting code in guc-file.l. Instead export that one (under a less generic name than it had) and let bootscanner.l use it. Now we can clarify that scansup.c exists only to support the main lexer. We could alternatively have removed GUC_scanstr, but this way seems better since the previous arrangement could mislead a reader into thinking that scanstr() had something to do with the main lexer's handling of string literals. Maybe it did once, but if so it was a long time ago. This patch does not bump catversion, since the initially-installed catalog contents don't change. Note however that successful initdb after applying this patch will require up-to-date postgres.bki as well as postgres and initdb executables. In passing, remove a bunch of very-long-obsolete #include's in bootparse.y and bootscanner.l. John Naylor Discussion: https://postgr.es/m/CACPNZCtDpd18T0KATTmCggO2GdVC4ow86ypiq5ENff1VnauL8g@mail.gmail.com
Diffstat (limited to 'src/backend/utils/misc')
-rw-r--r--src/backend/utils/misc/guc-file.l14
1 files changed, 8 insertions, 6 deletions
diff --git a/src/backend/utils/misc/guc-file.l b/src/backend/utils/misc/guc-file.l
index 268b7455283..c98e2202951 100644
--- a/src/backend/utils/misc/guc-file.l
+++ b/src/backend/utils/misc/guc-file.l
@@ -55,7 +55,6 @@ static void record_config_file_error(const char *errmsg,
ConfigVariable **tail_p);
static int GUC_flex_fatal(const char *msg);
-static char *GUC_scanstr(const char *s);
/* LCOV_EXCL_START */
@@ -797,7 +796,7 @@ ParseConfigFp(FILE *fp, const char *config_file, int depth, int elevel,
token != GUC_UNQUOTED_STRING)
goto parse_error;
if (token == GUC_STRING) /* strip quotes and escapes */
- opt_value = GUC_scanstr(yytext);
+ opt_value = DeescapeQuotedString(yytext);
else
opt_value = pstrdup(yytext);
@@ -1132,22 +1131,25 @@ FreeConfigVariable(ConfigVariable *item)
/*
- * scanstr
+ * DeescapeQuotedString
*
* Strip the quotes surrounding the given string, and collapse any embedded
* '' sequences and backslash escapes.
*
- * the string returned is palloc'd and should eventually be pfree'd by the
+ * The string returned is palloc'd and should eventually be pfree'd by the
* caller.
+ *
+ * This is exported because it is also used by the bootstrap scanner.
*/
-static char *
-GUC_scanstr(const char *s)
+char *
+DeescapeQuotedString(const char *s)
{
char *newStr;
int len,
i,
j;
+ /* We just Assert that there are leading and trailing quotes */
Assert(s != NULL && s[0] == '\'');
len = strlen(s);
Assert(len >= 2);