sd-journal: fix sd_journal_open_directory with SD_JOURNAL_OS_ROOT

The directory argument that is given to sd_j_o_d was ignored when
SD_JOURNAL_OS_ROOT was given, and directories relative to the root of the host
file system were used. With that flag, sd_j_o_d should do the same as
sd_j_open_container: use the path as "prefix", i.e. the directory relative to
which everything happens.

Instead of touching sd_j_o_d, journal_new is fixed to do what sd_j_o_c
was doing, and treat the specified path as prefix when SD_JOURNAL_OS_ROOT is
specified.
This commit is contained in:
Zbigniew Jędrzejewski-Szmek 2016-08-12 00:32:10 -04:00
parent 10752e829b
commit 16fefe9080

View file

@ -1719,9 +1719,16 @@ static sd_journal *journal_new(int flags, const char *path) {
j->data_threshold = DEFAULT_DATA_THRESHOLD;
if (path) {
j->path = strdup(path);
if (!j->path)
char *t;
t = strdup(path);
if (!t)
goto fail;
if (flags & SD_JOURNAL_OS_ROOT)
j->prefix = t;
else
j->path = t;
}
j->files = ordered_hashmap_new(&string_hash_ops);
@ -1795,13 +1802,10 @@ _public_ int sd_journal_open_container(sd_journal **ret, const char *machine, in
if (!streq_ptr(class, "container"))
return -EIO;
j = journal_new(flags, NULL);
j = journal_new(flags, root);
if (!j)
return -ENOMEM;
j->prefix = root;
root = NULL;
r = add_search_paths(j);
if (r < 0)
goto fail;