From 63c691c6481e7cdcac87eee5c88608240ede5351 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Fri, 22 Mar 2019 12:12:29 +0100 Subject: [PATCH 1/4] string-table: use string_table_lookup() in our own macros everywhere --- src/basic/string-table.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/basic/string-table.h b/src/basic/string-table.h index 228c12ad00..42fe4f4315 100644 --- a/src/basic/string-table.h +++ b/src/basic/string-table.h @@ -59,13 +59,13 @@ ssize_t string_table_lookup(const char * const *table, size_t len, const char *k #define _DEFINE_STRING_TABLE_LOOKUP_FROM_STRING_FALLBACK(name,type,max,scope) \ scope type name##_from_string(const char *s) { \ - type i; \ unsigned u = 0; \ + type i; \ if (!s) \ return (type) -1; \ - for (i = 0; i < (type) ELEMENTSOF(name##_table); i++) \ - if (streq_ptr(name##_table[i], s)) \ - return i; \ + i = (type) string_table_lookup(name##_table, ELEMENTSOF(name##_table), s); \ + if (i >= 0) \ + return i; \ if (safe_atou(s, &u) >= 0 && u <= max) \ return (type) u; \ return (type) -1; \ From 0f4b93c4b5def56e7094cfa9304f533d1b2b2f7b Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Fri, 22 Mar 2019 12:13:01 +0100 Subject: [PATCH 2/4] udev: use string_table_lookup() where we can --- src/udev/udevadm-info.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/udev/udevadm-info.c b/src/udev/udevadm-info.c index ebd15d384a..fad110826e 100644 --- a/src/udev/udevadm-info.c +++ b/src/udev/udevadm-info.c @@ -18,9 +18,10 @@ #include "device-util.h" #include "dirent-util.h" #include "fd-util.h" +#include "string-table.h" #include "string-util.h" -#include "udevadm.h" #include "udevadm-util.h" +#include "udevadm.h" typedef enum ActionType { ACTION_QUERY, @@ -50,12 +51,8 @@ static bool skip_attribute(const char *name) { "subsystem", "module", }; - unsigned i; - for (i = 0; i < ELEMENTSOF(skip); i++) - if (streq(name, skip[i])) - return true; - return false; + return string_table_lookup(skip, ELEMENTSOF(skip), name) >= 0; } static void print_all_attributes(sd_device *device, const char *key) { From b1ea85dc08009fb3cbb649a88979b2979426b9d2 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Fri, 22 Mar 2019 12:14:09 +0100 Subject: [PATCH 3/4] dbus-execute: lets use exec_directory_type_from_string() to simplify things --- src/core/dbus-execute.c | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/src/core/dbus-execute.c b/src/core/dbus-execute.c index 0b28643e79..67cc48803c 100644 --- a/src/core/dbus-execute.c +++ b/src/core/dbus-execute.c @@ -2185,24 +2185,19 @@ int bus_exec_context_set_transient_property( } if (!UNIT_WRITE_FLAGS_NOOP(flags)) { - char ***dirs = NULL; ExecDirectoryType i; + ExecDirectory *d; - for (i = 0; i < _EXEC_DIRECTORY_TYPE_MAX; i++) - if (streq(name, exec_directory_type_to_string(i))) { - dirs = &c->directories[i].paths; - break; - } - - assert(dirs); + assert_se((i = exec_directory_type_from_string(name)) >= 0); + d = c->directories + i; if (strv_isempty(l)) { - *dirs = strv_free(*dirs); + d->paths = strv_free(d->paths); unit_write_settingf(u, flags, name, "%s=", name); } else { _cleanup_free_ char *joined = NULL; - r = strv_extend_strv(dirs, l, true); + r = strv_extend_strv(&d->paths, l, true); if (r < 0) return -ENOMEM; From c425c7c245f9d0dd757919ea4830d7d0fbc56d9a Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Fri, 22 Mar 2019 12:25:16 +0100 Subject: [PATCH 4/4] dbus-execute: don't needlessly override error code --- src/core/dbus-execute.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/dbus-execute.c b/src/core/dbus-execute.c index 67cc48803c..d894dbdd7b 100644 --- a/src/core/dbus-execute.c +++ b/src/core/dbus-execute.c @@ -2199,7 +2199,7 @@ int bus_exec_context_set_transient_property( r = strv_extend_strv(&d->paths, l, true); if (r < 0) - return -ENOMEM; + return r; joined = unit_concat_strv(l, UNIT_ESCAPE_SPECIFIERS); if (!joined)