libnmc-base: optionally accept "ignore" in nmc_string_to_ternary() for NMTernary value

This commit is contained in:
Thomas Haller 2021-05-11 13:34:31 +02:00
parent 652ddca04c
commit d15eb7dd6e
No known key found for this signature in database
GPG key ID: 29C2366E4DFC5728
2 changed files with 29 additions and 4 deletions

View file

@ -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,

View file

@ -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);