Accept additional values for TRUE: y, Y, 1.
authorThomas G. Lockhart
Fri, 17 Oct 1997 05:38:32 +0000 (05:38 +0000)
committerThomas G. Lockhart
Fri, 17 Oct 1997 05:38:32 +0000 (05:38 +0000)
Leave all other input values to return FALSE.
In next version, do more checking for valid inputs for both TRUE and FALSE.

src/backend/utils/adt/bool.c

index 4746e436197a05e99be664293cd187f2c260867b..aec60c776fe7bd4e92d768722a4a45a1917d6826 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/utils/adt/bool.c,v 1.7 1997/10/09 05:06:12 thomas Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/utils/adt/bool.c,v 1.8 1997/10/17 05:38:32 thomas Exp $
  *
  *-------------------------------------------------------------------------
  */
 /*
  *     boolin          - converts "t" or "f" to 1 or 0
  *
- * Check explicitly for "true/TRUE" and allow any odd ASCII value to be "true".
- * This handles "true/false", "yes/no", "1/0". - thomas 1997-10-05
+ * Check explicitly for "true/false" and TRUE/FALSE, 1/0, YES/NO.
+ * Reject other values. - thomas 1997-10-05
+ * For now, allow old behavior of everything FALSE if not TRUE.
+ * After v6.2.1 release, then enable code to reject goofy values.
+ * Also, start checking the entire string rather than just the first character.
+ * - thomas 1997-10-16
+ *
+ * In the switch statement, check the most-used possibilities first.
  */
 bool
 boolin(char *b)
 {
-   if (b == NULL)
-       elog(WARN, "Bad input string for type bool");
-   return ((bool) (((*b) == 't') || ((*b) == 'T') || ((*b) & 1)));
-}
+   switch(*b) {
+       case 't':
+       case 'T':
+           return (TRUE);
+           break;
+
+       case 'f':
+       case 'F':
+           return (FALSE);
+           break;
+
+       case 'y':
+       case 'Y':
+       case '1':
+           return (TRUE);
+           break;
+
+       case 'n':
+       case 'N':
+       case '0':
+           return (FALSE);
+           break;
+
+       default:
+#if FALSE
+           elog(WARN,"Invalid input string '%s'\n", b);
+#endif
+           break;
+   }
+
+   return (FALSE);
+} /* boolin() */
 
 /*
  *     boolout         - converts 1 or 0 to "t" or "f"
@@ -46,7 +80,7 @@ boolout(bool b)
    *result = (b) ? 't' : 'f';
    result[1] = '\0';
    return (result);
-}
+} /* boolout() */
 
 /*****************************************************************************
  *  PUBLIC ROUTINES                                                         *