chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
sd-journal: do not require path to be absolute
[elogind.git]
/
src
/
journal
/
sd-journal.c
diff --git
a/src/journal/sd-journal.c
b/src/journal/sd-journal.c
index 19123544b34bd5dcd3f31f7b044bd1aea46667be..ef4b9b2242a422c64867eb776feadc987eee566d 100644
(file)
--- a/
src/journal/sd-journal.c
+++ b/
src/journal/sd-journal.c
@@
-1215,7
+1215,7
@@
static void check_network(sd_journal *j, int fd) {
}
static int add_file(sd_journal *j, const char *prefix, const char *filename) {
}
static int add_file(sd_journal *j, const char *prefix, const char *filename) {
- char
*path
;
+ char
_cleanup_free_ *path = NULL
;
int r;
JournalFile *f;
int r;
JournalFile *f;
@@
-1234,20
+1234,15
@@
static int add_file(sd_journal *j, const char *prefix, const char *filename) {
if (!path)
return -ENOMEM;
if (!path)
return -ENOMEM;
- if (hashmap_get(j->files, path)) {
- free(path);
+ if (hashmap_get(j->files, path))
return 0;
return 0;
- }
if (hashmap_size(j->files) >= JOURNAL_FILES_MAX) {
log_debug("Too many open journal files, not adding %s, ignoring.", path);
if (hashmap_size(j->files) >= JOURNAL_FILES_MAX) {
log_debug("Too many open journal files, not adding %s, ignoring.", path);
- free(path);
return 0;
}
r = journal_file_open(path, O_RDONLY, 0, false, false, NULL, j->mmap, NULL, &f);
return 0;
}
r = journal_file_open(path, O_RDONLY, 0, false, false, NULL, j->mmap, NULL, &f);
- free(path);
-
if (r < 0) {
if (errno == ENOENT)
return 0;
if (r < 0) {
if (errno == ENOENT)
return 0;
@@
-1263,12
+1258,12
@@
static int add_file(sd_journal *j, const char *prefix, const char *filename) {
return r;
}
return r;
}
+ log_debug("File %s got added.", f->path);
+
check_network(j, f->fd);
j->current_invalidate_counter ++;
check_network(j, f->fd);
j->current_invalidate_counter ++;
- log_debug("File %s got added.", f->path);
-
return 0;
}
return 0;
}
@@
-1311,9
+1306,9
@@
static int remove_file(sd_journal *j, const char *prefix, const char *filename)
}
static int add_directory(sd_journal *j, const char *prefix, const char *dirname) {
}
static int add_directory(sd_journal *j, const char *prefix, const char *dirname) {
- char
*path
;
+ char
_cleanup_free_ *path = NULL
;
int r;
int r;
- DIR
*d
;
+ DIR
_cleanup_closedir_ *d = NULL
;
sd_id128_t id, mid;
Directory *m;
sd_id128_t id, mid;
Directory *m;
@@
-1336,8
+1331,6
@@
static int add_directory(sd_journal *j, const char *prefix, const char *dirname)
d = opendir(path);
if (!d) {
log_debug("Failed to open %s: %m", path);
d = opendir(path);
if (!d) {
log_debug("Failed to open %s: %m", path);
- free(path);
-
if (errno == ENOENT)
return 0;
return -errno;
if (errno == ENOENT)
return 0;
return -errno;
@@
-1346,32
+1339,24
@@
static int add_directory(sd_journal *j, const char *prefix, const char *dirname)
m = hashmap_get(j->directories_by_path, path);
if (!m) {
m = new0(Directory, 1);
m = hashmap_get(j->directories_by_path, path);
if (!m) {
m = new0(Directory, 1);
- if (!m) {
- closedir(d);
- free(path);
+ if (!m)
return -ENOMEM;
return -ENOMEM;
- }
m->is_root = false;
m->path = path;
if (hashmap_put(j->directories_by_path, m->path, m) < 0) {
m->is_root = false;
m->path = path;
if (hashmap_put(j->directories_by_path, m->path, m) < 0) {
- closedir(d);
- free(m->path);
free(m);
return -ENOMEM;
}
free(m);
return -ENOMEM;
}
+ path = NULL; /* avoid freeing in cleanup */
j->current_invalidate_counter ++;
log_debug("Directory %s got added.", m->path);
j->current_invalidate_counter ++;
log_debug("Directory %s got added.", m->path);
- } else if (m->is_root) {
- free (path);
- closedir(d);
+ } else if (m->is_root)
return 0;
return 0;
- } else
- free(path);
if (m->wd <= 0 && j->inotify_fd >= 0) {
if (m->wd <= 0 && j->inotify_fd >= 0) {
@@
-1402,13
+1387,11
@@
static int add_directory(sd_journal *j, const char *prefix, const char *dirname)
check_network(j, dirfd(d));
check_network(j, dirfd(d));
- closedir(d);
-
return 0;
}
static int add_root_directory(sd_journal *j, const char *p) {
return 0;
}
static int add_root_directory(sd_journal *j, const char *p) {
- DIR
*d
;
+ DIR
_cleanup_closedir_ *d = NULL
;
Directory *m;
int r;
Directory *m;
int r;
@@
-1426,21
+1409,17
@@
static int add_root_directory(sd_journal *j, const char *p) {
m = hashmap_get(j->directories_by_path, p);
if (!m) {
m = new0(Directory, 1);
m = hashmap_get(j->directories_by_path, p);
if (!m) {
m = new0(Directory, 1);
- if (!m) {
- closedir(d);
+ if (!m)
return -ENOMEM;
return -ENOMEM;
- }
m->is_root = true;
m->path = strdup(p);
if (!m->path) {
m->is_root = true;
m->path = strdup(p);
if (!m->path) {
- closedir(d);
free(m);
return -ENOMEM;
}
if (hashmap_put(j->directories_by_path, m->path, m) < 0) {
free(m);
return -ENOMEM;
}
if (hashmap_put(j->directories_by_path, m->path, m) < 0) {
- closedir(d);
free(m->path);
free(m);
return -ENOMEM;
free(m->path);
free(m);
return -ENOMEM;
@@
-1450,10
+1429,8
@@
static int add_root_directory(sd_journal *j, const char *p) {
log_debug("Root directory %s got added.", m->path);
log_debug("Root directory %s got added.", m->path);
- } else if (!m->is_root) {
- closedir(d);
+ } else if (!m->is_root)
return 0;
return 0;
- }
if (m->wd <= 0 && j->inotify_fd >= 0) {
if (m->wd <= 0 && j->inotify_fd >= 0) {
@@
-1491,8
+1468,6
@@
static int add_root_directory(sd_journal *j, const char *p) {
check_network(j, dirfd(d));
check_network(j, dirfd(d));
- closedir(d);
-
return 0;
}
return 0;
}
@@
-1568,37
+1543,21
@@
static sd_journal *journal_new(int flags, const char *path) {
if (path) {
j->path = strdup(path);
if (path) {
j->path = strdup(path);
- if (!j->path) {
- free(j);
- return NULL;
- }
+ if (!j->path)
+ goto fail;
}
j->files = hashmap_new(string_hash_func, string_compare_func);
}
j->files = hashmap_new(string_hash_func, string_compare_func);
- if (!j->files) {
- free(j->path);
- free(j);
- return NULL;
- }
-
j->directories_by_path = hashmap_new(string_hash_func, string_compare_func);
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;
- }
-
j->mmap = mmap_cache_new();
j->mmap = mmap_cache_new();
- if (!j->mmap) {
- hashmap_free(j->files);
- hashmap_free(j->directories_by_path);
- free(j->path);
- free(j);
- return NULL;
- }
+ if (!j->files || !j->directories_by_path || !j->mmap)
+ goto fail;
return j;
return j;
+
+fail:
+ sd_journal_close(j);
+ return NULL;
}
_public_ int sd_journal_open(sd_journal **ret, int flags) {
}
_public_ int sd_journal_open(sd_journal **ret, int flags) {
@@
-1637,7
+1596,7
@@
_public_ int sd_journal_open_directory(sd_journal **ret, const char *path, int f
if (!ret)
return -EINVAL;
if (!ret)
return -EINVAL;
- if (!path
|| !path_is_absolute(path)
)
+ if (!path)
return -EINVAL;
if (flags != 0)
return -EINVAL;
if (flags != 0)
@@
-1868,7
+1827,7
@@
_public_ int sd_journal_get_data(sd_journal *j, const char *field, const void **
*data = o->data.payload;
*size = t;
*data = o->data.payload;
*size = t;
- return
1
;
+ return
0
;
}
r = journal_file_move_to_object(f, OBJECT_ENTRY, f->current_offset, &o);
}
r = journal_file_move_to_object(f, OBJECT_ENTRY, f->current_offset, &o);