summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/tar.h9
-rw-r--r--include/util.h9
-rw-r--r--lib/tar/Makemodule.am2
-rw-r--r--lib/tar/read_header.c4
-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.c4
-rw-r--r--lib/tar/skip.c2
-rw-r--r--lib/util/Makemodule.am3
-rw-r--r--tests/tar_gnu.c12
-rw-r--r--tests/tar_pax.c10
-rw-r--r--tests/tar_ustar.c12
-rw-r--r--tests/tar_xattr_bsd.c2
-rw-r--r--tests/tar_xattr_schily.c2
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);