chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
core: add new ConditionNeedsUpdate= unit condition
[elogind.git]
/
src
/
delta
/
delta.c
diff --git
a/src/delta/delta.c
b/src/delta/delta.c
index f049eb229a45c6716f77598939f28b9d7f863d17..96a9fa5ee14e0378ab643c8b29790f29cfddeaf7 100644
(file)
--- a/
src/delta/delta.c
+++ b/
src/delta/delta.c
@@
-4,6
+4,7
@@
This file is part of systemd.
Copyright 2012 Lennart Poettering
This file is part of systemd.
Copyright 2012 Lennart Poettering
+ Copyright 2013 Zbigniew Jędrzejewski-Szmek
systemd is free software; you can redistribute it and/or modify it
under the terms of the GNU Lesser General Public License as published by
systemd is free software; you can redistribute it and/or modify it
under the terms of the GNU Lesser General Public License as published by
@@
-102,8
+103,9
@@
static int notify_override_masked(const char *top, const char *bottom) {
if (!(arg_flags & SHOW_MASKED))
return 0;
if (!(arg_flags & SHOW_MASKED))
return 0;
- printf("%s%s%s %s → %s\n",
- ansi_highlight_red(), "[MASKED]", ansi_highlight_off(), top, bottom);
+ printf("%s%s%s %s %s %s\n",
+ ansi_highlight_red(), "[MASKED]", ansi_highlight_off(),
+ top, draw_special_char(DRAW_ARROW), bottom);
return 1;
}
return 1;
}
@@
-111,8
+113,9
@@
static int notify_override_equivalent(const char *top, const char *bottom) {
if (!(arg_flags & SHOW_EQUIVALENT))
return 0;
if (!(arg_flags & SHOW_EQUIVALENT))
return 0;
- printf("%s%s%s %s → %s\n",
- ansi_highlight_green(), "[EQUIVALENT]", ansi_highlight_off(), top, bottom);
+ printf("%s%s%s %s %s %s\n",
+ ansi_highlight_green(), "[EQUIVALENT]", ansi_highlight_off(),
+ top, draw_special_char(DRAW_ARROW), bottom);
return 1;
}
return 1;
}
@@
-120,8
+123,9
@@
static int notify_override_redirected(const char *top, const char *bottom) {
if (!(arg_flags & SHOW_REDIRECTED))
return 0;
if (!(arg_flags & SHOW_REDIRECTED))
return 0;
- printf("%s%s%s %s → %s\n",
- ansi_highlight(), "[REDIRECTED]", ansi_highlight_off(), top, bottom);
+ printf("%s%s%s %s %s %s\n",
+ ansi_highlight(), "[REDIRECTED]", ansi_highlight_off(),
+ top, draw_special_char(DRAW_ARROW), bottom);
return 1;
}
return 1;
}
@@
-129,8
+133,9
@@
static int notify_override_overridden(const char *top, const char *bottom) {
if (!(arg_flags & SHOW_OVERRIDDEN))
return 0;
if (!(arg_flags & SHOW_OVERRIDDEN))
return 0;
- printf("%s%s%s %s → %s\n",
- ansi_highlight(), "[OVERRIDDEN]", ansi_highlight_off(), top, bottom);
+ printf("%s%s%s %s %s %s\n",
+ ansi_highlight(), "[OVERRIDDEN]", ansi_highlight_off(),
+ top, draw_special_char(DRAW_ARROW), bottom);
return 1;
}
return 1;
}
@@
-138,8
+143,9
@@
static int notify_override_extended(const char *top, const char *bottom) {
if (!(arg_flags & SHOW_EXTENDED))
return 0;
if (!(arg_flags & SHOW_EXTENDED))
return 0;
- printf("%s%s%s %s → %s\n",
- ansi_highlight(), "[EXTENDED]", ansi_highlight_off(), top, bottom);
+ printf("%s%s%s %s %s %s\n",
+ ansi_highlight(), "[EXTENDED]", ansi_highlight_off(),
+ top, draw_special_char(DRAW_ARROW), bottom);
return 1;
}
return 1;
}
@@
-240,7
+246,7
@@
static int enumerate_dir_d(Hashmap *top, Hashmap *bottom, Hashmap *drops, const
return -ENOMEM;
d = p + strlen(toppath) + 1;
return -ENOMEM;
d = p + strlen(toppath) + 1;
- log_debug("Adding at top: %s
→ %s", d
, p);
+ log_debug("Adding at top: %s
%s %s", d, draw_special_char(DRAW_ARROW)
, p);
k = hashmap_put(top, d, p);
if (k >= 0) {
p = strdup(p);
k = hashmap_put(top, d, p);
if (k >= 0) {
p = strdup(p);
@@
-252,7
+258,7
@@
static int enumerate_dir_d(Hashmap *top, Hashmap *bottom, Hashmap *drops, const
return k;
}
return k;
}
- log_debug("Adding at bottom: %s
→ %s", d
, p);
+ log_debug("Adding at bottom: %s
%s %s", d, draw_special_char(DRAW_ARROW)
, p);
free(hashmap_remove(bottom, d));
k = hashmap_put(bottom, d, p);
if (k < 0) {
free(hashmap_remove(bottom, d));
k = hashmap_put(bottom, d, p);
if (k < 0) {
@@
-275,7
+281,8
@@
static int enumerate_dir_d(Hashmap *top, Hashmap *bottom, Hashmap *drops, const
if (!p)
return -ENOMEM;
if (!p)
return -ENOMEM;
- log_debug("Adding to drops: %s → %s → %s", unit, basename(p), p);
+ log_debug("Adding to drops: %s %s %s %s %s",
+ unit, draw_special_char(DRAW_ARROW), basename(p), draw_special_char(DRAW_ARROW), p);
k = hashmap_put(h, basename(p), p);
if (k < 0) {
free(p);
k = hashmap_put(h, basename(p), p);
if (k < 0) {
free(p);
@@
-315,6
+322,8
@@
static int enumerate_dir(Hashmap *top, Hashmap *bottom, Hashmap *drops, const ch
if (!de)
return -errno;
if (!de)
return -errno;
+ dirent_ensure_type(d, de);
+
if (dropins && de->d_type == DT_DIR && endswith(de->d_name, ".d"))
enumerate_dir_d(top, bottom, drops, path, de->d_name);
if (dropins && de->d_type == DT_DIR && endswith(de->d_name, ".d"))
enumerate_dir_d(top, bottom, drops, path, de->d_name);
@@
-325,7
+334,7
@@
static int enumerate_dir(Hashmap *top, Hashmap *bottom, Hashmap *drops, const ch
if (!p)
return -ENOMEM;
if (!p)
return -ENOMEM;
- log_debug("Adding at top: %s
→ %s", basename(p
), p);
+ log_debug("Adding at top: %s
%s %s", basename(p), draw_special_char(DRAW_ARROW
), p);
k = hashmap_put(top, basename(p), p);
if (k >= 0) {
p = strdup(p);
k = hashmap_put(top, basename(p), p);
if (k >= 0) {
p = strdup(p);
@@
-336,7
+345,7
@@
static int enumerate_dir(Hashmap *top, Hashmap *bottom, Hashmap *drops, const ch
return k;
}
return k;
}
- log_debug("Adding at bottom: %s
→ %s", basename(p
), p);
+ log_debug("Adding at bottom: %s
%s %s", basename(p), draw_special_char(DRAW_ARROW
), p);
free(hashmap_remove(bottom, basename(p)));
k = hashmap_put(bottom, basename(p), p);
if (k < 0) {
free(hashmap_remove(bottom, basename(p)));
k = hashmap_put(bottom, basename(p), p);
if (k < 0) {
@@
-346,7
+355,7
@@
static int enumerate_dir(Hashmap *top, Hashmap *bottom, Hashmap *drops, const ch
}
}
}
}
-static int process_suffix(const char *suffix) {
+static int process_suffix(const char *suffix
, const char *onlyprefix
) {
const char *p;
char *f;
Hashmap *top, *bottom, *drops;
const char *p;
char *f;
Hashmap *top, *bottom, *drops;
@@
-391,20
+400,23
@@
static int process_suffix(const char *suffix) {
o = hashmap_get(bottom, key);
assert(o);
o = hashmap_get(bottom, key);
assert(o);
- if (path_equal(o, f))
- notify_override_unchanged(f);
- else {
- k = found_override(f, o);
- if (k < 0)
- r = k;
- else
- n_found += k;
+ if (!onlyprefix || startswith(o, onlyprefix)) {
+ if (path_equal(o, f)) {
+ notify_override_unchanged(f);
+ } else {
+ k = found_override(f, o);
+ if (k < 0)
+ r = k;
+ else
+ n_found += k;
+ }
}
h = hashmap_get(drops, key);
if (h)
HASHMAP_FOREACH(o, h, j)
}
h = hashmap_get(drops, key);
if (h)
HASHMAP_FOREACH(o, h, j)
- n_found += notify_override_extended(f, o);
+ if (!onlyprefix || startswith(o, onlyprefix))
+ n_found += notify_override_extended(f, o);
}
finish:
}
finish:
@@
-423,24
+435,41
@@
finish:
return r < 0 ? r : n_found;
}
return r < 0 ? r : n_found;
}
-static int process_suffix_chop(const char *suffix) {
+static int process_suffixes(const char *onlyprefix) {
+ const char *n;
+ int n_found = 0, r;
+
+ NULSTR_FOREACH(n, suffixes) {
+ r = process_suffix(n, onlyprefix);
+ if (r < 0)
+ return r;
+ else
+ n_found += r;
+ }
+ return n_found;
+}
+
+static int process_suffix_chop(const char *arg) {
const char *p;
const char *p;
- assert(
suffix
);
+ assert(
arg
);
- if (!path_is_absolute(
suffix
))
- return process_suffix(
suffix
);
+ if (!path_is_absolute(
arg
))
+ return process_suffix(
arg, NULL
);
/* Strip prefix from the suffix */
NULSTR_FOREACH(p, prefixes) {
/* Strip prefix from the suffix */
NULSTR_FOREACH(p, prefixes) {
- if (startswith(suffix, p)) {
- suffix += strlen(p);
+ const char *suffix = startswith(arg, p);
+ if (suffix) {
suffix += strspn(suffix, "/");
suffix += strspn(suffix, "/");
- return process_suffix(suffix);
+ if (*suffix)
+ return process_suffix(suffix, NULL);
+ else
+ return process_suffixes(arg);
}
}
}
}
- log_error("Invalid suffix specification %s.",
suffix
);
+ log_error("Invalid suffix specification %s.",
arg
);
return -EINVAL;
}
return -EINVAL;
}
@@
-595,15
+624,11
@@
int main(int argc, char *argv[]) {
}
} else {
}
} else {
- const char *n;
-
- NULSTR_FOREACH(n, suffixes) {
- k = process_suffix(n);
- if (k < 0)
- r = k;
- else
- n_found += k;
- }
+ k = process_suffixes(NULL);
+ if (k < 0)
+ r = k;
+ else
+ n_found += k;
}
if (r >= 0)
}
if (r >= 0)