aboutsummaryrefslogtreecommitdiffstats
path: root/cat
diff options
context:
space:
mode:
authorMartin Matuska <mm@FreeBSD.org>2018-01-24 11:01:12 +0000
committerMartin Matuska <mm@FreeBSD.org>2018-01-24 11:01:12 +0000
commita2160dbed3dca5a43147e805b79b35f55d150188 (patch)
tree03a9bb1ae2bda0343ac2c16865db6b563969a0e9 /cat
parent188b0da4f28dc7b295a2a13d917120fc11ee7a0d (diff)
downloadsrc-a2160dbed3dca5a43147e805b79b35f55d150188.tar.gz
src-a2160dbed3dca5a43147e805b79b35f55d150188.zip
Update libarchive to git 2d9156bb3ad92c43c1e81546f4a2c21549ba248f
Relevant vendor changes: PR #893: delete dead ppmd7 alloc callbacks PR #904: Fix archive freeing bug in bsdcat PR #961: Fix ZIP format names PR #962: Don't modify attributes for existing directories when ARCHIVE_EXTRACT_NO_OVERWRITE is set PR #964: Fix -Werror=implicit-fallthrough= for GCC 7 PR #970: zip: Allow backslash as path separator
Notes
Notes: svn path=/vendor/libarchive/dist/; revision=328323
Diffstat (limited to 'cat')
-rw-r--r--cat/bsdcat.c17
-rw-r--r--cat/test/CMakeLists.txt1
2 files changed, 13 insertions, 5 deletions
diff --git a/cat/bsdcat.c b/cat/bsdcat.c
index 6ba103494342..9c91d09cc855 100644
--- a/cat/bsdcat.c
+++ b/cat/bsdcat.c
@@ -70,6 +70,12 @@ version(void)
void
bsdcat_next(void)
{
+ if (a != NULL) {
+ if (archive_read_close(a) != ARCHIVE_OK)
+ bsdcat_print_error();
+ archive_read_free(a);
+ }
+
a = archive_read_new();
archive_read_support_filter_all(a);
archive_read_support_format_empty(a);
@@ -100,8 +106,10 @@ bsdcat_read_to_stdout(const char* filename)
;
else if (archive_read_data_into_fd(a, 1) != ARCHIVE_OK)
bsdcat_print_error();
- if (archive_read_free(a) != ARCHIVE_OK)
+ if (archive_read_close(a) != ARCHIVE_OK)
bsdcat_print_error();
+ archive_read_free(a);
+ a = NULL;
}
int
@@ -135,15 +143,14 @@ main(int argc, char **argv)
if (*bsdcat->argv == NULL) {
bsdcat_current_path = "<stdin>";
bsdcat_read_to_stdout(NULL);
- } else
+ } else {
while (*bsdcat->argv) {
bsdcat_current_path = *bsdcat->argv++;
bsdcat_read_to_stdout(bsdcat_current_path);
bsdcat_next();
}
-
- if (a != NULL)
- archive_read_free(a);
+ archive_read_free(a); /* Help valgrind & friends */
+ }
exit(exit_status);
}
diff --git a/cat/test/CMakeLists.txt b/cat/test/CMakeLists.txt
index 4652ff3725c8..72f4a1037f89 100644
--- a/cat/test/CMakeLists.txt
+++ b/cat/test/CMakeLists.txt
@@ -24,6 +24,7 @@ IF(ENABLE_CAT AND ENABLE_TEST)
test_expand_xz.c
test_expand_zstd.c
test_help.c
+ test_stdin.c
test_version.c
)