summaryrefslogtreecommitdiff
path: root/src/network/networkd-util.c
diff options
context:
space:
mode:
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2021-11-26 11:51:12 +0100
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2021-11-29 11:15:31 +0100
commit67b65e110463d9abf4f66847583cf106695c1044 (patch)
tree3a78a51b8889651f9da7aff455db66f77fa75c41 /src/network/networkd-util.c
parentf4ada1b42ffd14a12bbad48b40d65332673bc869 (diff)
downloadsystemd-67b65e110463d9abf4f66847583cf106695c1044.tar.gz
networkd: replace a table with log2 fields by a list
The code looks a bit more complicated, but the compiler generates a simpler and more compact text. An additional advantage is that if any of the fields were repeating or not power-of-two, the compiler would warn about an overridden entry in the table.
Diffstat (limited to 'src/network/networkd-util.c')
-rw-r--r--src/network/networkd-util.c28
1 files changed, 14 insertions, 14 deletions
diff --git a/src/network/networkd-util.c b/src/network/networkd-util.c
index b0020efe89..6011e9b998 100644
--- a/src/network/networkd-util.c
+++ b/src/network/networkd-util.c
@@ -24,25 +24,25 @@ static const char * const network_config_source_table[_NETWORK_CONFIG_SOURCE_MAX
DEFINE_STRING_TABLE_LOOKUP_TO_STRING(network_config_source, NetworkConfigSource);
int network_config_state_to_string_alloc(NetworkConfigState s, char **ret) {
- static const struct {
- NetworkConfigState state;
- const char *str;
- } map[] = {
- { .state = NETWORK_CONFIG_STATE_PROBING, .str = "probing", },
- { .state = NETWORK_CONFIG_STATE_REQUESTING, .str = "requesting", },
- { .state = NETWORK_CONFIG_STATE_CONFIGURING, .str = "configuring", },
- { .state = NETWORK_CONFIG_STATE_CONFIGURED, .str = "configured", },
- { .state = NETWORK_CONFIG_STATE_MARKED, .str = "marked", },
- { .state = NETWORK_CONFIG_STATE_REMOVING, .str = "removing", },
+ static const char* states[] = {
+ [LOG2U(NETWORK_CONFIG_STATE_PROBING)] = "probing",
+ [LOG2U(NETWORK_CONFIG_STATE_REQUESTING)] = "requesting",
+ [LOG2U(NETWORK_CONFIG_STATE_CONFIGURING)] = "configuring",
+ [LOG2U(NETWORK_CONFIG_STATE_CONFIGURED)] = "configured",
+ [LOG2U(NETWORK_CONFIG_STATE_MARKED)] = "marked",
+ [LOG2U(NETWORK_CONFIG_STATE_REMOVING)] = "removing",
};
_cleanup_free_ char *buf = NULL;
assert(ret);
- for (size_t i = 0; i < ELEMENTSOF(map); i++)
- if (FLAGS_SET(s, map[i].state) &&
- !strextend_with_separator(&buf, ",", map[i].str))
- return -ENOMEM;
+ for (size_t i = 0; i < ELEMENTSOF(states); i++)
+ if (FLAGS_SET(s, 1 << i)) {
+ assert(states[i]);
+
+ if (!strextend_with_separator(&buf, ",", states[i]))
+ return -ENOMEM;
+ }
*ret = TAKE_PTR(buf);
return 0;