summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/basic/env-util.c2
-rw-r--r--src/test/test-env-util.c11
2 files changed, 12 insertions, 1 deletions
diff --git a/src/basic/env-util.c b/src/basic/env-util.c
index a28707fb49..f9208d1475 100644
--- a/src/basic/env-util.c
+++ b/src/basic/env-util.c
@@ -462,7 +462,7 @@ char *strv_env_get_n(char **l, const char *name, size_t k) {
if (k <= 0)
return NULL;
- STRV_FOREACH(i, l)
+ STRV_FOREACH_BACKWARDS(i, l)
if (strneq(*i, name, k) &&
(*i)[k] == '=')
return *i + k + 1;
diff --git a/src/test/test-env-util.c b/src/test/test-env-util.c
index 35bb62906e..e004c518fb 100644
--- a/src/test/test-env-util.c
+++ b/src/test/test-env-util.c
@@ -45,6 +45,16 @@ static void test_strv_env_delete(void) {
assert_se(strv_length(d) == 2);
}
+static void test_strv_env_get(void) {
+ char **l;
+
+ l = STRV_MAKE("ONE_OR_TWO=1", "THREE=3", "ONE_OR_TWO=2", "FOUR=4");
+
+ assert_se(streq(strv_env_get(l, "ONE_OR_TWO"), "2"));
+ assert_se(streq(strv_env_get(l, "THREE"), "3"));
+ assert_se(streq(strv_env_get(l, "FOUR"), "4"));
+}
+
static void test_strv_env_unset(void) {
_cleanup_strv_free_ char **l = NULL;
@@ -211,6 +221,7 @@ static void test_env_assignment_is_valid(void) {
int main(int argc, char *argv[]) {
test_strv_env_delete();
+ test_strv_env_get();
test_strv_env_unset();
test_strv_env_set();
test_strv_env_merge();