mirror of
https://github.com/systemd/systemd.git
synced 2024-12-25 01:34:28 +03:00
path-util: add path_startswith_strv()
This commit is contained in:
parent
771fded37f
commit
cc4d7d818d
@ -207,6 +207,18 @@ int path_make_relative(const char *from_dir, const char *to_path, char **_r) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char* path_startswith_strv(const char *p, char **set) {
|
||||||
|
char **s, *t;
|
||||||
|
|
||||||
|
STRV_FOREACH(s, set) {
|
||||||
|
t = path_startswith(p, *s);
|
||||||
|
if (t)
|
||||||
|
return t;
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
int path_strv_make_absolute_cwd(char **l) {
|
int path_strv_make_absolute_cwd(char **l) {
|
||||||
char **s;
|
char **s;
|
||||||
int r;
|
int r;
|
||||||
|
@ -71,17 +71,8 @@ static inline bool path_equal_ptr(const char *a, const char *b) {
|
|||||||
_found; \
|
_found; \
|
||||||
})
|
})
|
||||||
|
|
||||||
#define PATH_STARTSWITH_SET(p, ...) \
|
char* path_startswith_strv(const char *p, char **set);
|
||||||
({ \
|
#define PATH_STARTSWITH_SET(p, ...) path_startswith_strv(p, STRV_MAKE(__VA_ARGS__))
|
||||||
const char *_p = (p); \
|
|
||||||
char *_found = NULL, **_i; \
|
|
||||||
STRV_FOREACH(_i, STRV_MAKE(__VA_ARGS__)) { \
|
|
||||||
_found = path_startswith(_p, *_i); \
|
|
||||||
if (_found) \
|
|
||||||
break; \
|
|
||||||
} \
|
|
||||||
_found; \
|
|
||||||
})
|
|
||||||
|
|
||||||
int path_strv_make_absolute_cwd(char **l);
|
int path_strv_make_absolute_cwd(char **l);
|
||||||
char** path_strv_resolve(char **l, const char *root);
|
char** path_strv_resolve(char **l, const char *root);
|
||||||
|
@ -634,6 +634,28 @@ static void test_path_startswith_set(void) {
|
|||||||
assert_se(streq_ptr(PATH_STARTSWITH_SET("/foo2/bar", "/foo/quux", "", "/zzz"), NULL));
|
assert_se(streq_ptr(PATH_STARTSWITH_SET("/foo2/bar", "/foo/quux", "", "/zzz"), NULL));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void test_path_startswith_strv(void) {
|
||||||
|
log_info("/* %s */", __func__);
|
||||||
|
|
||||||
|
assert_se(streq_ptr(path_startswith_strv("/foo/bar", STRV_MAKE("/foo/quux", "/foo/bar", "/zzz")), ""));
|
||||||
|
assert_se(streq_ptr(path_startswith_strv("/foo/bar", STRV_MAKE("/foo/quux", "/foo/", "/zzz")), "bar"));
|
||||||
|
assert_se(streq_ptr(path_startswith_strv("/foo/bar", STRV_MAKE("/foo/quux", "/foo", "/zzz")), "bar"));
|
||||||
|
assert_se(streq_ptr(path_startswith_strv("/foo/bar", STRV_MAKE("/foo/quux", "/", "/zzz")), "foo/bar"));
|
||||||
|
assert_se(streq_ptr(path_startswith_strv("/foo/bar", STRV_MAKE("/foo/quux", "", "/zzz")), NULL));
|
||||||
|
|
||||||
|
assert_se(streq_ptr(path_startswith_strv("/foo/bar2", STRV_MAKE("/foo/quux", "/foo/bar", "/zzz")), NULL));
|
||||||
|
assert_se(streq_ptr(path_startswith_strv("/foo/bar2", STRV_MAKE("/foo/quux", "/foo/", "/zzz")), "bar2"));
|
||||||
|
assert_se(streq_ptr(path_startswith_strv("/foo/bar2", STRV_MAKE("/foo/quux", "/foo", "/zzz")), "bar2"));
|
||||||
|
assert_se(streq_ptr(path_startswith_strv("/foo/bar2", STRV_MAKE("/foo/quux", "/", "/zzz")), "foo/bar2"));
|
||||||
|
assert_se(streq_ptr(path_startswith_strv("/foo/bar2", STRV_MAKE("/foo/quux", "", "/zzz")), NULL));
|
||||||
|
|
||||||
|
assert_se(streq_ptr(path_startswith_strv("/foo2/bar", STRV_MAKE("/foo/quux", "/foo/bar", "/zzz")), NULL));
|
||||||
|
assert_se(streq_ptr(path_startswith_strv("/foo2/bar", STRV_MAKE("/foo/quux", "/foo/", "/zzz")), NULL));
|
||||||
|
assert_se(streq_ptr(path_startswith_strv("/foo2/bar", STRV_MAKE("/foo/quux", "/foo", "/zzz")), NULL));
|
||||||
|
assert_se(streq_ptr(path_startswith_strv("/foo2/bar", STRV_MAKE("/foo/quux", "/", "/zzz")), "foo2/bar"));
|
||||||
|
assert_se(streq_ptr(path_startswith_strv("/foo2/bar", STRV_MAKE("/foo/quux", "", "/zzz")), NULL));
|
||||||
|
}
|
||||||
|
|
||||||
int main(int argc, char **argv) {
|
int main(int argc, char **argv) {
|
||||||
test_setup_logging(LOG_DEBUG);
|
test_setup_logging(LOG_DEBUG);
|
||||||
|
|
||||||
@ -655,6 +677,7 @@ int main(int argc, char **argv) {
|
|||||||
test_skip_dev_prefix();
|
test_skip_dev_prefix();
|
||||||
test_empty_or_root();
|
test_empty_or_root();
|
||||||
test_path_startswith_set();
|
test_path_startswith_set();
|
||||||
|
test_path_startswith_strv();
|
||||||
|
|
||||||
test_systemd_installation_has_version(argv[1]); /* NULL is OK */
|
test_systemd_installation_has_version(argv[1]); /* NULL is OK */
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user