diff options
author | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2021-11-26 11:51:12 +0100 |
---|---|---|
committer | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2021-11-29 11:15:31 +0100 |
commit | 67b65e110463d9abf4f66847583cf106695c1044 (patch) | |
tree | 3a78a51b8889651f9da7aff455db66f77fa75c41 /src/network/networkd-util.c | |
parent | f4ada1b42ffd14a12bbad48b40d65332673bc869 (diff) | |
download | systemd-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.c | 28 |
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; |