summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2019-03-06 11:42:35 +0100
committerLennart Poettering <lennart@poettering.net>2019-03-07 15:10:06 +0100
commit0c0e87fcd5cb02173290a1554073d51879374ff9 (patch)
tree3d9eff87cab4ec8ec145501b2e7142be942ad534
parent3d477d6101fa047b146607b4f0996a30bd810386 (diff)
downloadsystemd-0c0e87fcd5cb02173290a1554073d51879374ff9.tar.gz
catalog: _cleanup_close_ is your friend
-rw-r--r--src/journal/catalog.c19
1 files changed, 6 insertions, 13 deletions
diff --git a/src/journal/catalog.c b/src/journal/catalog.c
index 0106538772..ccee950d1d 100644
--- a/src/journal/catalog.c
+++ b/src/journal/catalog.c
@@ -508,10 +508,10 @@ int catalog_update(const char* database, const char* root, const char* const* di
}
static int open_mmap(const char *database, int *_fd, struct stat *_st, void **_p) {
+ _cleanup_close_ int fd = -1;
const CatalogHeader *h;
- int fd;
- void *p;
struct stat st;
+ void *p;
assert(_fd);
assert(_st);
@@ -521,21 +521,15 @@ static int open_mmap(const char *database, int *_fd, struct stat *_st, void **_p
if (fd < 0)
return -errno;
- if (fstat(fd, &st) < 0) {
- safe_close(fd);
+ if (fstat(fd, &st) < 0)
return -errno;
- }
- if (st.st_size < (off_t) sizeof(CatalogHeader)) {
- safe_close(fd);
+ if (st.st_size < (off_t) sizeof(CatalogHeader))
return -EINVAL;
- }
p = mmap(NULL, PAGE_ALIGN(st.st_size), PROT_READ, MAP_SHARED, fd, 0);
- if (p == MAP_FAILED) {
- safe_close(fd);
+ if (p == MAP_FAILED)
return -errno;
- }
h = p;
if (memcmp(h->signature, (const uint8_t[]) CATALOG_SIGNATURE, sizeof(h->signature)) != 0 ||
@@ -544,12 +538,11 @@ static int open_mmap(const char *database, int *_fd, struct stat *_st, void **_p
h->incompatible_flags != 0 ||
le64toh(h->n_items) <= 0 ||
st.st_size < (off_t) (le64toh(h->header_size) + le64toh(h->catalog_item_size) * le64toh(h->n_items))) {
- safe_close(fd);
munmap(p, st.st_size);
return -EBADMSG;
}
- *_fd = fd;
+ *_fd = TAKE_FD(fd);
*_st = st;
*_p = p;