From a6dcc7e5924f9c27d3e9c6560a448b02ec28b65f Mon Sep 17 00:00:00 2001 From: Zbigniew Jędrzejewski-Szmek Date: Mon, 9 Mar 2015 21:23:53 -0400 Subject: Introduce loop_read_exact helper Usually when using loop_read(), we want to read the full buffer. Add a helper that mirrors loop_write(), and returns 0 when full buffer was read, and an error otherwise. Use -ENODATA for the short read, to distinguish it from a read error. --- src/journal/compress.c | 25 ++++++++++--------------- src/journal/journalctl.c | 8 +++----- 2 files changed, 13 insertions(+), 20 deletions(-) (limited to 'src/journal') diff --git a/src/journal/compress.c b/src/journal/compress.c index 4232206f44..383f6a6e96 100644 --- a/src/journal/compress.c +++ b/src/journal/compress.c @@ -589,14 +589,12 @@ int decompress_stream_lz4(int fdf, int fdt, off_t max_bytes) { return log_oom(); for (;;) { - ssize_t n, m; + ssize_t m; int r; - n = read(fdf, &header, sizeof(header)); - if (n < 0) - return -errno; - if (n != sizeof(header)) - return errno ? -errno : -EIO; + r = loop_read_exact(fdf, &header, sizeof(header), false); + if (r < 0) + return r; m = le32toh(header); if (m == 0) @@ -618,12 +616,9 @@ int decompress_stream_lz4(int fdf, int fdt, off_t max_bytes) { if (!GREEDY_REALLOC(buf, buf_size, m)) return log_oom(); - errno = 0; - n = loop_read(fdf, buf, m, false); - if (n < 0) - return n; - if (n != m) - return errno ? -errno : -EIO; + r = loop_read_exact(fdf, buf, m, false); + if (r < 0) + return r; r = LZ4_decompress_safe_continue(&lz4_data, buf, out, m, 4*LZ4_BUFSIZE); if (r <= 0) @@ -636,9 +631,9 @@ int decompress_stream_lz4(int fdf, int fdt, off_t max_bytes) { return -EFBIG; } - n = loop_write(fdt, out, r, false); - if (n < 0) - return n; + r = loop_write(fdt, out, r, false); + if (r < 0) + return r; } log_debug("LZ4 decompression finished (%zu -> %zu bytes, %.1f%%)", diff --git a/src/journal/journalctl.c b/src/journal/journalctl.c index f0f03b0697..4d45f5a691 100644 --- a/src/journal/journalctl.c +++ b/src/journal/journalctl.c @@ -1286,7 +1286,6 @@ static int setup_keys(void) { #ifdef HAVE_GCRYPT size_t mpk_size, seed_size, state_size, i; uint8_t *mpk, *seed, *state; - ssize_t l; int fd = -1, r; sd_id128_t machine, boot; char *p = NULL, *k = NULL; @@ -1351,10 +1350,9 @@ static int setup_keys(void) { } log_info("Generating seed..."); - l = loop_read(fd, seed, seed_size, true); - if (l < 0 || (size_t) l != seed_size) { - log_error_errno(EIO, "Failed to read random seed: %m"); - r = -EIO; + r = loop_read_exact(fd, seed, seed_size, true); + if (r < 0) { + log_error_errno(r, "Failed to read random seed: %m"); goto finish; } -- cgit v1.2.3-54-g00ecf