diff options
author | Thomas Haller <thaller@redhat.com> | 2021-05-11 13:34:31 +0200 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2021-05-12 22:25:11 +0200 |
commit | d15eb7dd6e319638a14e7136dadd4ac00ea9c706 (patch) | |
tree | 93c5f12203f49f7d73324e951a75f080ec7c3176 | |
parent | 652ddca04c5287bd4db1ad456556b9ed028621c0 (diff) | |
download | NetworkManager-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.c | 16 | ||||
-rw-r--r-- | src/libnmc-base/nm-client-utils.h | 17 |
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); |