1
0
mirror of https://github.com/systemd/systemd.git synced 2024-12-26 03:22:00 +03:00

Merge pull request #7540 from fbuihuu/systemd-delta-tweaks

Systemd delta tweaks
This commit is contained in:
Zbigniew Jędrzejewski-Szmek 2018-01-16 20:22:25 +11:00 committed by GitHub
commit 4579e8ef31
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -387,19 +387,28 @@ static int enumerate_dir(
return 0;
}
static int should_skip_prefix(const char* p) {
static bool should_skip_path(const char *prefix, const char *suffix) {
#if HAVE_SPLIT_USR
int r;
_cleanup_free_ char *target = NULL;
const char *p;
char *dirname;
r = chase_symlinks(p, NULL, 0, &target);
if (r < 0)
return r;
dirname = strjoina(prefix, "/", suffix);
return !streq(p, target) && nulstr_contains(prefixes, target);
#else
return 0;
if (chase_symlinks(dirname, NULL, 0, &target) < 0)
return false;
NULSTR_FOREACH(p, prefixes) {
if (path_startswith(dirname, p))
continue;
if (path_equal(target, strjoina(p, "/", suffix))) {
log_debug("%s redirects to %s, skipping.", dirname, target);
return true;
}
}
#endif
return false;
}
static int process_suffix(const char *suffix, const char *onlyprefix) {
@ -429,14 +438,8 @@ static int process_suffix(const char *suffix, const char *onlyprefix) {
NULSTR_FOREACH(p, prefixes) {
_cleanup_free_ char *t = NULL;
int skip;
skip = should_skip_prefix(p);
if (skip < 0) {
r = skip;
goto finish;
}
if (skip)
if (should_skip_path(p, suffix))
continue;
t = strjoin(p, "/", suffix);
@ -515,19 +518,12 @@ static int process_suffix_chop(const char *arg) {
/* Strip prefix from the suffix */
NULSTR_FOREACH(p, prefixes) {
const char *suffix;
int skip;
skip = should_skip_prefix(p);
if (skip < 0)
return skip;
if (skip)
continue;
suffix = startswith(arg, p);
if (suffix) {
suffix += strspn(suffix, "/");
if (*suffix)
return process_suffix(suffix, NULL);
return process_suffix(suffix, p);
else
return process_suffixes(arg);
}