From cc02a7b3304975e39ad5863983b16ef149b7f9e9 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Sun, 15 Mar 2015 17:13:43 -0400 Subject: [PATCH] journal-gatewayd: factor out opening of temp file Also use our own mkostemp wrapper, which tries to use O_TMPFILE. --- src/journal-remote/journal-gatewayd.c | 44 +++++++++++++++++---------- 1 file changed, 28 insertions(+), 16 deletions(-) diff --git a/src/journal-remote/journal-gatewayd.c b/src/journal-remote/journal-gatewayd.c index b4bc8ccf8..6efc9b385 100644 --- a/src/journal-remote/journal-gatewayd.c +++ b/src/journal-remote/journal-gatewayd.c @@ -121,6 +121,26 @@ static int open_journal(RequestMeta *m) { return sd_journal_open(&m->journal, SD_JOURNAL_LOCAL_ONLY|SD_JOURNAL_SYSTEM); } +static int request_meta_ensure_tmp(RequestMeta *m) { + if (m->tmp) + rewind(m->tmp); + else { + int fd; + + fd = open_tmpfile("/tmp", O_RDWR|O_CLOEXEC); + if (fd < 0) + return fd; + + m->tmp = fdopen(fd, "rw"); + if (!m->tmp) { + safe_close(fd); + return -errno; + } + } + + return 0; +} + static ssize_t request_reader_entries( void *cls, uint64_t pos, @@ -194,14 +214,10 @@ static ssize_t request_reader_entries( m->n_skip = 0; - if (m->tmp) - rewind(m->tmp); - else { - m->tmp = tmpfile(); - if (!m->tmp) { - log_error_errno(errno, "Failed to create temporary file: %m"); - return MHD_CONTENT_READER_END_WITH_ERROR; - } + r = request_meta_ensure_tmp(m); + if (r < 0) { + log_error_errno(r, "Failed to create temporary file: %m"); + return MHD_CONTENT_READER_END_WITH_ERROR; } r = output_journal(m->tmp, m->journal, m->mode, 0, OUTPUT_FULL_WIDTH, NULL); @@ -555,14 +571,10 @@ static ssize_t request_reader_fields( if (m->n_fields_set) m->n_fields -= 1; - if (m->tmp) - rewind(m->tmp); - else { - m->tmp = tmpfile(); - if (!m->tmp) { - log_error_errno(errno, "Failed to create temporary file: %m"); - return MHD_CONTENT_READER_END_WITH_ERROR; - } + r = request_meta_ensure_tmp(m); + if (r < 0) { + log_error_errno(r, "Failed to create temporary file: %m"); + return MHD_CONTENT_READER_END_WITH_ERROR; } r = output_field(m->tmp, m->mode, d, l); -- 2.30.2