From: Luca Boccassi Date: Wed, 27 Jan 2021 12:51:17 +0000 (+0000) Subject: env-util: add strv_env_pairs_get helper X-Git-Tag: v248-rc1~66^2~6 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=42e6a77bc5ceb337e9f7a1bb9deebdac1fc40a8b;p=thirdparty%2Fsystemd.git env-util: add strv_env_pairs_get helper --- diff --git a/src/basic/env-util.c b/src/basic/env-util.c index 25c4b7c5a41..137d6b1f3cb 100644 --- a/src/basic/env-util.c +++ b/src/basic/env-util.c @@ -455,6 +455,18 @@ char *strv_env_get(char **l, const char *name) { return strv_env_get_n(l, name, strlen(name), 0); } +char *strv_env_pairs_get(char **l, const char *name) { + char **key, **value, *result = NULL; + + assert(name); + + STRV_FOREACH_PAIR(key, value, l) + if (streq(*key, name)) + result = *value; + + return result; +} + char **strv_env_clean_with_callback(char **e, void (*invalid_callback)(const char *p, void *userdata), void *userdata) { char **p, **q; int k = 0; diff --git a/src/basic/env-util.h b/src/basic/env-util.h index 347ea33e666..79307a4a5fe 100644 --- a/src/basic/env-util.h +++ b/src/basic/env-util.h @@ -50,6 +50,7 @@ int strv_env_assign(char ***l, const char *key, const char *value); char *strv_env_get_n(char **l, const char *name, size_t k, unsigned flags) _pure_; char *strv_env_get(char **x, const char *n) _pure_; +char *strv_env_pairs_get(char **l, const char *name) _pure_; int getenv_bool(const char *p); int getenv_bool_secure(const char *p); diff --git a/src/test/test-env-util.c b/src/test/test-env-util.c index fd121d975ef..77b8952f83c 100644 --- a/src/test/test-env-util.c +++ b/src/test/test-env-util.c @@ -44,6 +44,17 @@ static void test_strv_env_get(void) { assert_se(streq(strv_env_get(l, "FOUR"), "4")); } +static void test_strv_env_pairs_get(void) { + log_info("/* %s */", __func__); + + char **l = STRV_MAKE("ONE_OR_TWO", "1", "THREE", "3", "ONE_OR_TWO", "2", "FOUR", "4", "FIVE", "5", "SIX", "FIVE", "SEVEN", "7"); + + assert_se(streq(strv_env_pairs_get(l, "ONE_OR_TWO"), "2")); + assert_se(streq(strv_env_pairs_get(l, "THREE"), "3")); + assert_se(streq(strv_env_pairs_get(l, "FOUR"), "4")); + assert_se(streq(strv_env_pairs_get(l, "FIVE"), "5")); +} + static void test_strv_env_unset(void) { log_info("/* %s */", __func__); @@ -390,6 +401,7 @@ int main(int argc, char *argv[]) { test_strv_env_delete(); test_strv_env_get(); + test_strv_env_pairs_get(); test_strv_env_unset(); test_strv_env_merge(); test_strv_env_replace_strdup();