summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/libnm-core-impl/tests/test-general.c9
-rw-r--r--src/libnm-glib-aux/nm-enum-utils.c6
2 files changed, 14 insertions, 1 deletions
diff --git a/src/libnm-core-impl/tests/test-general.c b/src/libnm-core-impl/tests/test-general.c
index 19d3271944..bcf86917e8 100644
--- a/src/libnm-core-impl/tests/test-general.c
+++ b/src/libnm-core-impl/tests/test-general.c
@@ -9124,6 +9124,10 @@ test_nm_utils_enum(void)
.value = 5,
},
{
+ .nick = "nick-0",
+ .value = 0,
+ },
+ {
.nick = "nick-red",
.value = NM_TEST_GENERAL_COLOR_FLAGS_RED,
},
@@ -9170,6 +9174,11 @@ test_nm_utils_enum(void)
"nick-5, green",
color_value_infos);
+ _test_nm_utils_enum_to_str_do_full(color_flags,
+ 0,
+ "nick-0",
+ color_value_infos);
+
_test_nm_utils_enum_from_str_do(bool_enum, "", FALSE, 0, NULL);
_test_nm_utils_enum_from_str_do(bool_enum, " ", FALSE, 0, NULL);
_test_nm_utils_enum_from_str_do(bool_enum, "invalid", FALSE, 0, "invalid");
diff --git a/src/libnm-glib-aux/nm-enum-utils.c b/src/libnm-glib-aux/nm-enum-utils.c
index b7f7a3f6cc..2593a9cdfd 100644
--- a/src/libnm-glib-aux/nm-enum-utils.c
+++ b/src/libnm-glib-aux/nm-enum-utils.c
@@ -136,7 +136,8 @@ _nm_utils_enum_to_str_full(GType type,
else
return g_strdup(enum_value->value_nick);
} else if (G_IS_FLAGS_CLASS(klass)) {
- unsigned uvalue = (unsigned) value;
+ unsigned uvalue = (unsigned) value;
+ gboolean uvalue_was_zero = (uvalue == 0);
GFlagsValue *flags_value;
NMStrBuf strbuf;
@@ -147,6 +148,9 @@ _nm_utils_enum_to_str_full(GType type,
for (; value_infos && value_infos->nick; value_infos++) {
nm_assert(_enum_is_valid_flags_nick(value_infos->nick));
+ if (value_infos->value == 0 && !uvalue_was_zero)
+ continue;
+
if (uvalue == 0) {
if (value_infos->value != 0)
continue;