From: Alvaro Herrera Date: Fri, 19 May 2023 12:58:54 +0200 Subject: [PATCH] Tweak xheader_width input parsing Don't throw away the previous value when an invalid value is proposed. Also, change the error messages to not need separate translations. While at it, change pager_min_lines to also avoid changing the setting when an invalid value is given. --- src/bin/psql/command.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/bin/psql/command.c b/src/bin/psql/command.c index 607a57715a3..07c5f026b9b 100644 --- a/src/bin/psql/command.c +++ b/src/bin/psql/command.c @@ -4521,13 +4521,16 @@ do_pset(const char *param, const char *value, printQueryOpt *popt, bool quiet) popt->topt.expanded_header_width_type = PRINT_XHEADER_PAGE; else { - popt->topt.expanded_header_width_type = PRINT_XHEADER_EXACT_WIDTH; - popt->topt.expanded_header_exact_width = atoi(value); - if (popt->topt.expanded_header_exact_width == 0) + int intval = atoi(value); + + if (intval == 0) { pg_log_error("\\pset: allowed xheader_width values are full (default), column, page, or a number specifying the exact width."); return false; } + + popt->topt.expanded_header_width_type = PRINT_XHEADER_EXACT_WIDTH; + popt->topt.expanded_header_exact_width = intval; } } @@ -4660,8 +4663,9 @@ do_pset(const char *param, const char *value, printQueryOpt *popt, bool quiet) /* set minimum lines for pager use */ else if (strcmp(param, "pager_min_lines") == 0) { - if (value) - popt->topt.pager_min_lines = atoi(value); + if (value && + !ParseVariableNum(value, "pager_min_lines", &popt->topt.pager_min_lines)) + return false; } /* disable "(x rows)" footer */ @@ -4727,11 +4731,11 @@ printPsetInfo(const char *param, printQueryOpt *popt) else if (strcmp(param, "xheader_width") == 0) { if (popt->topt.expanded_header_width_type == PRINT_XHEADER_FULL) - printf(_("Expanded header width is 'full'.\n")); + printf(_("Expanded header width is '%s'.\n"), "full"); else if (popt->topt.expanded_header_width_type == PRINT_XHEADER_COLUMN) - printf(_("Expanded header width is 'column'.\n")); + printf(_("Expanded header width is '%s'.\n"), "column"); else if (popt->topt.expanded_header_width_type == PRINT_XHEADER_PAGE) - printf(_("Expanded header width is 'page'.\n")); + printf(_("Expanded header width is '%s'.\n"), "page"); else if (popt->topt.expanded_header_width_type == PRINT_XHEADER_EXACT_WIDTH) printf(_("Expanded header width is %d.\n"), popt->topt.expanded_header_exact_width); } base-commit: 0b8ace8d773257fffeaceda196ed94877c2b74df -- 2.39.2 --7dltxkhfrj6skipq--