diff options
author | Thomas Haller <thaller@redhat.com> | 2017-09-26 08:48:22 +0200 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2017-10-05 11:50:31 +0200 |
commit | a2dcdbe042961eef6f0b53894768bb3a83d7d478 (patch) | |
tree | 7d608e31020f51e3af6d04972b2bc68bc359a42a | |
parent | 5dd6fcb970ebea5f9c1b986735b8adc75f34c2a6 (diff) | |
download | NetworkManager-a2dcdbe042961eef6f0b53894768bb3a83d7d478.tar.gz |
core/utils: extend nm_utils_flags2str() for multi-value flags and name for zero
Allow passing a pretty name for the zero flag 0, like "none".
Also, don't require flags to be power-of-two. Instead, allow names for
multiple flags. For example an "all" name. By specifying multi-value
flags first, their nick will be supersede the more specific flags.
Probably it doesn't make sense in usual cases, but nm_utils_flags2str()
should prevent such use.
-rw-r--r-- | src/nm-core-utils.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/src/nm-core-utils.c b/src/nm-core-utils.c index 88614278f1..3fb843af8f 100644 --- a/src/nm-core-utils.c +++ b/src/nm-core-utils.c @@ -1869,7 +1869,6 @@ nm_utils_flags2str (const NMUtilsFlags2StrDesc *descs, for (i = 0; i < n_descs; i++) { gsize j; - nm_assert (descs[i].flag && nm_utils_is_power_of_two (descs[i].flag)); nm_assert (descs[i].name && descs[i].name[0]); for (j = 0; j < i; j++) nm_assert (descs[j].flag != descs[i].flag); @@ -1882,13 +1881,20 @@ nm_utils_flags2str (const NMUtilsFlags2StrDesc *descs, return buf; buf[0] = '\0'; + p = buf; if (!flags) { + for (i = 0; i < n_descs; i++) { + if (!descs[i].flag) { + nm_utils_strbuf_append_str (&p, &len, descs[i].name); + break; + } + } return buf; } - p = buf; for (i = 0; flags && i < n_descs; i++) { - if (NM_FLAGS_HAS (flags, descs[i].flag)) { + if ( descs[i].flag + && NM_FLAGS_ALL (flags, descs[i].flag)) { flags &= ~descs[i].flag; if (buf[0] != '\0') |