From 9cad100eca602aa33c2f56475c30fccf14abea1a Mon Sep 17 00:00:00 2001 From: Bruno Bottazzini Date: Fri, 13 Feb 2015 18:40:50 -0200 Subject: [PATCH] util: use a shared lookup function for string tables Macro DEFINE_STRING_TABLE_LOOKUP expands to a new function for each of the almost 120 tables throghout the code. Move the its implementation to a function (guaranteed to never be inlined), and make the macro expand to an inlined function that calls this function. This saves a few kilobytes from the systemd binary (David: - fix coding-style - use 'ssize_t' to fix 32bit to 64bit propagation - use streq_ptr()) --- src/shared/util.c | 13 +++++++++++++ src/shared/util.h | 15 +++++---------- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/src/shared/util.c b/src/shared/util.c index 3a6335124..ba035caed 100644 --- a/src/shared/util.c +++ b/src/shared/util.c @@ -8089,3 +8089,16 @@ int syslog_parse_priority(const char **p, int *priority, bool with_facility) { *p += k; return 1; } + +ssize_t string_table_lookup(const char * const *table, size_t len, const char *key) { + size_t i; + + if (!key) + return -1; + + for (i = 0; i < len; ++i) + if (streq_ptr(table[i], key)) + return (ssize_t)i; + + return -1; +} diff --git a/src/shared/util.h b/src/shared/util.h index b56ffbde4..a83b58822 100644 --- a/src/shared/util.h +++ b/src/shared/util.h @@ -355,16 +355,11 @@ static inline uint32_t random_u32(void) { return name##_table[i]; \ } -#define _DEFINE_STRING_TABLE_LOOKUP_FROM_STRING(name,type,scope) \ - scope type name##_from_string(const char *s) { \ - type i; \ - if (!s) \ - return (type) -1; \ - for (i = 0; i < (type)ELEMENTSOF(name##_table); i++) \ - if (name##_table[i] && \ - streq(name##_table[i], s)) \ - return i; \ - return (type) -1; \ +ssize_t string_table_lookup(const char * const *table, size_t len, const char *key); + +#define _DEFINE_STRING_TABLE_LOOKUP_FROM_STRING(name,type,scope) \ + scope inline type name##_from_string(const char *s) { \ + return (type)string_table_lookup(name##_table, ELEMENTSOF(name##_table), s); \ } #define _DEFINE_STRING_TABLE_LOOKUP(name,type,scope) \ -- 2.30.2