config_parser: Add common boolean parser
This more accurately parses systemd values instead of just comparing to
"false" or "true".
Change-Id: I0d70ef418075d555bf6f090fefa0b34332491ed0
Signed-off-by: William A. Kennington III <wak@google.com>
diff --git a/src/util.cpp b/src/util.cpp
index de0bc9d..13be8d0 100644
--- a/src/util.cpp
+++ b/src/util.cpp
@@ -367,8 +367,6 @@
EthernetInterfaceIntf::DHCPConf getDHCPValue(const std::string& confDir,
const std::string& intf)
{
- EthernetInterfaceIntf::DHCPConf dhcp =
- EthernetInterfaceIntf::DHCPConf::none;
// Get the interface mode value from systemd conf
// using namespace std::string_literals;
fs::path confPath = confDir;
@@ -381,21 +379,25 @@
if (values.empty())
{
log<level::NOTICE>("Unable to get the value for Network[DHCP]");
- return dhcp;
+ return EthernetInterfaceIntf::DHCPConf::none;
}
- if (values.back() == "true")
+ if (config::icaseeq(values.back(), "ipv4"))
{
- dhcp = EthernetInterfaceIntf::DHCPConf::both;
+ return EthernetInterfaceIntf::DHCPConf::v4;
}
- else if (values.back() == "ipv4")
+ if (config::icaseeq(values.back(), "ipv6"))
{
- dhcp = EthernetInterfaceIntf::DHCPConf::v4;
+ return EthernetInterfaceIntf::DHCPConf::v6;
}
- else if (values.back() == "ipv6")
+ auto ret = config::parseBool(values.back());
+ if (!ret.has_value())
{
- dhcp = EthernetInterfaceIntf::DHCPConf::v6;
+ auto str =
+ fmt::format("Unable to parse Network[DHCP]: `{}`", values.back());
+ log<level::NOTICE>(str.c_str());
}
- return dhcp;
+ return ret.value_or(false) ? EthernetInterfaceIntf::DHCPConf::both
+ : EthernetInterfaceIntf::DHCPConf::none;
}
namespace mac_address