diff options
-rw-r--r-- | include/tar.h | 9 | ||||
-rw-r--r-- | include/util.h | 9 | ||||
-rw-r--r-- | lib/tar/Makemodule.am | 2 | ||||
-rw-r--r-- | lib/tar/read_header.c | 4 | ||||
-rw-r--r-- | lib/tar/read_retry.c (renamed from lib/util/read_data.c) | 8 | ||||
-rw-r--r-- | lib/tar/read_sparse_map_old.c | 4 | ||||
-rw-r--r-- | lib/tar/skip.c | 2 | ||||
-rw-r--r-- | lib/util/Makemodule.am | 3 | ||||
-rw-r--r-- | tests/tar_gnu.c | 12 | ||||
-rw-r--r-- | tests/tar_pax.c | 10 | ||||
-rw-r--r-- | tests/tar_ustar.c | 12 | ||||
-rw-r--r-- | tests/tar_xattr_bsd.c | 2 | ||||
-rw-r--r-- | tests/tar_xattr_schily.c | 2 |
13 files changed, 39 insertions, 40 deletions
diff --git a/include/tar.h b/include/tar.h index e86d775..319f035 100644 --- a/include/tar.h +++ b/include/tar.h @@ -138,4 +138,13 @@ void clear_header(tar_header_decoded_t *hdr); */ int padd_file(int outfd, sqfs_u64 size); + +/* + A wrapper around the read() system call. It retries the read if it is + interrupted by a signal or less than the desired size was read. Returns 0 + on success. Writes to stderr on failure using 'errstr' as a perror style + error prefix. +*/ +int read_retry(const char *errstr, int fd, void *buffer, size_t size); + #endif /* TAR_H */ diff --git a/include/util.h b/include/util.h index 3b1d16b..9ed2189 100644 --- a/include/util.h +++ b/include/util.h @@ -50,15 +50,6 @@ SQFS_INTERNAL int write_data(const char *errstr, int fd, const void *data, size_t size); /* - A wrapper around the read() system call. It retries the read if it is - interrupted by a signal or less than the desired size was read. Returns 0 - on success. Writes to stderr on failure using 'errstr' as a perror style - error prefix. -*/ -SQFS_INTERNAL -int read_data(const char *errstr, int fd, void *buffer, size_t size); - -/* A common implementation of the '--version' command line flag. Prints out version information. The program name is extracted from the diff --git a/lib/tar/Makemodule.am b/lib/tar/Makemodule.am index 129d66f..f0945ff 100644 --- a/lib/tar/Makemodule.am +++ b/lib/tar/Makemodule.am @@ -2,7 +2,7 @@ libtar_a_SOURCES = lib/tar/read_header.c lib/tar/write_header.c lib/tar/skip.c libtar_a_SOURCES += lib/tar/number.c lib/tar/checksum.c lib/tar/cleanup.c libtar_a_SOURCES += lib/tar/read_sparse_map.c lib/tar/read_sparse_map_old.c libtar_a_SOURCES += lib/tar/base64.c lib/tar/urldecode.c lib/tar/internal.h -libtar_a_SOURCES += lib/tar/padd_file.c include/tar.h +libtar_a_SOURCES += lib/tar/padd_file.c lib/tar/read_retry.c include/tar.h libtar_a_CFLAGS = $(AM_CFLAGS) libtar_a_CPPFLAGS = $(AM_CPPFLAGS) diff --git a/lib/tar/read_header.c b/lib/tar/read_header.c index f6d746b..760d36a 100644 --- a/lib/tar/read_header.c +++ b/lib/tar/read_header.c @@ -42,7 +42,7 @@ static char *record_to_memory(int fd, sqfs_u64 size) if (buffer == NULL) goto fail_errno; - if (read_data("reading tar record", fd, buffer, size)) + if (read_retry("reading tar record", fd, buffer, size)) goto fail; if (skip_padding(fd, size)) @@ -368,7 +368,7 @@ int read_header(int fd, tar_header_decoded_t *out) memset(out, 0, sizeof(*out)); for (;;) { - if (read_data("reading tar header", fd, &hdr, sizeof(hdr))) + if (read_retry("reading tar header", fd, &hdr, sizeof(hdr))) goto fail; if (is_zero_block(&hdr)) { diff --git a/lib/util/read_data.c b/lib/tar/read_retry.c index f35d579..5d06595 100644 --- a/lib/util/read_data.c +++ b/lib/tar/read_retry.c @@ -1,6 +1,6 @@ -/* SPDX-License-Identifier: LGPL-3.0-or-later */ +/* SPDX-License-Identifier: GPL-3.0-or-later */ /* - * read_data.c + * read_retry.c * * Copyright (C) 2019 David Oberhollenzer <goliath@infraroot.at> */ @@ -10,9 +10,9 @@ #include <errno.h> #include <stdio.h> -#include "util.h" +#include "tar.h" -int read_data(const char *errstr, int fd, void *buffer, size_t size) +int read_retry(const char *errstr, int fd, void *buffer, size_t size) { ssize_t ret; diff --git a/lib/tar/read_sparse_map_old.c b/lib/tar/read_sparse_map_old.c index fb79eca..959c9a8 100644 --- a/lib/tar/read_sparse_map_old.c +++ b/lib/tar/read_sparse_map_old.c @@ -47,8 +47,8 @@ sparse_map_t *read_gnu_old_sparse(int fd, tar_header_t *hdr) return list; do { - if (read_data("reading GNU sparse header", - fd, &sph, sizeof(sph))) { + if (read_retry("reading GNU sparse header", + fd, &sph, sizeof(sph))) { goto fail; } diff --git a/lib/tar/skip.c b/lib/tar/skip.c index eb91416..0ebe013 100644 --- a/lib/tar/skip.c +++ b/lib/tar/skip.c @@ -21,7 +21,7 @@ static int skip_bytes(int fd, sqfs_u64 size) if (diff > size) diff = size; - if (read_data("reading tar record padding", fd, buffer, diff)) + if (read_retry("reading tar record padding", fd, buffer, diff)) return -1; size -= diff; diff --git a/lib/util/Makemodule.am b/lib/util/Makemodule.am index 1ae931b..5ba82bc 100644 --- a/lib/util/Makemodule.am +++ b/lib/util/Makemodule.am @@ -1,5 +1,4 @@ -libutil_la_SOURCES = lib/util/write_data.c -libutil_la_SOURCES += lib/util/read_data.c include/util.h +libutil_la_SOURCES = lib/util/write_data.c include/util.h libutil_la_SOURCES += lib/util/mkdir_p.c include/compat.h libutil_la_SOURCES += lib/util/str_table.c include/str_table.h libutil_la_SOURCES += lib/util/dirstack.c lib/util/alloc.c diff --git a/tests/tar_gnu.c b/tests/tar_gnu.c index 4bff6ff..5aa112c 100644 --- a/tests/tar_gnu.c +++ b/tests/tar_gnu.c @@ -56,7 +56,7 @@ int main(void) assert(hdr.mtime == 1542905892); assert(strcmp(hdr.name, "input.txt") == 0); assert(!hdr.unknown_record); - assert(read_data("data0", fd, buffer, 5) == 0); + assert(read_retry("data0", fd, buffer, 5) == 0); buffer[5] = '\0'; assert(strcmp(buffer, "test\n") == 0); clear_header(&hdr); @@ -72,7 +72,7 @@ int main(void) assert(hdr.mtime == 013375560044); assert(strcmp(hdr.name, "input.txt") == 0); assert(!hdr.unknown_record); - assert(read_data("data1", fd, buffer, 5) == 0); + assert(read_retry("data1", fd, buffer, 5) == 0); buffer[5] = '\0'; assert(strcmp(buffer, "test\n") == 0); clear_header(&hdr); @@ -101,7 +101,7 @@ int main(void) assert(hdr.mtime == 013376036700); assert(strcmp(hdr.name, "input.txt") == 0); assert(!hdr.unknown_record); - assert(read_data("data2", fd, buffer, 5) == 0); + assert(read_retry("data2", fd, buffer, 5) == 0); buffer[5] = '\0'; assert(strcmp(buffer, "test\n") == 0); clear_header(&hdr); @@ -121,7 +121,7 @@ int main(void) assert(hdr.mtime == 8589934592L); assert(strcmp(hdr.name, "input.txt") == 0); assert(!hdr.unknown_record); - assert(read_data("data3", fd, buffer, 5) == 0); + assert(read_retry("data3", fd, buffer, 5) == 0); buffer[5] = '\0'; assert(strcmp(buffer, "test\n") == 0); clear_header(&hdr); @@ -137,7 +137,7 @@ int main(void) assert(hdr.mtime == -315622800); assert(strcmp(hdr.name, "input.txt") == 0); assert(!hdr.unknown_record); - assert(read_data("data4", fd, buffer, 5) == 0); + assert(read_retry("data4", fd, buffer, 5) == 0); buffer[5] = '\0'; assert(strcmp(buffer, "test\n") == 0); clear_header(&hdr); @@ -153,7 +153,7 @@ int main(void) assert(hdr.mtime == 1542909670); assert(strcmp(hdr.name, filename) == 0); assert(!hdr.unknown_record); - assert(read_data("data5", fd, buffer, 5) == 0); + assert(read_retry("data5", fd, buffer, 5) == 0); buffer[5] = '\0'; assert(strcmp(buffer, "test\n") == 0); clear_header(&hdr); diff --git a/tests/tar_pax.c b/tests/tar_pax.c index 866e6eb..79301b6 100644 --- a/tests/tar_pax.c +++ b/tests/tar_pax.c @@ -56,7 +56,7 @@ int main(void) assert(hdr.mtime == 1542905892); assert(strcmp(hdr.name, "input.txt") == 0); assert(!hdr.unknown_record); - assert(read_data("data0", fd, buffer, 5) == 0); + assert(read_retry("data0", fd, buffer, 5) == 0); buffer[5] = '\0'; assert(strcmp(buffer, "test\n") == 0); clear_header(&hdr); @@ -85,7 +85,7 @@ int main(void) assert(hdr.mtime == 013376036700); assert(strcmp(hdr.name, "input.txt") == 0); assert(!hdr.unknown_record); - assert(read_data("data1", fd, buffer, 5) == 0); + assert(read_retry("data1", fd, buffer, 5) == 0); buffer[5] = '\0'; assert(strcmp(buffer, "test\n") == 0); clear_header(&hdr); @@ -105,7 +105,7 @@ int main(void) assert(hdr.mtime == 8589934592L); assert(strcmp(hdr.name, "input.txt") == 0); assert(!hdr.unknown_record); - assert(read_data("data2", fd, buffer, 5) == 0); + assert(read_retry("data2", fd, buffer, 5) == 0); buffer[5] = '\0'; assert(strcmp(buffer, "test\n") == 0); clear_header(&hdr); @@ -121,7 +121,7 @@ int main(void) assert(hdr.mtime == -315622800); assert(strcmp(hdr.name, "input.txt") == 0); assert(!hdr.unknown_record); - assert(read_data("data3", fd, buffer, 5) == 0); + assert(read_retry("data3", fd, buffer, 5) == 0); buffer[5] = '\0'; assert(strcmp(buffer, "test\n") == 0); clear_header(&hdr); @@ -137,7 +137,7 @@ int main(void) assert(hdr.mtime == 1542909670); assert(strcmp(hdr.name, filename) == 0); assert(!hdr.unknown_record); - assert(read_data("data4", fd, buffer, 5) == 0); + assert(read_retry("data4", fd, buffer, 5) == 0); buffer[5] = '\0'; assert(strcmp(buffer, "test\n") == 0); clear_header(&hdr); diff --git a/tests/tar_ustar.c b/tests/tar_ustar.c index 2a59ac3..1a03784 100644 --- a/tests/tar_ustar.c +++ b/tests/tar_ustar.c @@ -56,7 +56,7 @@ int main(void) assert(hdr.mtime == 1542905892); assert(strcmp(hdr.name, "input.txt") == 0); assert(!hdr.unknown_record); - assert(read_data("data0", fd, buffer, 5) == 0); + assert(read_retry("data0", fd, buffer, 5) == 0); buffer[5] = '\0'; assert(strcmp(buffer, "test\n") == 0); clear_header(&hdr); @@ -72,7 +72,7 @@ int main(void) assert(hdr.mtime == 1542905892); assert(strcmp(hdr.name, "input.txt") == 0); assert(!hdr.unknown_record); - assert(read_data("data1", fd, buffer, 5) == 0); + assert(read_retry("data1", fd, buffer, 5) == 0); buffer[5] = '\0'; assert(strcmp(buffer, "test\n") == 0); clear_header(&hdr); @@ -88,7 +88,7 @@ int main(void) assert(hdr.mtime == 1542905892); assert(strcmp(hdr.name, "input.txt") == 0); assert(!hdr.unknown_record); - assert(read_data("data2", fd, buffer, 5) == 0); + assert(read_retry("data2", fd, buffer, 5) == 0); buffer[5] = '\0'; assert(strcmp(buffer, "test\n") == 0); clear_header(&hdr); @@ -117,7 +117,7 @@ int main(void) assert(hdr.mtime == 013376036700); assert(strcmp(hdr.name, "input.txt") == 0); assert(!hdr.unknown_record); - assert(read_data("data3", fd, buffer, 5) == 0); + assert(read_retry("data3", fd, buffer, 5) == 0); buffer[5] = '\0'; assert(strcmp(buffer, "test\n") == 0); clear_header(&hdr); @@ -137,7 +137,7 @@ int main(void) assert(hdr.mtime == 8589934592L); assert(strcmp(hdr.name, "input.txt") == 0); assert(!hdr.unknown_record); - assert(read_data("data4", fd, buffer, 5) == 0); + assert(read_retry("data4", fd, buffer, 5) == 0); buffer[5] = '\0'; assert(strcmp(buffer, "test\n") == 0); clear_header(&hdr); @@ -153,7 +153,7 @@ int main(void) assert(hdr.mtime == 1542909670); assert(strcmp(hdr.name, filename) == 0); assert(!hdr.unknown_record); - assert(read_data("data5", fd, buffer, 5) == 0); + assert(read_retry("data5", fd, buffer, 5) == 0); buffer[5] = '\0'; assert(strcmp(buffer, "test\n") == 0); clear_header(&hdr); diff --git a/tests/tar_xattr_bsd.c b/tests/tar_xattr_bsd.c index 2e9479c..50c0150 100644 --- a/tests/tar_xattr_bsd.c +++ b/tests/tar_xattr_bsd.c @@ -51,7 +51,7 @@ int main(void) assert(hdr.mtime == 1543094477); assert(strcmp(hdr.name, "input.txt") == 0); assert(!hdr.unknown_record); - assert(read_data("data0", fd, buffer, 5) == 0); + assert(read_retry("data0", fd, buffer, 5) == 0); buffer[5] = '\0'; assert(strcmp(buffer, "test\n") == 0); diff --git a/tests/tar_xattr_schily.c b/tests/tar_xattr_schily.c index 5f09110..033941a 100644 --- a/tests/tar_xattr_schily.c +++ b/tests/tar_xattr_schily.c @@ -51,7 +51,7 @@ int main(void) assert(hdr.mtime == 1543094477); assert(strcmp(hdr.name, "input.txt") == 0); assert(!hdr.unknown_record); - assert(read_data("data0", fd, buffer, 5) == 0); + assert(read_retry("data0", fd, buffer, 5) == 0); buffer[5] = '\0'; assert(strcmp(buffer, "test\n") == 0); |