diff options
-rw-r--r-- | src/libnm-core-impl/tests/test-general.c | 9 | ||||
-rw-r--r-- | src/libnm-glib-aux/nm-enum-utils.c | 6 |
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; |