OSDN Git Service

Fix recovery.conf boolean variables to take the same range of string
authorBruce Momjian <bruce@momjian.us>
Mon, 30 Jun 2008 22:10:43 +0000 (22:10 +0000)
committerBruce Momjian <bruce@momjian.us>
Mon, 30 Jun 2008 22:10:43 +0000 (22:10 +0000)
values as postgresql.conf.

src/backend/access/transam/xlog.c
src/backend/utils/misc/guc.c
src/include/utils/guc.h

index 4c9b787..2e832db 100644 (file)
@@ -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)));
                }
index 76c6843..44336b2 100644 (file)
@@ -10,7 +10,7 @@
  * Written by Peter Eisentraut <peter_e@gmx.net>.
  *
  * 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);
index 2337487..c6e42ef 100644 (file)
@@ -7,7 +7,7 @@
  * Copyright (c) 2000-2008, PostgreSQL Global Development Group
  * Written by Peter Eisentraut <peter_e@gmx.net>.
  *
- * $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);