From 6b797c852bd45a3c3ed5cd375513c542778a9e48 Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Mon, 30 Jun 2008 22:10:43 +0000 Subject: [PATCH] Fix recovery.conf boolean variables to take the same range of string values as postgresql.conf. --- src/backend/access/transam/xlog.c | 24 +++++++++--------------- src/backend/utils/misc/guc.c | 4 ++-- src/include/utils/guc.h | 3 ++- 3 files changed, 13 insertions(+), 18 deletions(-) diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index 4c9b7872ca..2e832db4b1 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/backend/access/transam/xlog.c,v 1.314 2008/06/12 09:12:30 heikki Exp $ + * $PostgreSQL: pgsql/src/backend/access/transam/xlog.c,v 1.315 2008/06/30 22:10:43 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -4523,13 +4523,10 @@ readRecoveryCommandFile(void) /* * does nothing if a recovery_target is not also set */ - if (strcmp(tok2, "true") == 0) - recoveryTargetInclusive = true; - else - { - recoveryTargetInclusive = false; - tok2 = "false"; - } + if (!parse_bool(tok2, &recoveryTargetInclusive)) + ereport(ERROR, + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("parameter \"recovery_target_inclusive\" requires a Boolean value"))); ereport(LOG, (errmsg("recovery_target_inclusive = %s", tok2))); } @@ -4538,13 +4535,10 @@ readRecoveryCommandFile(void) /* * does nothing if a recovery_target is not also set */ - if (strcmp(tok2, "true") == 0) - recoveryLogRestartpoints = true; - else - { - recoveryLogRestartpoints = false; - tok2 = "false"; - } + if (!parse_bool(tok2, &recoveryLogRestartpoints)) + ereport(ERROR, + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("parameter \"log_restartpoints\" requires a Boolean value"))); ereport(LOG, (errmsg("log_restartpoints = %s", tok2))); } diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index 76c6843fd6..44336b2832 100644 --- a/src/backend/utils/misc/guc.c +++ b/src/backend/utils/misc/guc.c @@ -10,7 +10,7 @@ * Written by Peter Eisentraut . * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/utils/misc/guc.c,v 1.457 2008/06/30 10:58:47 heikki Exp $ + * $PostgreSQL: pgsql/src/backend/utils/misc/guc.c,v 1.458 2008/06/30 22:10:43 momjian Exp $ * *-------------------------------------------------------------------- */ @@ -3991,7 +3991,7 @@ ReportGUCOption(struct config_generic * record) * If the string parses okay, return true, else false. * If okay and result is not NULL, return the value in *result. */ -static bool +bool parse_bool(const char *value, bool *result) { size_t len = strlen(value); diff --git a/src/include/utils/guc.h b/src/include/utils/guc.h index 2337487d46..c6e42ef520 100644 --- a/src/include/utils/guc.h +++ b/src/include/utils/guc.h @@ -7,7 +7,7 @@ * Copyright (c) 2000-2008, PostgreSQL Global Development Group * Written by Peter Eisentraut . * - * $PostgreSQL: pgsql/src/include/utils/guc.h,v 1.96 2008/05/28 09:04:06 mha Exp $ + * $PostgreSQL: pgsql/src/include/utils/guc.h,v 1.97 2008/06/30 22:10:43 momjian Exp $ *-------------------------------------------------------------------- */ #ifndef GUC_H @@ -223,6 +223,7 @@ extern int NewGUCNestLevel(void); extern void AtEOXact_GUC(bool isCommit, int nestLevel); extern void BeginReportingGUCOptions(void); extern void ParseLongOption(const char *string, char **name, char **value); +extern bool parse_bool(const char *value, bool *result); extern bool set_config_option(const char *name, const char *value, GucContext context, GucSource source, GucAction action, bool changeVal);