]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
config: make the Option::TYPE_BOOL interpreter reusable.
authorRadoslaw Zarzynski <rzarzyns@redhat.com>
Wed, 24 Jun 2020 12:28:43 +0000 (12:28 +0000)
committerRadoslaw Zarzynski <rzarzyns@redhat.com>
Wed, 24 Jun 2020 14:20:15 +0000 (14:20 +0000)
Let's allow custom validators to not duplicate the code.

Signed-off-by: Radoslaw Zarzynski <rzarzyns@redhat.com>
src/common/options.cc
src/common/strtol.cc
src/common/strtol.h

index 5f25c04350538b7949ad3373a9d272c18387e806..e4b58f6b1e89bb97f500469241a9da4ca4357b24 100644 (file)
@@ -166,16 +166,11 @@ int Option::parse_value(
       *out = f;
     }
   } else if (type == Option::TYPE_BOOL) {
-    if (strcasecmp(val.c_str(), "false") == 0) {
-      *out = false;
-    } else if (strcasecmp(val.c_str(), "true") == 0) {
-      *out = true;
+    bool b = strict_strtob(val.c_str(), error_message);
+    if (!error_message->empty()) {
+      return -EINVAL;
     } else {
-      int b = strict_strtol(val.c_str(), 10, error_message);
-      if (!error_message->empty()) {
-       return -EINVAL;
-      }
-      *out = (bool)!!b;
+      *out = b;
     }
   } else if (type == Option::TYPE_ADDR) {
     entity_addr_t addr;
index 76d2a85b74c83671635beac192159e5151aaf64c..11b900352968f47065217b9829234f08789e9e32 100644 (file)
 #include <limits>
 #include <cmath>
 #include <sstream>
+#include <strings.h>
 #include <string_view>
 
 using std::ostringstream;
 
+bool strict_strtob(const char* str, std::string *err)
+{
+  if (strcasecmp(str, "false") == 0) {
+    return false;
+  } else if (strcasecmp(str, "true") == 0) {
+    return true;
+  } else {
+    int b = strict_strtol(str, 10, err);
+    return (bool)!!b;
+  }
+}
+
 long long strict_strtoll(std::string_view str, int base, std::string *err)
 {
   char *endptr;
index 6d722269320b9e50556068bf59b13745fba5a186..7cf3895133f3dd60fda4ac0dbb32383ae7d471b9 100644 (file)
@@ -20,6 +20,8 @@ extern "C" {
 #include <stdint.h>
 }
 
+bool strict_strtob(const char* str, std::string *err);
+
 long long strict_strtoll(const char *str, int base, std::string *err);
 
 int strict_strtol(const char *str, int base, std::string *err);