summaryrefslogtreecommitdiff
path: root/src/journal/journalctl.c
diff options
context:
space:
mode:
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2014-07-19 21:05:07 -0400
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2014-07-19 21:13:08 -0400
commit4e6029435111adcad71489aca2dd68bc65aeffd4 (patch)
tree07ce83808e399ad2ad63bad9a568863bd6f755ef /src/journal/journalctl.c
parentbe8f4a9fa732d61e845e1ab1a62ac3a6b368d3a7 (diff)
journalctl,man: allow + only between terms
https://bugzilla.redhat.com/show_bug.cgi?id=1110712
Diffstat (limited to 'src/journal/journalctl.c')
-rw-r--r--src/journal/journalctl.c20
1 files changed, 17 insertions, 3 deletions
diff --git a/src/journal/journalctl.c b/src/journal/journalctl.c
index 92e8286334..7aedbf0c57 100644
--- a/src/journal/journalctl.c
+++ b/src/journal/journalctl.c
@@ -699,15 +699,20 @@ static int generate_new_id128(void) {
static int add_matches(sd_journal *j, char **args) {
char **i;
+ bool have_term = false;
assert(j);
STRV_FOREACH(i, args) {
int r;
- if (streq(*i, "+"))
+ if (streq(*i, "+")) {
+ if (!have_term)
+ break;
r = sd_journal_add_disjunction(j);
- else if (path_is_absolute(*i)) {
+ have_term = false;
+
+ } else if (path_is_absolute(*i)) {
_cleanup_free_ char *p, *t = NULL, *t2 = NULL;
const char *path;
_cleanup_free_ char *interpreter = NULL;
@@ -756,8 +761,12 @@ static int add_matches(sd_journal *j, char **args) {
r = sd_journal_add_match(j, t, 0);
if (t2)
r = sd_journal_add_match(j, t2, 0);
- } else
+ have_term = true;
+
+ } else {
r = sd_journal_add_match(j, *i, 0);
+ have_term = true;
+ }
if (r < 0) {
log_error("Failed to add match '%s': %s", *i, strerror(-r));
@@ -765,6 +774,11 @@ static int add_matches(sd_journal *j, char **args) {
}
}
+ if (!strv_isempty(args) && !have_term) {
+ log_error("\"+\" can only be used between terms");
+ return -EINVAL;
+ }
+
return 0;
}