diff --git a/src/basic/strv.h b/src/basic/strv.h index 985499272f9..bc76a2861cb 100644 --- a/src/basic/strv.h +++ b/src/basic/strv.h @@ -133,8 +133,8 @@ bool strv_overlap(char * const *a, char * const *b) _pure_; size_t _len = strv_length(h); \ _len > 0 ? h + _len - 1 : NULL; \ }); \ - i && (s = i) >= h; \ - i--) + (s = i); \ + i > h ? i-- : (i = NULL)) #define STRV_FOREACH_BACKWARDS(s, l) \ _STRV_FOREACH_BACKWARDS(s, l, UNIQ_T(h, UNIQ), UNIQ_T(i, UNIQ)) diff --git a/src/test/test-strv.c b/src/test/test-strv.c index ae3e2798c2b..edb782eb0d7 100644 --- a/src/test/test-strv.c +++ b/src/test/test-strv.c @@ -639,8 +639,13 @@ TEST(strv_foreach_backwards) { STRV_FOREACH_BACKWARDS(check, (char**) NULL) assert_not_reached(); - STRV_FOREACH_BACKWARDS(check, (char**) { NULL }) + STRV_FOREACH_BACKWARDS(check, STRV_MAKE_EMPTY) assert_not_reached(); + + unsigned count = 0; + STRV_FOREACH_BACKWARDS(check, STRV_MAKE("ONE")) + count++; + assert_se(count == 1); } TEST(strv_foreach_pair) {