summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2021-05-11 13:34:31 +0200
committerThomas Haller <thaller@redhat.com>2021-05-12 22:25:11 +0200
commitd15eb7dd6e319638a14e7136dadd4ac00ea9c706 (patch)
tree93c5f12203f49f7d73324e951a75f080ec7c3176
parent652ddca04c5287bd4db1ad456556b9ed028621c0 (diff)
downloadNetworkManager-d15eb7dd6e319638a14e7136dadd4ac00ea9c706.tar.gz
libnmc-base: optionally accept "ignore" in nmc_string_to_ternary() for NMTernary value
-rw-r--r--src/libnmc-base/nm-client-utils.c16
-rw-r--r--src/libnmc-base/nm-client-utils.h17
2 files changed, 29 insertions, 4 deletions
diff --git a/src/libnmc-base/nm-client-utils.c b/src/libnmc-base/nm-client-utils.c
index 4737adb921..49234d9752 100644
--- a/src/libnmc-base/nm-client-utils.c
+++ b/src/libnmc-base/nm-client-utils.c
@@ -130,7 +130,10 @@ nmc_string_to_bool(const char *str, gboolean *val_bool, GError **error)
}
gboolean
-nmc_string_to_ternary(const char *str, NMTernary *val, GError **error)
+nmc_string_to_ternary_full(const char * str,
+ NMCStringToTernaryFlags flags,
+ NMTernary * val,
+ GError ** error)
{
gs_free char *str_to_free = NULL;
int i;
@@ -156,9 +159,16 @@ nmc_string_to_ternary(const char *str, NMTernary *val, GError **error)
*val = NM_TERNARY_TRUE;
else if (nmc_string_is_valid(str, NM_MAKE_STRV("false", "no", "off"), NULL))
*val = NM_TERNARY_FALSE;
- else if (nmc_string_is_valid(str, NM_MAKE_STRV("unknown", "default"), NULL))
+ else if (nmc_string_is_valid(
+ str,
+ NM_MAKE_STRV("unknown",
+ "default",
+ NM_FLAGS_HAS(flags, NMC_STRING_TO_TERNARY_FLAGS_IGNORE_FOR_DEFAULT)
+ ? "ignore"
+ : NULL),
+ NULL))
*val = NM_TERNARY_DEFAULT;
- else if ((i = _nm_utils_ascii_str_to_int64(str, 0, -1, 1, -2)) >= -1)
+ else if ((i = _nm_utils_ascii_str_to_int64(str, 0, -1, 1, -2)) != -2)
*val = (NMTernary) i;
else {
nm_utils_error_set(error,
diff --git a/src/libnmc-base/nm-client-utils.h b/src/libnmc-base/nm-client-utils.h
index 0fcc06582d..1fc18acaf6 100644
--- a/src/libnmc-base/nm-client-utils.h
+++ b/src/libnmc-base/nm-client-utils.h
@@ -23,7 +23,22 @@ gboolean nmc_string_to_uint(const char * str,
unsigned long int max,
unsigned long int *value);
gboolean nmc_string_to_bool(const char *str, gboolean *val_bool, GError **error);
-gboolean nmc_string_to_ternary(const char *str, NMTernary *val, GError **error);
+
+typedef enum {
+ NMC_STRING_TO_TERNARY_FLAGS_NONE = 0,
+ NMC_STRING_TO_TERNARY_FLAGS_IGNORE_FOR_DEFAULT = (1LL << 0),
+} NMCStringToTernaryFlags;
+
+gboolean nmc_string_to_ternary_full(const char * str,
+ NMCStringToTernaryFlags flags,
+ NMTernary * val,
+ GError ** error);
+
+static inline gboolean
+nmc_string_to_ternary(const char *str, NMTernary *val, GError **error)
+{
+ return nmc_string_to_ternary_full(str, NMC_STRING_TO_TERNARY_FLAGS_NONE, val, error);
+}
gboolean matches(const char *cmd, const char *pattern);