Module Name: src
Committed By: joerg
Date: Wed Jul 24 14:03:57 UTC 2019
Modified Files:
src/external/bsd/libarchive/dist/libarchive: archive.h
archive_openssl_hmac_private.h archive_pack_dev.c
archive_pack_dev.h archive_read_disk_entry_from_file.c
archive_read_support_format_iso9660.c archive_write.3
archive_write_set_format_ar.c archive_write_set_format_shar.c
archive_write_set_format_ustar.c
Log Message:
Merge changes from libarchive 3.4.0.
To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 \
src/external/bsd/libarchive/dist/libarchive/archive.h \
src/external/bsd/libarchive/dist/libarchive/archive_openssl_hmac_private.h \
src/external/bsd/libarchive/dist/libarchive/archive_read_support_format_iso9660.c
\
src/external/bsd/libarchive/dist/libarchive/archive_write_set_format_ar.c \
src/external/bsd/libarchive/dist/libarchive/archive_write_set_format_shar.c
\
src/external/bsd/libarchive/dist/libarchive/archive_write_set_format_ustar.c
cvs rdiff -u -r1.2 -r1.3 \
src/external/bsd/libarchive/dist/libarchive/archive_pack_dev.c \
src/external/bsd/libarchive/dist/libarchive/archive_pack_dev.h
cvs rdiff -u -r1.5 -r1.6 \
src/external/bsd/libarchive/dist/libarchive/archive_read_disk_entry_from_file.c
cvs rdiff -u -r1.6 -r1.7 \
src/external/bsd/libarchive/dist/libarchive/archive_write.3
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/external/bsd/libarchive/dist/libarchive/archive.h
diff -u src/external/bsd/libarchive/dist/libarchive/archive.h:1.3 src/external/bsd/libarchive/dist/libarchive/archive.h:1.4
--- src/external/bsd/libarchive/dist/libarchive/archive.h:1.3 Thu Apr 20 13:01:40 2017
+++ src/external/bsd/libarchive/dist/libarchive/archive.h Wed Jul 24 14:03:57 2019
@@ -36,7 +36,7 @@
* assert that ARCHIVE_VERSION_NUMBER >= 2012108.
*/
/* Note: Compiler will complain if this does not match archive_entry.h! */
-#define ARCHIVE_VERSION_NUMBER 3003002
+#define ARCHIVE_VERSION_NUMBER 3004000
#include <sys/stat.h>
#include <stddef.h> /* for wchar_t */
@@ -155,7 +155,7 @@ __LA_DECL int archive_version_number(vo
/*
* Textual name/version of the library, useful for version displays.
*/
-#define ARCHIVE_VERSION_ONLY_STRING "3.3.2dev"
+#define ARCHIVE_VERSION_ONLY_STRING "3.4.0"
#define ARCHIVE_VERSION_STRING "libarchive " ARCHIVE_VERSION_ONLY_STRING
__LA_DECL const char * archive_version_string(void);
@@ -177,6 +177,7 @@ __LA_DECL const char * archive_zlib_ver
__LA_DECL const char * archive_liblzma_version(void);
__LA_DECL const char * archive_bzlib_version(void);
__LA_DECL const char * archive_liblz4_version(void);
+__LA_DECL const char * archive_libzstd_version(void);
/* Declare our basic types. */
struct archive;
@@ -276,6 +277,7 @@ typedef const char *archive_passphrase_c
#define ARCHIVE_FILTER_LZOP 11
#define ARCHIVE_FILTER_GRZIP 12
#define ARCHIVE_FILTER_LZ4 13
+#define ARCHIVE_FILTER_ZSTD 14
#if ARCHIVE_VERSION_NUMBER < 4000000
#define ARCHIVE_COMPRESSION_NONE ARCHIVE_FILTER_NONE
@@ -338,6 +340,7 @@ typedef const char *archive_passphrase_c
#define ARCHIVE_FORMAT_RAR 0xD0000
#define ARCHIVE_FORMAT_7ZIP 0xE0000
#define ARCHIVE_FORMAT_WARC 0xF0000
+#define ARCHIVE_FORMAT_RAR_V5 0x100000
/*
* Codes returned by archive_read_format_capabilities().
@@ -433,6 +436,7 @@ __LA_DECL int archive_read_support_filte
__LA_DECL int archive_read_support_filter_rpm(struct archive *);
__LA_DECL int archive_read_support_filter_uu(struct archive *);
__LA_DECL int archive_read_support_filter_xz(struct archive *);
+__LA_DECL int archive_read_support_filter_zstd(struct archive *);
__LA_DECL int archive_read_support_format_7zip(struct archive *);
__LA_DECL int archive_read_support_format_all(struct archive *);
@@ -446,6 +450,7 @@ __LA_DECL int archive_read_support_forma
__LA_DECL int archive_read_support_format_lha(struct archive *);
__LA_DECL int archive_read_support_format_mtree(struct archive *);
__LA_DECL int archive_read_support_format_rar(struct archive *);
+__LA_DECL int archive_read_support_format_rar5(struct archive *);
__LA_DECL int archive_read_support_format_raw(struct archive *);
__LA_DECL int archive_read_support_format_tar(struct archive *);
__LA_DECL int archive_read_support_format_warc(struct archive *);
@@ -778,6 +783,7 @@ __LA_DECL int archive_write_add_filter_p
const char *cmd);
__LA_DECL int archive_write_add_filter_uuencode(struct archive *);
__LA_DECL int archive_write_add_filter_xz(struct archive *);
+__LA_DECL int archive_write_add_filter_zstd(struct archive *);
/* A convenience function to set the format based on the code or name. */
@@ -1089,6 +1095,8 @@ __LA_DECL int archive_match_excluded(str
*/
__LA_DECL int archive_match_path_excluded(struct archive *,
struct archive_entry *);
+/* Control recursive inclusion of directory content when directory is included. Default on. */
+__LA_DECL int archive_match_set_inclusion_recursion(struct archive *, int);
/* Add exclusion pathname pattern. */
__LA_DECL int archive_match_exclude_pattern(struct archive *, const char *);
__LA_DECL int archive_match_exclude_pattern_w(struct archive *,
Index: src/external/bsd/libarchive/dist/libarchive/archive_openssl_hmac_private.h
diff -u src/external/bsd/libarchive/dist/libarchive/archive_openssl_hmac_private.h:1.3 src/external/bsd/libarchive/dist/libarchive/archive_openssl_hmac_private.h:1.4
--- src/external/bsd/libarchive/dist/libarchive/archive_openssl_hmac_private.h:1.3 Mon Feb 5 12:13:54 2018
+++ src/external/bsd/libarchive/dist/libarchive/archive_openssl_hmac_private.h Wed Jul 24 14:03:57 2019
@@ -28,7 +28,8 @@
#include <openssl/hmac.h>
#include <openssl/opensslv.h>
-#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER)
+#if OPENSSL_VERSION_NUMBER < 0x10100000L || \
+ (defined(LIBRESSL_VERSION_NUMBER) && LIBRESSL_VERSION_NUMBER < 0x20700000L)
#include <stdlib.h> /* malloc, free */
#include <string.h> /* memset */
static inline HMAC_CTX *HMAC_CTX_new(void)
Index: src/external/bsd/libarchive/dist/libarchive/archive_read_support_format_iso9660.c
diff -u src/external/bsd/libarchive/dist/libarchive/archive_read_support_format_iso9660.c:1.3 src/external/bsd/libarchive/dist/libarchive/archive_read_support_format_iso9660.c:1.4
--- src/external/bsd/libarchive/dist/libarchive/archive_read_support_format_iso9660.c:1.3 Thu Apr 20 13:01:40 2017
+++ src/external/bsd/libarchive/dist/libarchive/archive_read_support_format_iso9660.c Wed Jul 24 14:03:57 2019
@@ -409,7 +409,8 @@ static int next_entry_seek(struct archiv
struct file_info **);
static struct file_info *
parse_file_info(struct archive_read *a,
- struct file_info *parent, const unsigned char *isodirrec);
+ struct file_info *parent, const unsigned char *isodirrec,
+ size_t reclen);
static int parse_rockridge(struct archive_read *a,
struct file_info *file, const unsigned char *start,
const unsigned char *end);
@@ -1022,7 +1023,7 @@ read_children(struct archive_read *a, st
if (*(p + DR_name_len_offset) == 1
&& *(p + DR_name_offset) == '\001')
continue;
- child = parse_file_info(a, parent, p);
+ child = parse_file_info(a, parent, p, b - p);
if (child == NULL) {
__archive_read_consume(a, skip_size);
return (ARCHIVE_FATAL);
@@ -1112,7 +1113,7 @@ choose_volume(struct archive_read *a, st
*/
seenJoliet = iso9660->seenJoliet;/* Save flag. */
iso9660->seenJoliet = 0;
- file = parse_file_info(a, NULL, block);
+ file = parse_file_info(a, NULL, block, vd->size);
if (file == NULL)
return (ARCHIVE_FATAL);
iso9660->seenJoliet = seenJoliet;
@@ -1144,7 +1145,7 @@ choose_volume(struct archive_read *a, st
return (ARCHIVE_FATAL);
}
iso9660->seenJoliet = 0;
- file = parse_file_info(a, NULL, block);
+ file = parse_file_info(a, NULL, block, vd->size);
if (file == NULL)
return (ARCHIVE_FATAL);
iso9660->seenJoliet = seenJoliet;
@@ -1723,8 +1724,7 @@ archive_read_format_iso9660_cleanup(stru
free(iso9660->read_ce_req.reqs);
archive_string_free(&iso9660->pathname);
archive_string_free(&iso9660->previous_pathname);
- if (iso9660->pending_files.files)
- free(iso9660->pending_files.files);
+ free(iso9660->pending_files.files);
#ifdef HAVE_ZLIB_H
free(iso9660->entry_zisofs.uncompressed_buffer);
free(iso9660->entry_zisofs.block_pointers);
@@ -1749,7 +1749,7 @@ archive_read_format_iso9660_cleanup(stru
*/
static struct file_info *
parse_file_info(struct archive_read *a, struct file_info *parent,
- const unsigned char *isodirrec)
+ const unsigned char *isodirrec, size_t reclen)
{
struct iso9660 *iso9660;
struct file_info *file, *filep;
@@ -1763,16 +1763,20 @@ parse_file_info(struct archive_read *a,
iso9660 = (struct iso9660 *)(a->format->data);
- dr_len = (size_t)isodirrec[DR_length_offset];
- name_len = (size_t)isodirrec[DR_name_len_offset];
- location = archive_le32dec(isodirrec + DR_extent_offset);
- fsize = toi(isodirrec + DR_size_offset, DR_size_size);
- /* Sanity check that dr_len needs at least 34. */
- if (dr_len < 34) {
+ if (reclen != 0)
+ dr_len = (size_t)isodirrec[DR_length_offset];
+ /*
+ * Sanity check that reclen is not zero and dr_len is greater than
+ * reclen but at least 34
+ */
+ if (reclen == 0 || reclen < dr_len || dr_len < 34) {
archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
- "Invalid length of directory record");
+ "Invalid length of directory record");
return (NULL);
}
+ name_len = (size_t)isodirrec[DR_name_len_offset];
+ location = archive_le32dec(isodirrec + DR_extent_offset);
+ fsize = toi(isodirrec + DR_size_offset, DR_size_size);
/* Sanity check that name_len doesn't exceed dr_len. */
if (dr_len - 33 < name_len || name_len == 0) {
archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
@@ -2097,6 +2101,7 @@ parse_rockridge(struct archive_read *a,
const unsigned char *p, const unsigned char *end)
{
struct iso9660 *iso9660;
+ int entry_seen = 0;
iso9660 = (struct iso9660 *)(a->format->data);
@@ -2252,8 +2257,16 @@ parse_rockridge(struct archive_read *a,
}
p += p[2];
+ entry_seen = 1;
+ }
+
+ if (entry_seen)
+ return (ARCHIVE_OK);
+ else {
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
+ "Tried to parse Rockridge extensions, but none found");
+ return (ARCHIVE_WARN);
}
- return (ARCHIVE_OK);
}
static int
@@ -3021,10 +3034,10 @@ heap_add_entry(struct archive_read *a, s
ENOMEM, "Out of memory");
return (ARCHIVE_FATAL);
}
- memcpy(new_pending_files, heap->files,
- heap->allocated * sizeof(new_pending_files[0]));
- if (heap->files != NULL)
- free(heap->files);
+ if (heap->allocated)
+ memcpy(new_pending_files, heap->files,
+ heap->allocated * sizeof(new_pending_files[0]));
+ free(heap->files);
heap->files = new_pending_files;
heap->allocated = new_size;
}
Index: src/external/bsd/libarchive/dist/libarchive/archive_write_set_format_ar.c
diff -u src/external/bsd/libarchive/dist/libarchive/archive_write_set_format_ar.c:1.3 src/external/bsd/libarchive/dist/libarchive/archive_write_set_format_ar.c:1.4
--- src/external/bsd/libarchive/dist/libarchive/archive_write_set_format_ar.c:1.3 Thu Apr 20 13:01:40 2017
+++ src/external/bsd/libarchive/dist/libarchive/archive_write_set_format_ar.c Wed Jul 24 14:03:57 2019
@@ -180,16 +180,21 @@ archive_write_ar_header(struct archive_w
}
memset(buff, ' ', 60);
- strncpy(&buff[AR_fmag_offset], "`\n", 2);
+ memcpy(&buff[AR_fmag_offset], "`\n", 2);
if (strcmp(pathname, "/") == 0 ) {
/* Entry is archive symbol table in GNU format */
buff[AR_name_offset] = '/';
goto stat;
}
+ if (strcmp(pathname, "/SYM64/") == 0) {
+ /* Entry is archive symbol table in GNU 64-bit format */
+ memcpy(buff + AR_name_offset, "/SYM64/", 7);
+ goto stat;
+ }
if (strcmp(pathname, "__.SYMDEF") == 0) {
/* Entry is archive symbol table in BSD format */
- strncpy(buff + AR_name_offset, "__.SYMDEF", 9);
+ memcpy(buff + AR_name_offset, "__.SYMDEF", 9);
goto stat;
}
if (strcmp(pathname, "//") == 0) {
@@ -225,7 +230,7 @@ archive_write_ar_header(struct archive_w
* actually 15 bytes.
*/
if (strlen(filename) <= 15) {
- strncpy(&buff[AR_name_offset],
+ memcpy(&buff[AR_name_offset],
filename, strlen(filename));
buff[AR_name_offset + strlen(filename)] = '/';
} else {
@@ -248,7 +253,7 @@ archive_write_ar_header(struct archive_w
return (ARCHIVE_FATAL);
}
- strncpy(se, filename, strlen(filename));
+ memcpy(se, filename, strlen(filename));
strcpy(se + strlen(filename), "/\n");
ss = strstr(ar->strtab, se);
@@ -285,11 +290,11 @@ archive_write_ar_header(struct archive_w
* archive header.
*/
if (strlen(filename) <= 16 && strchr(filename, ' ') == NULL) {
- strncpy(&buff[AR_name_offset], filename, strlen(filename));
+ memcpy(&buff[AR_name_offset], filename, strlen(filename));
buff[AR_name_offset + strlen(filename)] = ' ';
}
else {
- strncpy(buff + AR_name_offset, "#1/", 3);
+ memcpy(buff + AR_name_offset, "#1/", 3);
if (format_decimal(strlen(filename),
buff + AR_name_offset + 3,
AR_name_size - 3)) {
@@ -374,13 +379,14 @@ archive_write_ar_data(struct archive_wri
return (ARCHIVE_WARN);
}
- ar->strtab = (char *)malloc(s);
+ ar->strtab = (char *)malloc(s + 1);
if (ar->strtab == NULL) {
archive_set_error(&a->archive, ENOMEM,
"Can't allocate strtab buffer");
return (ARCHIVE_FATAL);
}
- strncpy(ar->strtab, buff, s);
+ memcpy(ar->strtab, buff, s);
+ ar->strtab[s] = '\0';
ar->has_strtab = 1;
}
Index: src/external/bsd/libarchive/dist/libarchive/archive_write_set_format_shar.c
diff -u src/external/bsd/libarchive/dist/libarchive/archive_write_set_format_shar.c:1.3 src/external/bsd/libarchive/dist/libarchive/archive_write_set_format_shar.c:1.4
--- src/external/bsd/libarchive/dist/libarchive/archive_write_set_format_shar.c:1.3 Thu Apr 20 13:01:40 2017
+++ src/external/bsd/libarchive/dist/libarchive/archive_write_set_format_shar.c Wed Jul 24 14:03:57 2019
@@ -169,8 +169,7 @@ archive_write_shar_header(struct archive
}
/* Save the entry for the closing. */
- if (shar->entry)
- archive_entry_free(shar->entry);
+ archive_entry_free(shar->entry);
shar->entry = archive_entry_clone(entry);
name = archive_entry_pathname(entry);
@@ -289,8 +288,7 @@ archive_write_shar_header(struct archive
"mkdir -p %s > /dev/null 2>&1\n",
shar->quoted_name.s);
/* Record that we just created this directory. */
- if (shar->last_dir != NULL)
- free(shar->last_dir);
+ free(shar->last_dir);
shar->last_dir = strdup(name);
/* Trim a trailing '/'. */
Index: src/external/bsd/libarchive/dist/libarchive/archive_write_set_format_ustar.c
diff -u src/external/bsd/libarchive/dist/libarchive/archive_write_set_format_ustar.c:1.3 src/external/bsd/libarchive/dist/libarchive/archive_write_set_format_ustar.c:1.4
--- src/external/bsd/libarchive/dist/libarchive/archive_write_set_format_ustar.c:1.3 Thu Apr 20 13:01:40 2017
+++ src/external/bsd/libarchive/dist/libarchive/archive_write_set_format_ustar.c Wed Jul 24 14:03:57 2019
@@ -352,14 +352,12 @@ archive_write_ustar_header(struct archiv
#endif
ret = __archive_write_format_header_ustar(a, buff, entry, -1, 1, sconv);
if (ret < ARCHIVE_WARN) {
- if (entry_main)
- archive_entry_free(entry_main);
+ archive_entry_free(entry_main);
return (ret);
}
ret2 = __archive_write_output(a, buff, 512);
if (ret2 < ARCHIVE_WARN) {
- if (entry_main)
- archive_entry_free(entry_main);
+ archive_entry_free(entry_main);
return (ret2);
}
if (ret2 < ret)
@@ -367,8 +365,7 @@ archive_write_ustar_header(struct archiv
ustar->entry_bytes_remaining = archive_entry_size(entry);
ustar->entry_padding = 0x1ff & (-(int64_t)ustar->entry_bytes_remaining);
- if (entry_main)
- archive_entry_free(entry_main);
+ archive_entry_free(entry_main);
return (ret);
}
Index: src/external/bsd/libarchive/dist/libarchive/archive_pack_dev.c
diff -u src/external/bsd/libarchive/dist/libarchive/archive_pack_dev.c:1.2 src/external/bsd/libarchive/dist/libarchive/archive_pack_dev.c:1.3
--- src/external/bsd/libarchive/dist/libarchive/archive_pack_dev.c:1.2 Thu Apr 20 13:01:40 2017
+++ src/external/bsd/libarchive/dist/libarchive/archive_pack_dev.c Wed Jul 24 14:03:57 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: archive_pack_dev.c,v 1.2 2017/04/20 13:01:40 joerg Exp $ */
+/* $NetBSD: archive_pack_dev.c,v 1.3 2019/07/24 14:03:57 joerg Exp $ */
/*-
* Copyright (c) 1998, 2001 The NetBSD Foundation, Inc.
@@ -37,7 +37,7 @@
#include <sys/cdefs.h>
#endif
#if !defined(lint)
-__RCSID("$NetBSD: archive_pack_dev.c,v 1.2 2017/04/20 13:01:40 joerg Exp $");
+__RCSID("$NetBSD: archive_pack_dev.c,v 1.3 2019/07/24 14:03:57 joerg Exp $");
#endif /* not lint */
#ifdef HAVE_LIMITS_H
@@ -57,6 +57,12 @@ __RCSID("$NetBSD: archive_pack_dev.c,v 1
#ifdef HAVE_SYS_STAT_H
#include <sys/stat.h>
#endif
+#ifdef HAVE_SYS_SYSMACROS_H
+#include <sys/sysmacros.h>
+#endif
+#ifdef HAVE_SYS_MKDEV_H
+#include <sys/mkdev.h>
+#endif
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
Index: src/external/bsd/libarchive/dist/libarchive/archive_pack_dev.h
diff -u src/external/bsd/libarchive/dist/libarchive/archive_pack_dev.h:1.2 src/external/bsd/libarchive/dist/libarchive/archive_pack_dev.h:1.3
--- src/external/bsd/libarchive/dist/libarchive/archive_pack_dev.h:1.2 Thu Apr 20 13:01:40 2017
+++ src/external/bsd/libarchive/dist/libarchive/archive_pack_dev.h Wed Jul 24 14:03:57 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: archive_pack_dev.h,v 1.2 2017/04/20 13:01:40 joerg Exp $ */
+/* $NetBSD: archive_pack_dev.h,v 1.3 2019/07/24 14:03:57 joerg Exp $ */
/*-
* Copyright (c) 1998, 2001 The NetBSD Foundation, Inc.
Index: src/external/bsd/libarchive/dist/libarchive/archive_read_disk_entry_from_file.c
diff -u src/external/bsd/libarchive/dist/libarchive/archive_read_disk_entry_from_file.c:1.5 src/external/bsd/libarchive/dist/libarchive/archive_read_disk_entry_from_file.c:1.6
--- src/external/bsd/libarchive/dist/libarchive/archive_read_disk_entry_from_file.c:1.5 Thu Apr 20 13:01:40 2017
+++ src/external/bsd/libarchive/dist/libarchive/archive_read_disk_entry_from_file.c Wed Jul 24 14:03:57 2019
@@ -127,7 +127,7 @@ archive_read_disk_entry_setup_acls(struc
/*
* Enter working directory and return working pathname of archive_entry.
* If a pointer to an integer is provided and its value is below zero
- * open a file descriptor on this pahtname.
+ * open a file descriptor on this pathname.
*/
const char *
archive_read_disk_entry_setup_path(struct archive_read_disk *a,
@@ -163,6 +163,9 @@ archive_read_disk_entry_from_file(struct
int initial_fd = fd;
int r, r1;
+ archive_check_magic(_a, ARCHIVE_READ_DISK_MAGIC, ARCHIVE_STATE_ANY,
+ "archive_read_disk_entry_from_file");
+
archive_clear_error(_a);
path = archive_entry_sourcepath(entry);
if (path == NULL)
@@ -188,7 +191,7 @@ archive_read_disk_entry_from_file(struct
}
} else
#endif
- if (stat(path, &s) != 0) {
+ if (la_stat(path, &s) != 0) {
archive_set_error(&a->archive, errno,
"Can't stat %s", path);
return (ARCHIVE_FAILED);
@@ -928,11 +931,10 @@ setup_sparse(struct archive_read_disk *a
return (ARCHIVE_OK);
/* Does filesystem support the reporting of hole ? */
- if (*fd < 0) {
+ if (*fd < 0)
path = archive_read_disk_entry_setup_path(a, entry, fd);
- if (path == NULL)
- return (ARCHIVE_FAILED);
- }
+ else
+ path = NULL;
if (*fd >= 0) {
#ifdef _PC_MIN_HOLE_SIZE
@@ -943,6 +945,8 @@ setup_sparse(struct archive_read_disk *a
if (initial_off != 0)
lseek(*fd, 0, SEEK_SET);
} else {
+ if (path == NULL)
+ return (ARCHIVE_FAILED);
#ifdef _PC_MIN_HOLE_SIZE
if (pathconf(path, _PC_MIN_HOLE_SIZE) <= 0)
return (ARCHIVE_OK);
Index: src/external/bsd/libarchive/dist/libarchive/archive_write.3
diff -u src/external/bsd/libarchive/dist/libarchive/archive_write.3:1.6 src/external/bsd/libarchive/dist/libarchive/archive_write.3:1.7
--- src/external/bsd/libarchive/dist/libarchive/archive_write.3:1.6 Thu Apr 20 13:01:40 2017
+++ src/external/bsd/libarchive/dist/libarchive/archive_write.3 Wed Jul 24 14:03:57 2019
@@ -71,7 +71,7 @@ support.
.\"
.Ss Set options
See
-.Xr archive_read_set_options 3 .
+.Xr archive_write_set_options 3 .
.\"
.Ss Open archive
See