From 7827b1a10f4dfe2c6771b515f28f7ae22e0ae039 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Thu, 19 Jul 2012 03:21:49 +0200 Subject: journal: when watching directories actually watch the directories asked for --- src/journal/journal-internal.h | 2 ++ src/journal/sd-journal.c | 22 ++++++++++++++++++---- 2 files changed, 20 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/journal/journal-internal.h b/src/journal/journal-internal.h index b767901432..04f77540c9 100644 --- a/src/journal/journal-internal.h +++ b/src/journal/journal-internal.h @@ -90,6 +90,8 @@ struct Directory { struct sd_journal { int flags; + char *path; + Hashmap *files; Location current_location; diff --git a/src/journal/sd-journal.c b/src/journal/sd-journal.c index 4c19fc0ed1..672896d57c 100644 --- a/src/journal/sd-journal.c +++ b/src/journal/sd-journal.c @@ -1402,7 +1402,7 @@ static int allocate_inotify(sd_journal *j) { return 0; } -static sd_journal *journal_new(int flags) { +static sd_journal *journal_new(int flags, const char *path) { sd_journal *j; j = new0(sd_journal, 1); @@ -1412,8 +1412,17 @@ static sd_journal *journal_new(int flags) { j->inotify_fd = -1; j->flags = flags; + if (path) { + j->path = strdup(path); + if (!j->path) { + free(j); + return NULL; + } + } + j->files = hashmap_new(string_hash_func, string_compare_func); if (!j->files) { + free(j->path); free(j); return NULL; } @@ -1421,6 +1430,7 @@ static sd_journal *journal_new(int flags) { j->directories_by_path = hashmap_new(string_hash_func, string_compare_func); if (!j->directories_by_path) { hashmap_free(j->files); + free(j->path); free(j); return NULL; } @@ -1440,7 +1450,7 @@ _public_ int sd_journal_open(sd_journal **ret, int flags) { SD_JOURNAL_SYSTEM_ONLY)) return -EINVAL; - j = journal_new(flags); + j = journal_new(flags, NULL); if (!j) return -ENOMEM; @@ -1470,7 +1480,7 @@ _public_ int sd_journal_open_directory(sd_journal **ret, const char *path, int f if (flags != 0) return -EINVAL; - j = journal_new(flags); + j = journal_new(flags, path); if (!j) return -ENOMEM; @@ -1513,6 +1523,7 @@ _public_ void sd_journal_close(sd_journal *j) { sd_journal_flush_matches(j); + free(j->path); free(j); } @@ -1790,7 +1801,10 @@ _public_ int sd_journal_get_fd(sd_journal *j) { /* Iterate through all dirs again, to add them to the * inotify */ - r = add_search_paths(j); + if (j->path) + r = add_root_directory(j, j->path); + else + r = add_search_paths(j); if (r < 0) return r; -- cgit v1.2.3-54-g00ecf