head	1.23;
access;
symbols
	libarchive-3-8-8:1.1.1.24
	pkgsrc-2026Q2:1.22.0.2
	pkgsrc-2026Q2-base:1.22
	libarchive-3-8-7:1.1.1.23
	libarchive-3-8-6:1.1.1.22
	pkgsrc-2026Q1:1.20.0.2
	pkgsrc-2026Q1-base:1.20
	libarchive-3-8-5:1.1.1.21
	libarchive-3-8-4:1.1.1.20
	pkgsrc-2025Q4:1.18.0.2
	pkgsrc-2025Q4-base:1.18
	libarchive-3-8-3:1.1.1.19
	libarchive-3-8-2:1.1.1.18
	pkgsrc-2025Q3:1.16.0.2
	pkgsrc-2025Q3-base:1.16
	libarchive-3-8-1:1.1.1.17
	pkgsrc-2025Q2:1.15.0.2
	pkgsrc-2025Q2-base:1.15
	libarchive-3-8-0:1.1.1.16
	libarchive-3-7-9:1.1.1.15
	pkgsrc-2025Q1:1.13.0.4
	pkgsrc-2025Q1-base:1.13
	pkgsrc-2024Q4:1.13.0.2
	pkgsrc-2024Q4-base:1.13
	libarchive-3-7-7:1.1.1.14
	pkgsrc-2024Q3:1.12.0.2
	pkgsrc-2024Q3-base:1.12
	libarchive-3-7-5:1.1.1.13
	pkgsrc-2024Q2:1.11.0.2
	pkgsrc-2024Q2-base:1.11
	libarchive-3-7-4:1.1.1.12
	libarchive-3-7-3:1.1.1.11
	pkgsrc-2024Q1:1.9.0.2
	pkgsrc-2024Q1-base:1.9
	libarchive-3-7-2:1.1.1.10
	pkgsrc-2023Q4:1.8.0.30
	pkgsrc-2023Q4-base:1.8
	pkgsrc-2023Q3:1.8.0.28
	pkgsrc-2023Q3-base:1.8
	pkgsrc-2023Q2:1.8.0.26
	pkgsrc-2023Q2-base:1.8
	pkgsrc-2023Q1:1.8.0.24
	pkgsrc-2023Q1-base:1.8
	pkgsrc-2022Q4:1.8.0.22
	pkgsrc-2022Q4-base:1.8
	pkgsrc-2022Q3:1.8.0.20
	pkgsrc-2022Q3-base:1.8
	pkgsrc-2022Q2:1.8.0.18
	pkgsrc-2022Q2-base:1.8
	pkgsrc-2022Q1:1.8.0.16
	pkgsrc-2022Q1-base:1.8
	pkgsrc-2021Q4:1.8.0.14
	pkgsrc-2021Q4-base:1.8
	pkgsrc-2021Q3:1.8.0.12
	pkgsrc-2021Q3-base:1.8
	pkgsrc-2021Q2:1.8.0.10
	pkgsrc-2021Q2-base:1.8
	pkgsrc-2021Q1:1.8.0.8
	pkgsrc-2021Q1-base:1.8
	pkgsrc-2020Q4:1.8.0.6
	pkgsrc-2020Q4-base:1.8
	pkgsrc-2020Q3:1.8.0.4
	pkgsrc-2020Q3-base:1.8
	pkgsrc-2020Q2:1.8.0.2
	pkgsrc-2020Q2-base:1.8
	pkgsrc-2020Q1:1.7.0.4
	pkgsrc-2020Q1-base:1.7
	pkgsrc-2019Q4:1.7.0.6
	pkgsrc-2019Q4-base:1.7
	pkgsrc-2019Q3:1.7.0.2
	pkgsrc-2019Q3-base:1.7
	libarchive-3-4-0:1.1.1.9
	libarchive-3-3-3:1.1.1.8
	pkgsrc-2019Q2:1.6.0.2
	pkgsrc-2019Q2-base:1.6
	pkgsrc-2019Q1:1.5.0.16
	pkgsrc-2019Q1-base:1.5
	pkgsrc-2018Q4:1.5.0.14
	pkgsrc-2018Q4-base:1.5
	pkgsrc-2018Q3:1.5.0.12
	pkgsrc-2018Q3-base:1.5
	pkgsrc-2018Q2:1.5.0.10
	pkgsrc-2018Q2-base:1.5
	pkgsrc-2018Q1:1.5.0.8
	pkgsrc-2018Q1-base:1.5
	pkgsrc-2017Q4:1.5.0.6
	pkgsrc-2017Q4-base:1.5
	pkgsrc-2017Q3:1.5.0.4
	pkgsrc-2017Q3-base:1.5
	libarchive-3-3-2:1.1.1.7
	pkgsrc-2017Q2:1.4.0.4
	pkgsrc-2017Q2-base:1.4
	pkgsrc-2017Q1:1.4.0.2
	pkgsrc-2017Q1-base:1.4
	libarchive-3-3-1:1.1.1.6
	pkgsrc-2016Q4:1.3.0.6
	pkgsrc-2016Q4-base:1.3
	pkgsrc-2016Q3:1.3.0.4
	pkgsrc-2016Q3-base:1.3
	pkgsrc-2016Q2:1.3.0.2
	pkgsrc-2016Q2-base:1.3
	libarchive-3-2-1:1.1.1.5
	pkgsrc-2016Q1:1.2.0.10
	pkgsrc-2016Q1-base:1.2
	pkgsrc-2015Q4:1.2.0.8
	pkgsrc-2015Q4-base:1.2
	pkgsrc-2015Q3:1.2.0.6
	pkgsrc-2015Q3-base:1.2
	pkgsrc-2015Q2:1.2.0.4
	pkgsrc-2015Q2-base:1.2
	pkgsrc-2015Q1:1.2.0.2
	pkgsrc-2015Q1-base:1.2
	pkgsrc-2014Q4:1.1.1.4.0.36
	pkgsrc-2014Q4-base:1.1.1.4
	pkgsrc-2014Q3:1.1.1.4.0.34
	pkgsrc-2014Q3-base:1.1.1.4
	pkgsrc-2014Q2:1.1.1.4.0.32
	pkgsrc-2014Q2-base:1.1.1.4
	pkgsrc-2014Q1:1.1.1.4.0.30
	pkgsrc-2014Q1-base:1.1.1.4
	pkgsrc-2013Q4:1.1.1.4.0.28
	pkgsrc-2013Q4-base:1.1.1.4
	pkgsrc-2013Q3:1.1.1.4.0.26
	pkgsrc-2013Q3-base:1.1.1.4
	pkgsrc-2013Q2:1.1.1.4.0.24
	pkgsrc-2013Q2-base:1.1.1.4
	pkgsrc-2013Q1:1.1.1.4.0.22
	pkgsrc-2013Q1-base:1.1.1.4
	pkgsrc-2012Q4:1.1.1.4.0.20
	pkgsrc-2012Q4-base:1.1.1.4
	pkgsrc-2012Q3:1.1.1.4.0.18
	pkgsrc-2012Q3-base:1.1.1.4
	pkgsrc-2012Q2:1.1.1.4.0.16
	pkgsrc-2012Q2-base:1.1.1.4
	pkgsrc-2012Q1:1.1.1.4.0.14
	pkgsrc-2012Q1-base:1.1.1.4
	pkgsrc-2011Q4:1.1.1.4.0.12
	pkgsrc-2011Q4-base:1.1.1.4
	pkgsrc-2011Q3:1.1.1.4.0.10
	pkgsrc-2011Q3-base:1.1.1.4
	pkgsrc-2011Q2:1.1.1.4.0.8
	pkgsrc-2011Q2-base:1.1.1.4
	pkgsrc-2011Q1:1.1.1.4.0.6
	pkgsrc-2011Q1-base:1.1.1.4
	pkgsrc-2010Q4:1.1.1.4.0.4
	pkgsrc-2010Q4-base:1.1.1.4
	pkgsrc-2010Q3:1.1.1.4.0.2
	pkgsrc-2010Q3-base:1.1.1.4
	libarchive-2-8-4:1.1.1.4
	pkgsrc-2010Q2:1.1.1.3.0.4
	pkgsrc-2010Q2-base:1.1.1.3
	pkgsrc-2010Q1:1.1.1.3.0.2
	pkgsrc-2010Q1-base:1.1.1.3
	libarchive-2-8-3:1.1.1.3
	libarchive-2-8-2:1.1.1.2
	libarchive-2-8-0:1.1.1.1
	KIENTZLE:1.1.1;
locks; strict;
comment	@# @;


1.23
date	2026.06.24.06.29.51;	author adam;	state Exp;
branches;
next	1.22;
commitid	keXVOnvWIwV061LG;

1.22
date	2026.04.15.08.46.34;	author adam;	state Exp;
branches;
next	1.21;
commitid	pL26mrnh4kOo62CG;

1.21
date	2026.03.26.11.20.05;	author adam;	state Exp;
branches;
next	1.20;
commitid	8pSUUUHFeJu1BtzG;

1.20
date	2026.01.06.11.55.22;	author adam;	state Exp;
branches;
next	1.19;
commitid	lOosf75XWhczkkpG;

1.19
date	2025.12.23.14.01.22;	author adam;	state Exp;
branches;
next	1.18;
commitid	3zKcl3VhUVXFtxnG;

1.18
date	2025.11.20.06.08.25;	author adam;	state Exp;
branches;
next	1.17;
commitid	kB7NF5kSlmUaVfjG;

1.17
date	2025.11.02.08.52.12;	author adam;	state Exp;
branches;
next	1.16;
commitid	hdaVwMAEUWR8pXgG;

1.16
date	2025.07.01.15.14.43;	author adam;	state Exp;
branches;
next	1.15;
commitid	sA2cBFYBXpUBv31G;

1.15
date	2025.05.21.15.25.49;	author adam;	state Exp;
branches;
next	1.14;
commitid	6aTN21WjRYk8TMVF;

1.14
date	2025.04.28.10.31.33;	author adam;	state Exp;
branches;
next	1.13;
commitid	Tocq615J6mYPZNSF;

1.13
date	2024.10.19.05.39.56;	author adam;	state Exp;
branches;
next	1.12;
commitid	fYRSlpIWMYluweuF;

1.12
date	2024.09.15.07.02.18;	author adam;	state Exp;
branches;
next	1.11;
commitid	x365AQIKhret4SpF;

1.11
date	2024.04.30.06.05.18;	author adam;	state Exp;
branches;
next	1.10;
commitid	id0E8i4RwCC4c88F;

1.10
date	2024.04.12.15.39.48;	author adam;	state Exp;
branches;
next	1.9;
commitid	52ilmjFHKDf0XR5F;

1.9
date	2024.01.18.18.00.14;	author adam;	state Exp;
branches;
next	1.8;
commitid	hNXpsHx3SuHqsXUE;

1.8
date	2020.05.26.09.16.40;	author nia;	state Exp;
branches;
next	1.7;
commitid	nNhsdZACz3PjmJ9C;

1.7
date	2019.09.22.09.55.07;	author joerg;	state Exp;
branches;
next	1.6;
commitid	FdPvRjF4OzwBwZDB;

1.6
date	2019.04.10.08.24.05;	author adam;	state Exp;
branches;
next	1.5;
commitid	LnliQ9ieqYkikMiB;

1.5
date	2017.08.01.22.26.22;	author joerg;	state Exp;
branches;
next	1.4;
commitid	32clTfkmVE8bPy1A;

1.4
date	2017.02.25.21.11.19;	author joerg;	state Exp;
branches;
next	1.3;
commitid	rW8QfCWrsCO1snHz;

1.3
date	2016.06.20.17.24.56;	author joerg;	state Exp;
branches;
next	1.2;
commitid	ArUvympBjfBseebz;

1.2
date	2015.01.17.12.44.49;	author adam;	state Exp;
branches;
next	1.1;
commitid	yy7e1hLrfmA2pn6y;

1.1
date	2010.02.20.03.49.44;	author joerg;	state Exp;
branches
	1.1.1.1;
next	;

1.1.1.1
date	2010.02.20.03.49.44;	author joerg;	state Exp;
branches;
next	1.1.1.2;

1.1.1.2
date	2010.03.14.17.57.25;	author joerg;	state Exp;
branches;
next	1.1.1.3;

1.1.1.3
date	2010.03.16.17.07.04;	author joerg;	state Exp;
branches;
next	1.1.1.4;

1.1.1.4
date	2010.07.09.11.53.34;	author joerg;	state Exp;
branches;
next	1.1.1.5;

1.1.1.5
date	2016.06.20.17.11.52;	author joerg;	state Exp;
branches;
next	1.1.1.6;
commitid	rRgm3BqbmbI8aebz;

1.1.1.6
date	2017.02.25.20.54.24;	author joerg;	state Exp;
branches;
next	1.1.1.7;
commitid	ReqPI0ibLYjdmnHz;

1.1.1.7
date	2017.08.01.22.21.11;	author joerg;	state Exp;
branches;
next	1.1.1.8;
commitid	XQwPAFJku336Ny1A;

1.1.1.8
date	2019.09.22.09.47.04;	author joerg;	state Exp;
branches;
next	1.1.1.9;
commitid	N0KxAXOYyULduZDB;

1.1.1.9
date	2019.09.22.09.51.33;	author joerg;	state Exp;
branches;
next	1.1.1.10;
commitid	5kDbfPbiV3INvZDB;

1.1.1.10
date	2024.01.18.17.37.45;	author adam;	state Exp;
branches;
next	1.1.1.11;
commitid	zDULEPUODGjTkXUE;

1.1.1.11
date	2024.04.12.15.27.44;	author adam;	state Exp;
branches;
next	1.1.1.12;
commitid	tQWTddCoxBumSR5F;

1.1.1.12
date	2024.04.30.05.50.49;	author adam;	state Exp;
branches;
next	1.1.1.13;
commitid	e4DnFoZdQV9Z688F;

1.1.1.13
date	2024.09.15.06.45.25;	author adam;	state Exp;
branches;
next	1.1.1.14;
commitid	pOuXKsbh8iPCYRpF;

1.1.1.14
date	2024.10.19.05.27.34;	author adam;	state Exp;
branches;
next	1.1.1.15;
commitid	v1iXM4j1Na52seuF;

1.1.1.15
date	2025.04.28.09.44.10;	author adam;	state Exp;
branches;
next	1.1.1.16;
commitid	1zB7ffc4d2qCJNSF;

1.1.1.16
date	2025.05.21.15.11.28;	author adam;	state Exp;
branches;
next	1.1.1.17;
commitid	Nzqt2UgtvkVXNMVF;

1.1.1.17
date	2025.07.01.14.58.53;	author adam;	state Exp;
branches;
next	1.1.1.18;
commitid	wKXYoBc9F9j8q31G;

1.1.1.18
date	2025.11.02.08.32.34;	author adam;	state Exp;
branches;
next	1.1.1.19;
commitid	8C56Xg3dc0HriXgG;

1.1.1.19
date	2025.11.20.05.51.45;	author adam;	state Exp;
branches;
next	1.1.1.20;
commitid	LC6NMc2P0QpnPfjG;

1.1.1.20
date	2025.12.23.13.41.06;	author adam;	state Exp;
branches;
next	1.1.1.21;
commitid	hhQbXTytJ7PFmxnG;

1.1.1.21
date	2026.01.06.11.43.29;	author adam;	state Exp;
branches;
next	1.1.1.22;
commitid	Q4rjOheYoLWofkpG;

1.1.1.22
date	2026.03.26.11.11.16;	author adam;	state Exp;
branches;
next	1.1.1.23;
commitid	P6u0vpfNBymXxtzG;

1.1.1.23
date	2026.04.15.08.40.11;	author adam;	state Exp;
branches;
next	1.1.1.24;
commitid	enlkxxj5Vxhi42CG;

1.1.1.24
date	2026.06.24.05.39.01;	author adam;	state Exp;
branches;
next	;
commitid	zmhI9f4umm2AO0LG;


desc
@@


1.23
log
@libarchive: updated to 3.8.8

Libarchive 3.8.8 is a security, bugfix and minor feature release.

New features:

add support for reading encrypted zipx formats (bzip2, lzma, ppmd, xz, zstd)

Fix overview:
https://github.com/libarchive/libarchive/releases/tag/v3.8.8
@
text
@<!-- Creator     : groff version 1.23.0 -->
<!-- CreationDate: Tue Jun 23 09:58:13 2026 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta name="generator" content="groff -Thtml, see www.gnu.org">
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<meta name="Content-Style" content="text/css">
<style type="text/css">
       p       { margin-top: 0; margin-bottom: 0; vertical-align: top }
       pre     { margin-top: 0; margin-bottom: 0; vertical-align: top }
       table   { margin-top: 0; margin-bottom: 0; vertical-align: top }
       h1      { text-align: center }
</style>
<title></title>
</head>
<body>

<hr>


<p><i>ARCHIVE_WRITE_DISK</i>(3) Library Functions Manual
<i>ARCHIVE_WRITE_DISK</i>(3)</p>

<p style="margin-top: 1em"><b>NAME</b></p>

<p style="margin-left:9%;">archive_write_disk_new,
archive_write_disk_set_options,
archive_write_disk_set_skip_file,
archive_write_disk_set_group_lookup,
archive_write_disk_set_standard_lookup,
archive_write_disk_set_user_lookup &mdash; functions for
creating objects on disk</p>

<p style="margin-top: 1em"><b>LIBRARY</b></p>

<p style="margin-left:9%;">Streaming Archive Library
(libarchive, -larchive)</p>

<p style="margin-top: 1em"><b>SYNOPSIS</b></p>

<p style="margin-left:9%;"><b>#include
&lt;archive.h&gt;</b></p>

<p style="margin-left:9%; margin-top: 1em"><i>struct
archive *</i></p>


<p style="margin-left:14%;"><b>archive_write_disk_new</b>(<i>void</i>);</p>

<p style="margin-left:9%; margin-top: 1em"><i>int</i></p>


<p style="margin-left:14%;"><b>archive_write_disk_set_options</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>int&nbsp;flags</i>);</p>

<p style="margin-left:9%; margin-top: 1em"><i>int</i></p>


<p style="margin-left:14%;"><b>archive_write_disk_set_skip_file</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>dev_t</i>, <i>ino_t</i>);</p>

<p style="margin-left:9%; margin-top: 1em"><i>int</i></p>


<p><b>archive_write_disk_set_group_lookup</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>void&nbsp;*</i>,
<i>gid_t&nbsp;(*)(void&nbsp;*,&nbsp;const&nbsp;char&nbsp;*gname,&nbsp;gid_t&nbsp;gid)</i>,
<i>void&nbsp;(*cleanup)(void&nbsp;*)</i>);</p>

<p style="margin-left:9%; margin-top: 1em"><i>int</i></p>


<p style="margin-left:14%;"><b>archive_write_disk_set_standard_lookup</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>

<p style="margin-left:9%; margin-top: 1em"><i>int</i></p>


<p><b>archive_write_disk_set_user_lookup</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>void&nbsp;*</i>,
<i>uid_t&nbsp;(*)(void&nbsp;*,&nbsp;const&nbsp;char&nbsp;*uname,&nbsp;uid_t&nbsp;uid)</i>,
<i>void&nbsp;(*cleanup)(void&nbsp;*)</i>);</p>

<p style="margin-top: 1em"><b>DESCRIPTION</b></p>

<p style="margin-left:9%;">These functions provide a
complete API for creating objects on disk from struct
archive_entry descriptions. They are most naturally used
when extracting objects from an archive using the
<b>archive_read</b>() interface. The general process is to
read struct archive_entry objects from an archive, then
write those objects to a struct archive object created using
the <b>archive_write_disk</b>() family functions. This
interface is deliberately very similar to the
<b>archive_write</b>() interface used to write objects to a
streaming archive.</p>


<p style="margin-top: 1em"><b>archive_write_disk_new</b>()</p>

<p style="margin-left:19%;">Allocates and initializes a
struct archive object suitable for writing objects to
disk.</p>


<p style="margin-top: 1em"><b>archive_write_disk_set_skip_file</b>()</p>

<p style="margin-left:19%;">Records the device and inode
numbers of a file that should not be overwritten. This is
typically used to ensure that an extraction process does not
overwrite the archive from which objects are being read.
This capability is technically unnecessary but can be a
significant performance optimization in practice.</p>


<p style="margin-top: 1em"><b>archive_write_disk_set_options</b>()</p>

<p style="margin-left:19%;">The options field consists of a
bitwise OR of one or more of the following values:</p>

<p><b>ARCHIVE_EXTRACT_ACL</b></p>

<p style="margin-left:29%;">Attempt to restore Access
Control Lists. By default, extended ACLs are ignored.</p>

<p><b>ARCHIVE_EXTRACT_CLEAR_NOCHANGE_FFLAGS</b></p>

<p style="margin-left:29%;">Before removing a file system
object prior to replacing it, clear platform-specific file
flags which might prevent its removal.</p>

<p><b>ARCHIVE_EXTRACT_FFLAGS</b></p>

<p style="margin-left:29%;">Attempt to restore file
attributes (file flags). By default, file attributes are
ignored. See <i>chattr</i>(1) (Linux) or <i>chflags</i>(1)
(FreeBSD, Mac OS X) for more information on file
attributes.</p>

<p><b>ARCHIVE_EXTRACT_MAC_METADATA</b></p>

<p style="margin-left:29%;">Mac OS X specific. Restore
metadata using <i>copyfile</i>(3). By default,
<i>copyfile</i>(3) metadata is ignored.</p>

<p><b>ARCHIVE_EXTRACT_NO_OVERWRITE</b></p>

<p style="margin-left:29%;">Existing files on disk will not
be overwritten. By default, existing regular files are
truncated and overwritten; existing directories will have
their permissions updated; other pre-existing objects are
unlinked and recreated from scratch.</p>

<p><b>ARCHIVE_EXTRACT_OWNER</b></p>

<p style="margin-left:29%;">The user and group IDs should
be set on the restored file. By default, the user and group
IDs are not restored.</p>

<p><b>ARCHIVE_EXTRACT_PERM</b></p>

<p style="margin-left:29%;">Full permissions (including
SGID, SUID, and sticky bits) should be restored exactly as
specified, without obeying the current umask. Note that SUID
and SGID bits can only be restored if the user and group ID
of the object on disk are correct. If
<b>ARCHIVE_EXTRACT_OWNER</b> is not specified, then SUID and
SGID bits will only be restored if the default user and
group IDs of newly-created objects on disk happen to match
those specified in the archive entry. By default, only basic
permissions are restored, and umask is obeyed.</p>

<p><b>ARCHIVE_EXTRACT_SAFE_WRITES</b></p>

<p style="margin-left:29%;">Extract files atomically, by
first creating a unique temporary file and then renaming it
to its required destination name. This avoids a race where
an application might see a partial file (or no file) during
extraction.</p>

<p><b>ARCHIVE_EXTRACT_SECURE_NOABSOLUTEPATHS</b></p>

<p style="margin-left:29%;">Refuse to extract an absolute
path. The default is to not refuse such paths.</p>

<p><b>ARCHIVE_EXTRACT_SECURE_NODOTDOT</b></p>

<p style="margin-left:29%;">Refuse to extract a path that
contains a <i>..</i> element anywhere within it. The default
is to not refuse such paths. Note that paths ending in
<i>..</i> always cause an error, regardless of this
flag.</p>

<p><b>ARCHIVE_EXTRACT_SECURE_SYMLINKS</b></p>

<p style="margin-left:29%;">Refuse to extract any object
whose final location would be altered by a symlink on disk.
This is intended to help guard against a variety of mischief
caused by archives that (deliberately or otherwise) extract
files outside of the current directory. The default is not
to perform this check. If <b>ARCHIVE_EXTRACT_UNLINK</b> is
specified together with this option, the library will remove
any intermediate symlinks it finds and return an error only
if such symlink could not be removed.</p>

<p><b>ARCHIVE_EXTRACT_SPARSE</b></p>

<p style="margin-left:29%;">Scan data for blocks of NUL
bytes and try to recreate them with holes. This results in
sparse files, independent of whether the archive format
supports or uses them.</p>

<p><b>ARCHIVE_EXTRACT_TIME</b></p>

<p style="margin-left:29%;">The timestamps (mtime, ctime,
and atime) should be restored. By default, they are ignored.
Note that restoring of atime is not currently supported.</p>

<p><b>ARCHIVE_EXTRACT_UNLINK</b></p>

<p style="margin-left:29%;">Existing files on disk will be
unlinked before any attempt to create them. In some cases,
this can prove to be a significant performance improvement.
By default, existing files are truncated and rewritten, but
the file is not recreated. In particular, the default
behavior does not break existing hard links.</p>

<p><b>ARCHIVE_EXTRACT_XATTR</b></p>

<p style="margin-left:29%;">Attempt to restore extended
file attributes. By default, they are ignored. See
<i>xattr</i>(7) (Linux), <i>xattr</i>(2) (Mac OS X), or
<i>getextattr</i>(8) (FreeBSD) for more information on
extended file attributes.</p>


<p style="margin-top: 1em"><b>archive_write_disk_set_group_lookup</b>(),
<b>archive_write_disk_set_user_lookup</b>()</p>

<p style="margin-left:19%;">The struct archive_entry
objects contain both names and ids that can be used to
identify users and groups. These names and ids describe the
ownership of the file itself and also appear in ACL lists.
By default, the library uses the ids and ignores the names,
but this can be overridden by registering user and group
lookup functions. To register, you must provide a lookup
function which accepts both a name and id and returns a
suitable id. You may also provide a void * pointer to a
private data structure and a cleanup function for that data.
The cleanup function will be invoked when the struct archive
object is destroyed.</p>


<p style="margin-top: 1em"><b>archive_write_disk_set_standard_lookup</b>()</p>

<p style="margin-left:19%;">This convenience function
installs a standard set of user and group lookup functions.
These functions use <i>getpwnam</i>(3) and
<i>getgrnam</i>(3) to convert names to ids, defaulting to
the ids if the names cannot be looked up. These functions
also implement a simple memory cache to reduce the number of
calls to <i>getpwnam</i>(3) and <i>getgrnam</i>(3).</p>

<p style="margin-left:9%;">More information about the
<i>struct archive</i> object and the overall design of the
library can be found in the <i>libarchive</i>(3) overview.
Many of these functions are also documented under
<i>archive_write</i>(3).</p>

<p style="margin-top: 1em"><b>RETURN VALUES</b></p>

<p style="margin-left:9%;">Most functions return
<b>ARCHIVE_OK</b> (zero) on success, or one of several
non-zero error codes for errors. Specific error codes
include: <b>ARCHIVE_RETRY</b> for operations that might
succeed if retried, <b>ARCHIVE_WARN</b> for unusual
conditions that do not prevent further operations, and
<b>ARCHIVE_FATAL</b> for serious errors that make remaining
operations impossible.</p>


<p style="margin-left:9%; margin-top: 1em"><b>archive_write_disk_new</b>()
returns a pointer to a newly-allocated struct archive
object.</p>


<p style="margin-left:9%; margin-top: 1em"><b>archive_write_data</b>()
returns a count of the number of bytes actually written, or
<b>-1</b> on error.</p>

<p style="margin-top: 1em"><b>ERRORS</b></p>

<p style="margin-left:9%;">Detailed error codes and textual
descriptions are available from the <b>archive_errno</b>()
and <b>archive_error_string</b>() functions.</p>

<p style="margin-top: 1em"><b>SEE ALSO</b></p>

<p style="margin-left:9%;"><i>tar</i>(1),
<i>archive_read</i>(3), <i>archive_write</i>(3),
<i>libarchive</i>(3)</p>

<p style="margin-top: 1em"><b>HISTORY</b></p>

<p style="margin-left:9%;">The <b>libarchive</b> library
first appeared in FreeBSD&nbsp;5.3. The
<b>archive_write_disk</b> interface was added to
<b>libarchive 2.0</b> and first appeared in
FreeBSD&nbsp;6.3.</p>

<p style="margin-top: 1em"><b>AUTHORS</b></p>

<p style="margin-left:9%;">The <b>libarchive</b> library
was written by Tim Kientzle &lt;kientzle@@acm.org&gt;.</p>

<p style="margin-top: 1em"><b>BUGS</b></p>

<p style="margin-left:9%;">Directories are actually
extracted in two distinct phases. Directories are created
during <b>archive_write_header</b>(), but final permissions
are not set until <b>archive_write_close</b>(). This
separation is necessary to correctly handle borderline cases
such as a non-writable directory containing files, but can
cause unexpected results. In particular, directory
permissions are not fully restored until the archive is
closed. If you use <i>chdir</i>(2) to change the current
directory between calls to <b>archive_read_extract</b>() or
before calling <b>archive_read_close</b>(), you may confuse
the permission-setting logic with the result that directory
permissions are restored incorrectly.</p>

<p style="margin-left:9%; margin-top: 1em">The library
attempts to create objects with filenames longer than
<b>PATH_MAX</b> by creating prefixes of the full path and
changing the current directory. Currently, this logic is
limited in scope; the fixup pass does not work correctly for
such objects and the symlink security check option disables
the support for very long pathnames.</p>

<p style="margin-left:9%; margin-top: 1em">Restoring the
path <i>aa/../bb</i> does create each intermediate
directory. In particular, the directory <i>aa</i> is created
as well as the final object <i>bb</i>. In theory, this can
be exploited to create an entire directory hierarchy with a
single request. Of course, this does not work if the
<b>ARCHIVE_EXTRACT_NODOTDOT</b> option is specified.</p>

<p style="margin-left:9%; margin-top: 1em">Implicit
directories are always created obeying the current umask.
Explicit objects are created obeying the current umask
unless <b>ARCHIVE_EXTRACT_PERM</b> is specified, in which
case they current umask is ignored.</p>

<p style="margin-left:9%; margin-top: 1em">SGID and SUID
bits are restored only if the correct user and group could
be set. If <b>ARCHIVE_EXTRACT_OWNER</b> is not specified,
then no attempt is made to set the ownership. In this case,
SGID and SUID bits are restored only if the user and group
of the final object happen to match those specified in the
entry.</p>

<p style="margin-left:9%; margin-top: 1em">The
&ldquo;standard&rdquo; user-id and group-id lookup functions
are not the defaults because <i>getgrnam</i>(3) and
<i>getpwnam</i>(3) are sometimes too large for particular
applications. The current design allows the application
author to use a more compact implementation when
appropriate.</p>

<p style="margin-left:9%; margin-top: 1em">There should be
a corresponding <b>archive_read_disk</b> interface that
walks a directory hierarchy and returns archive entry
objects. Debian January 19, 2020
<i>ARCHIVE_WRITE_DISK</i>(3)</p>
<hr>
</body>
</html>
@


1.22
log
@libarchive: updated to 3.8.7

Libarchive 3.8.7 is a security and bugfix release.

Notable fixes:

CAB: fix NULL pointer dereference during skip
CAB: Fix Heap OOB Write in CAB LZX decoder
cpio: various fixes and improvements
contrib/untar: fix out-of-bounds read
iso9660: fix undefined behavior
iso9660: fix posibble heap buffer overflow on 32-bit systems
libarchive: fix handling of option failures
libarchive: do not continue with truncated numbers
libarchive: lzop and grzip filter support
RAR: fix LZSS window size mismatch after PPMd block
@
text
@d2 1
a2 1
<!-- CreationDate: Mon Apr 13 12:57:34 2026 -->
@


1.21
log
@libarchive: updated to 3.8.6

Libarchive 3.8.6 is a security and bugfix release.

Notable fixes:

libarchive: fix incompatibility with Nettle 4.x
libarchive: fix NULL pointer dereference in archive_acl_from_text_w()
bsdunzip: fix ISO week year and Gregorian year confusion
7zip: ix SEGV in check_7zip_header_in_sfx via ELF offset validation
7zip: fix out-of-bounds access on ELF 64-bit header
RAR5 reader: fix infinite loop in rar5 decompression
RAR5 reader: fix potential memory leak
RAR5: fix SIGSEGV when archive_read_support_format_rar5 is called twice
CAB reader: fix memory leak on repeated calls to archive_read_support_format_cab
mtree reader: Fix file descriptor leak in mtree parser cleanup
various small bugfixes in code and documentation
@
text
@d2 1
a2 1
<!-- CreationDate: Tue Mar 10 09:57:28 2026 -->
@


1.20
log
@libarchive: updated to 3.8.5

3.8.5

Notable bugxies:

bsdtar: fix regression from 3.8.4 zero-length pattern issue bugfix
various small bugfixes in code and documentation
@
text
@d2 1
a2 1
<!-- CreationDate: Mon Jan  5 10:42:44 2026 -->
@


1.19
log
@libarchive: updated to 3.8.4

3.8.4

Notable bugxies:

bsdtar: Fix zero-length pattern issue
lib: Fix regression introduced in libarchive 3.8.2 when walking enterable but unreadable directories
@
text
@d2 1
a2 1
<!-- CreationDate: Mon Dec  1 12:42:38 2025 -->
@


1.18
log
@libarchive: updated to 3.8.3

Libarchive 3.8.3 is a bugfix and security release.

Security fixes:

lib: Create temporary files in the target directory
lha: Fix for an out-of-bounds buffer overrun when using p[H_LEVEL_OFFSET]
7-zip: Fix a buffer overrun when reading truncated 7zip headers

Notable bugxies:

lz4 and zstd: Support both lz4 and zstd data with leading skippable frames
@
text
@d2 1
a2 1
<!-- CreationDate: Mon Nov 17 22:19:02 2025 -->
@


1.17
log
@libarchive: updated to 3.8.2

Libarchive 3.8.2 is a bugfix and security release.

Security fixes:

7zip: Fix out of boundary access
tar reader: fix checking the result of the strftime

Notable bugfixes:

bsdtar: Allow filename to have CRLF endings
lib: archive_read_data: handle sparse holes at end of file correctly
lib: improve filter process handling
lib: fix error checking in writing files
lib: handle possible errors from system calls
lib: avoid leaking file descriptors into subprocesses
lib: parse_date: handle dates in 2038 and beyond if time_t is big enough
RAR5 reader: fix multiple issues in extra field parsing function
RAR5 reader: early fail when file declares data for a dir entry
tar writer: fix replacing a regular file with a dir for ARCHIVE_EXTRACT_SAFE_WRITES
tar reader (Windows): check WCS pathname in header_gnutar before overwriting
tar reader: fix an infinite loop when parsing V headers
zip writer: fix a memory leak if write callback error early
zip writer: fix writing with ZSTD compression
zstd write filter: enable Zstandard's checksum feature
@
text
@d2 1
a2 1
<!-- CreationDate: Wed Oct 15 21:49:46 2025 -->
@


1.16
log
@libarchive: updated to 3.8.1

3.8.1

Important bugfixes

various compilation fixes
fixed undefined behavior in a function in warc reader
Windows binary uses xz 5.2.5
@
text
@d2 1
a2 1
<!-- CreationDate: Sun Jun  1 19:29:40 2025 -->
@


1.15
log
@libarchive bsdtar: updated to 3.8.0

Libarchive 3.8.0 is a feature and bugfix release.

New features:
bsdtar: support --mtime and --clamp-mtime
lib: mbedtls 3.x compatibility
7-zip reader: improve self-extracting archive detection
xar: xmllite support for the XAR reader and writer
zip writer: added XZ, LZMA, ZSTD and BZIP2 support
zip writer: added LZMA + RISCV BCJ filter

Notable security fixes:
rar: do not skip past EOF while reading
rar: fix double free with over 4 billion nodes
rar: fix heap-buffer-overflow
warc: prevent signed integer overflow
tar: fix overflow in build_ustar_entry

Notable bugfixes:
bsdtar: don't hardlink negative inode files together
gz: allow setting the original filename for gzip compressed files
lib: improve lseek handling
lib: support @@-prefixed Unix epoch timestamps as date strings
rar: support large headers on 32 bit systems
tar reader: Improve LFS support on 32 bit systems
@
text
@d2 1
a2 1
<!-- CreationDate: Tue May 20 09:02:19 2025 -->
@


1.14
log
@bsdtar libarchive: updated to 3.7.9

3.7.9

Important bugfixes:

a regression in libarchive 3.7.8 regarding GNU sparse entries was fixed


3.7.8

Security fixes:

tar reader: Handle truncation in the middle of a GNU long linkname
unzip: fix null pointer dereference
tar reader: fix unchecked return value in list_item_verbose()

Important bugfixes:

7zip reader: add SPARC
tar reader: Ignore ustar size when pax size is present
tar writer: Fix bug when -s/a/b/ used more than once with b flag
cpio: Fix a Y2038 bug on Windows
libarchive: Handle ARCHIVE_FILTER_LZOP in archive_read_append_filter
libarchive: Adding missing seeker function to archive_read_open_FILE()
@
text
@d2 1
a2 1
<!-- CreationDate: Sun Mar 30 20:07:37 2025 -->
@


1.13
log
@libarchive: updated to 3.7.7

Libarchive 3.7.7 is a bugfix and security release

Security fixes:

gzip: prevent a hang when processing a malformed gzip inside a gzip
tar: don't crash on truncated tar archives
tar: fix two leaks in tar header parsing

Important bugfixes:

7-zip: read/write symlink paths as UTF-8
cpio: exit with an error code if an entry could not be extracted
rar5: report encrypted entries
tar: fix truncation of entry pathnames in specific archives
windows: fix ARCHIVE_EXTRACT_SECURE_NOABSOLUTEPATHS


Libarchive 3.7.6 is a bugfix and security release.
This release fixes a tar regression introduced in libarchive 3.7.5

Important bugfixes.

tar: clean up linkpath between entries
tar: fix memory leaks when processing symlinks or parsing pax headers
iso: be more cautious about parsing ISO-9660 timestamps
@
text
@d2 1
a2 1
<!-- CreationDate: Sun Oct 13 08:12:09 2024 -->
@


1.12
log
@libarchive: updated to 3.7.5

Libarchive 3.7.5

Security fixes:

fix multiple vulnerabilities identified by SAST
cpio: ignore out-of-range gid/uid/size/ino and harden AFIO parsing
lzop: prevent integer overflow
rar4: protect copy_from_lzss_window_to_unp()
rar4: fix CVE-2024-26256
rar4: fix OOB in delta and audio filter
rar4: fix out of boundary access with large files
rar4: add boundary checks to rgb filter
rar4: fix OOB access with unicode filenames
rar5: clear 'data ready' cache on window buffer reallocs
rpm: calculate huge header sizes correctly
unzip: unify EOF handling
util: fix out of boundary access in mktemp functions
uu: stop processing if lines are too long

Important bugfixes:

7zip: fix issue when skipping first file in 7zip archive that is a multiple of 65536 bytes
ar: fix archive entries having no type
lha: do not allow negative file sizes
lha: fix integer truncation on 32-bit systems
shar: check strdup return value
rar5: don't try to read rediculously long names
xar: fix another infinite loop and expat error handling
many Windows fixes, cleanups and improvements
@
text
@d1 2
a2 2
<!-- Creator     : groff version 1.22.4 -->
<!-- CreationDate: Fri Sep 13 20:31:05 2024 -->
d23 2
a24 2
<p>ARCHIVE_WRITE_DISK(3) BSD Library Functions Manual
ARCHIVE_WRITE_DISK(3)</p>
d28 7
a34 7
<p style="margin-left:6%;"><b>archive_write_disk_new</b>,
<b>archive_write_disk_set_options</b>,
<b>archive_write_disk_set_skip_file</b>,
<b>archive_write_disk_set_group_lookup</b>,
<b>archive_write_disk_set_standard_lookup</b>,
<b>archive_write_disk_set_user_lookup</b> &mdash; functions
for creating objects on disk</p>
d38 1
a38 1
<p style="margin-left:6%;">Streaming Archive Library
d43 1
a43 1
<p style="margin-left:6%;"><b>#include
d46 1
a46 1
<p style="margin-left:6%; margin-top: 1em"><i>struct
d50 1
a50 1
<p style="margin-left:12%;"><b>archive_write_disk_new</b>(<i>void</i>);</p>
d52 1
a52 1
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
d55 1
a55 1
<p style="margin-left:12%;"><b>archive_write_disk_set_options</b>(<i>struct&nbsp;archive&nbsp;*</i>,
d58 1
a58 1
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
d61 1
a61 1
<p style="margin-left:12%;"><b>archive_write_disk_set_skip_file</b>(<i>struct&nbsp;archive&nbsp;*</i>,
d64 1
a64 1
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
d72 1
a72 1
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
d75 1
a75 1
<p style="margin-left:12%;"><b>archive_write_disk_set_standard_lookup</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
d77 1
a77 1
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
d87 1
a87 1
<p style="margin-left:6%;">These functions provide a
d102 1
a102 1
<p style="margin-left:17%;">Allocates and initializes a
d109 1
a109 1
<p style="margin-left:17%;">Records the device and inode
d119 1
a119 1
<p style="margin-left:17%;">The options field consists of a
d124 1
a124 1
<p style="margin-left:27%;">Attempt to restore Access
d129 1
a129 1
<p style="margin-left:27%;">Before removing a file system
d135 1
a135 1
<p style="margin-left:27%;">Attempt to restore file
d137 3
a139 2
ignored. See chattr(1) (Linux) or chflags(1) (FreeBSD, Mac
OS X) for more information on file attributes.</p>
d143 3
a145 3
<p style="margin-left:27%;">Mac OS X specific. Restore
metadata using copyfile(3). By default, copyfile(3) metadata
is ignored.</p>
d149 1
a149 1
<p style="margin-left:27%;">Existing files on disk will not
d157 1
a157 1
<p style="margin-left:27%;">The user and group IDs should
d163 1
a163 1
<p style="margin-left:27%;">Full permissions (including
d176 1
a176 1
<p style="margin-left:27%;">Extract files atomically, by
d184 1
a184 1
<p style="margin-left:27%;">Refuse to extract an absolute
d189 1
a189 1
<p style="margin-left:27%;">Refuse to extract a path that
d197 1
a197 1
<p style="margin-left:27%;">Refuse to extract any object
d209 1
a209 1
<p style="margin-left:27%;">Scan data for blocks of NUL
d216 1
a216 1
<p style="margin-left:27%;">The timestamps (mtime, ctime,
d222 1
a222 1
<p style="margin-left:27%;">Existing files on disk will be
d231 5
a235 4
<p style="margin-left:27%;">Attempt to restore extended
file attributes. By default, they are ignored. See xattr(7)
(Linux), xattr(2) (Mac OS X), or getextattr(8) (FreeBSD) for
more information on extended file attributes.</p>
d241 1
a241 1
<p style="margin-left:17%;">The struct archive_entry
d257 1
a257 1
<p style="margin-left:17%;">This convenience function
d259 5
a263 5
These functions use getpwnam(3) and getgrnam(3) to convert
names to ids, defaulting to the ids if the names cannot be
looked up. These functions also implement a simple memory
cache to reduce the number of calls to getpwnam(3) and
getgrnam(3).</p>
d265 1
a265 1
<p style="margin-left:6%;">More information about the
d267 3
a269 3
library can be found in the libarchive(3) overview. Many of
these functions are also documented under
archive_write(3).</p>
d273 1
a273 1
<p style="margin-left:6%;">Most functions return
d283 1
a283 1
<p style="margin-left:6%; margin-top: 1em"><b>archive_write_disk_new</b>()
d288 1
a288 1
<p style="margin-left:6%; margin-top: 1em"><b>archive_write_data</b>()
d290 1
a290 1
-1 on error.</p>
d294 1
a294 1
<p style="margin-left:6%;">Detailed error codes and textual
d300 3
a302 2
<p style="margin-left:6%;">tar(1), archive_read(3),
archive_write(3), libarchive(3)</p>
d306 1
a306 1
<p style="margin-left:6%;">The <b>libarchive</b> library
d314 1
a314 1
<p style="margin-left:6%;">The <b>libarchive</b> library
d319 1
a319 1
<p style="margin-left:6%;">Directories are actually
d327 4
a330 4
closed. If you use chdir(2) to change the current directory
between calls to <b>archive_read_extract</b>() or before
calling <b>archive_read_close</b>(), you may confuse the
permission-setting logic with the result that directory
d333 1
a333 1
<p style="margin-left:6%; margin-top: 1em">The library
d341 1
a341 1
<p style="margin-left:6%; margin-top: 1em">Restoring the
d349 1
a349 1
<p style="margin-left:6%; margin-top: 1em">Implicit
d355 1
a355 1
<p style="margin-left:6%; margin-top: 1em">SGID and SUID
d363 1
a363 1
<p style="margin-left:6%; margin-top: 1em">The
d365 5
a369 4
are not the defaults because getgrnam(3) and getpwnam(3) are
sometimes too large for particular applications. The current
design allows the application author to use a more compact
implementation when appropriate.</p>
d371 1
a371 1
<p style="margin-left:6%; margin-top: 1em">There should be
d374 2
a375 4
objects.</p>

<p style="margin-left:6%; margin-top: 1em">BSD
January&nbsp;19, 2020 BSD</p>
@


1.11
log
@libarchive: updated to 3.7.4

Libarchive 3.7.4 is a bugfix and security release

Security fixes:

rar: Fix OOB in rar e8 filter (CVE-2024-26256)
zip: Fix out of boundary access

Important bugfixes:

7zip: Limit amount of properties
bsdtar: Fix error handling around strtol() usages
passphrase: Improve newline handling on Windows
passphrase: Never allow empty passwords
rar: Fix "File CRC Error" when extracting specific rar4 archives
xar: Avoid infinite link loop
zip: Update AppleDouble support for directories
zstd: Implement core detection
@
text
@d2 1
a2 1
<!-- CreationDate: Fri Apr 26 09:23:46 2024 -->
@


1.10
log
@libarchive: updated to 3.7.3

Libarchive 3.7.3 is a feature, security and bugfix release.

New features:

PCRE2 support
add trailing letter b to bsdtar(1) substitute pattern
add support for long options "--group" and "--owner" to tar(1)

Security fixes:

Fix possible vulnerability in tar error reporting introduced in f27c173

Important bugfixes:

ISO9660: preserve the natural order of links
rar5: fix decoding unicode filenames on Windows
rar5: fix infinite loop if during rar5 decompression the last block produced no data
xz filter: fix incorrect eof at the end of an lzip member
zip: fix end-of-data marker processing when decompressing zip archives
multiple bsdunzip(1) fixes
filetime truncation fix on Windows
@
text
@d2 1
a2 1
<!-- CreationDate: Sun Apr  7 22:36:27 2024 -->
@


1.9
log
@libarchive: updated to 3.7.2

Libarchive 3.7.2 is a security, bugfix and feature release.

Security fixes:

Multiple vulnerabilities have been fixed in the PAX writer (1b4e0d0)
Important bugfixes:

bsdunzip(1) now correctly handles arguments following an -x after the zipfile
New features:

bsdunzip(1) now supports the "--version" flag
7-zip reader now translates Windows permissions into UNIX permissions
uudecode filter in raw mode now supports file name and file mode
zstd filter now supports the "long" write option


Libarchive 3.7.1 is a security, feature and bugfix release.

Security fixes:

SEGV and stack buffer overflow in verbose mode of cpio
Feature updates:

bsdunzip updated to match latest upstream code
Important bugfixes:

miscellaneous functional bugfixes
build fixes on multiple platforms


Libarchive 3.7.0 is a feature and bugfix release.

New features:

bsdunzip: new tool ported from FreeBSD
drop-in replacement for Info-ZIP unzip, not yet ported for Windows
7zip reader: support for Zstandard compression
7zip reader: support for ARM64 filter
zstd filter: support for multi-frame zstd archives
Other notable bugfixes and improvements:

pax: fix year 2038 problem on platforms with 64-bit time_t
Windows: Universal Windows Platform (UWP) fixes and improvements
Windows: bcrypt usage fixes and improvements
Windows: time function usage fixes and improvements
@
text
@d2 1
a2 1
<!-- CreationDate: Mon Sep 11 22:06:20 2023 -->
@


1.8
log
@libarchive: Update to 3.4.3

Libarchive 3.4.3 is a feature and bugfix release.

New features:

    support for pzstd compressed files (#1357)
    support for RHT.security.selinux tar extended attribute (#1348)

Important bugfixes:

    various zstd fixes and improvements (#1342 #1352 #1359)
    child process handling fixes (#1372)

Libarchive 3.4.2 is a feature and security release.

New features:

    support for atomic file extraction (bsdtar -x --safe-writes) (#1289)
    support for mbed TLS (PolarSSL) (#1301)

Important bugfixes:

    security fixes in RAR5 reader (#1280 #1326)
    compression buffer fix in XAR writer (#1317)
    fix uname and gname longer than 32 characters in PAX writer (#1319)
    fix segfault when archiving hard links in ISO9660 and XAR writers (#1325)
    fix support for extracting 7z archive entries with Delta filter (#987)

Libarchive 3.4.1 is a feature and security release.

New features:

    Unicode filename support for reading lha/lzh archives
    New pax write option "xattrhdr"

Important bugfixes:

    security fixes in wide string processing (#1276 #1298)
    security fixes in RAR5 reader (#1212 #1217 #1296)
    security fixes and optimizations to write filter logic (#351)
    security fix related to use of readlink(2) (1dae5a5)
    sparse file handling fixes (#1218 #1260)

Thanks to all contributors and bug reporters.
Special thanks to Christos Zoulas (@@zoulasc) from NetBSD for the atomic file extraction feature.
@
text
@d1 2
a2 2
<!-- Creator     : groff version 1.22.3 -->
<!-- CreationDate: Wed May 20 01:10:07 2020 -->
d201 4
a204 1
to perform this check. If</p>
d211 1
a211 4
supports or uses them. <b>ARCHIVE_EXTRACT_UNLINK</b> is
specified together with this option, the library will remove
any intermediate symlinks it finds and return an error only
if such symlink could not be removed.</p>
d361 5
a365 6
&rsquo;&rsquo;standard&rsquo;&rsquo; user-id and group-id
lookup functions are not the defaults because getgrnam(3)
and getpwnam(3) are sometimes too large for particular
applications. The current design allows the application
author to use a more compact implementation when
appropriate.</p>
@


1.7
log
@Update for libarchive-3.4.0:
- improvements for Android APK and JAR archives
- better support for non-recursive list and extract
- tar --exclude-vcs support
- fixes for file attributes and flags handling
- zipx support
- rar 5.0 reader
@
text
@d1 2
a2 2
<!-- Creator     : groff version 1.22.4 -->
<!-- CreationDate: Wed Jun 12 21:10:17 2019 -->
d173 8
d298 2
a299 2
<p style="margin-left:6%;">archive_read(3),
archive_write(3), tar(1), libarchive(3)</p>
d361 6
a366 5
&ldquo;standard&rdquo; user-id and group-id lookup functions
are not the defaults because getgrnam(3) and getpwnam(3) are
sometimes too large for particular applications. The current
design allows the application author to use a more compact
implementation when appropriate.</p>
d374 1
a374 1
April&nbsp;3, 2017 BSD</p>
@


1.6
log
@libarchive: updated to 3.3.3

libarchive 3.3.3:
Avoid super-linear slowdown on malformed mtree files
Many fixes for building with Visual Studio
NO_OVERWRITE doesn't change existing directory attributes
New support for Zstandard read and write filters
@
text
@d1 2
a2 2
<!-- Creator     : groff version 1.22.3 -->
<!-- CreationDate: Mon Sep  3 22:55:09 2018 -->
d353 5
a357 6
&rsquo;&rsquo;standard&rsquo;&rsquo; user-id and group-id
lookup functions are not the defaults because getgrnam(3)
and getpwnam(3) are sometimes too large for particular
applications. The current design allows the application
author to use a more compact implementation when
appropriate.</p>
@


1.5
log
@Merge for libarchive-3.3.2.
@
text
@d2 1
a2 1
<!-- CreationDate: Mon Jul 10 02:32:56 2017 -->
@


1.4
log
@Merge libarchive-3.3.1.
@
text
@d2 1
a2 1
<!-- CreationDate: Sat Feb 25 11:22:05 2017 -->
d33 2
a34 7
<b>archive_write_disk_set_user_lookup</b>,
<b>archive_write_header</b>, <b>archive_write_data</b>,
<b>archive_write_data_block</b>,
<b>archive_write_finish_entry</b>,
<b>archive_write_close</b>, <b>archive_write_finish
archive_write_free</b> &mdash; functions for creating
objects on disk</p>
a84 41
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>


<p style="margin-left:12%;"><b>archive_write_header</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>struct&nbsp;archive_entry&nbsp;*</i>);</p>


<p style="margin-left:6%; margin-top: 1em"><i>la_ssize_t</i></p>


<p style="margin-left:12%;"><b>archive_write_data</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>const&nbsp;void&nbsp;*</i>, <i>size_t</i>);</p>


<p style="margin-left:6%; margin-top: 1em"><i>la_ssize_t</i></p>


<p style="margin-left:12%;"><b>archive_write_data_block</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>const&nbsp;void&nbsp;*</i>, <i>size_t&nbsp;size</i>,
<i>int64_t&nbsp;offset</i>);</p>

<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>


<p style="margin-left:12%;"><b>archive_write_finish_entry</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>

<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>


<p style="margin-left:12%;"><b>archive_write_close</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>

<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>


<p style="margin-left:12%;"><b>archive_write_finish</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>

<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>


<p style="margin-left:12%;"><b>archive_write_free</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>

d122 32
d173 1
a173 1
<p><b>ARCHIVE_EXTRACT_TIME</b></p>
d175 2
a176 3
<p style="margin-left:27%;">The timestamps (mtime, ctime,
and atime) should be restored. By default, they are ignored.
Note that restoring of atime is not currently supported.</p>
d178 1
a178 1
<p><b>ARCHIVE_EXTRACT_NO_OVERWRITE</b></p>
d180 5
a184 29
<p style="margin-left:27%;">Existing files on disk will not
be overwritten. By default, existing regular files are
truncated and overwritten; existing directories will have
their permissions updated; other pre-existing objects are
unlinked and recreated from scratch.</p>

<p><b>ARCHIVE_EXTRACT_UNLINK</b></p>

<p style="margin-left:27%;">Existing files on disk will be
unlinked before any attempt to create them. In some cases,
this can prove to be a significant performance improvement.
By default, existing files are truncated and rewritten, but
the file is not recreated. In particular, the default
behavior does not break existing hard links.</p>

<p><b>ARCHIVE_EXTRACT_ACL</b></p>

<p style="margin-left:27%;">Attempt to restore ACLs. By
default, extended ACLs are ignored.</p>

<p><b>ARCHIVE_EXTRACT_FFLAGS</b></p>

<p style="margin-left:27%;">Attempt to restore extended
file flags. By default, file flags are ignored.</p>

<p><b>ARCHIVE_EXTRACT_XATTR</b></p>

<p style="margin-left:27%;">Attempt to restore POSIX.1e
extended attributes. By default, they are ignored.</p>
d193 8
a200 1
to perform this check. If <b>ARCHIVE_EXTRACT_UNLINK</b> is
d205 1
a205 1
<p><b>ARCHIVE_EXTRACT_SECURE_NODOTDOT</b></p>
d207 3
a209 5
<p style="margin-left:27%;">Refuse to extract a path that
contains a <i>..</i> element anywhere within it. The default
is to not refuse such paths. Note that paths ending in
<i>..</i> always cause an error, regardless of this
flag.</p>
d211 1
a211 1
<p><b>ARCHIVE_EXTRACT_SECURE_NOABSOLUTEPATHS</b></p>
d213 6
a218 2
<p style="margin-left:27%;">Refuse to extract an absolute
path. The default is to not refuse such paths.</p>
d220 1
a220 1
<p><b>ARCHIVE_EXTRACT_SPARSE</b></p>
d222 4
a225 10
<p style="margin-left:27%;">Scan data for blocks of NUL
bytes and try to recreate them with holes. This results in
sparse files, independent of whether the archive format
supports or uses them.</p>

<p><b>ARCHIVE_EXTRACT_CLEAR_NOCHANGE_FFLAGS</b></p>

<p style="margin-left:27%;">Before removing a file system
object prior to replacing it, clear platform-specific file
flags which might prevent its removal.</p>
a254 64

<p style="margin-top: 1em"><b>archive_write_header</b>()</p>

<p style="margin-left:17%;">Build and write a header using
the data in the provided struct archive_entry structure. See
archive_entry(3) for information on creating and populating
struct archive_entry objects.</p>

<p style="margin-top: 1em"><b>archive_write_data</b>()</p>

<p style="margin-left:17%;">Write data corresponding to the
header just written. Returns number of bytes written or -1
on error.</p>


<p style="margin-top: 1em"><b>archive_write_data_block</b>()</p>

<p style="margin-left:17%;">Write data corresponding to the
header just written. This is like
<b>archive_write_data</b>() except that it performs a seek
on the file being written to the specified offset before
writing the data. This is useful when restoring sparse files
from archive formats that support sparse files. Returns
number of bytes written or -1 on error. (Note: This is
currently not supported for archive_write handles, only for
archive_write_disk handles.)</p>


<p style="margin-top: 1em"><b>archive_write_finish_entry</b>()</p>

<p style="margin-left:17%;">Close out the entry just
written. Ordinarily, clients never need to call this, as it
is called automatically by
<b>archive_write_next_header</b>() and
<b>archive_write_close</b>() as needed. However, some file
attributes are written to disk only after the file is
closed, so this can be necessary if you need to work with
the file on disk right away.</p>


<p style="margin-top: 1em"><b>archive_write_close</b>()</p>

<p style="margin-left:17%;">Set any attributes that could
not be set during the initial restore. For example,
directory timestamps are not restored initially because
restoring a subsequent file would alter that timestamp.
Similarly, non-writable directories are initially created
with write permissions (so that their contents can be
restored). The <b>archive_write_disk_new</b> library
maintains a list of all such deferred attributes and sets
them when this function is invoked.</p>


<p style="margin-top: 1em"><b>archive_write_finish</b>()</p>

<p style="margin-left:17%;">This is a deprecated synonym
for <b>archive_write_free</b>().</p>

<p style="margin-top: 1em"><b>archive_write_free</b>()</p>

<p style="margin-left:17%;">Invokes
<b>archive_write_close</b>() if it was not invoked manually,
then releases all resources.</p>

d353 1
a353 1
&lsquo;&lsquo;standard&rsquo;&rsquo; user-id and group-id
d366 1
a366 1
February&nbsp;2, 2012 BSD</p>
@


1.3
log
@Update for libarchive 3.2.1.
@
text
@d2 1
a2 1
<!-- CreationDate: Sun Jun 19 19:54:08 2016 -->
d453 1
a453 1
&rsquo;&rsquo;standard&rsquo;&rsquo; user-id and group-id
@


1.2
log
@Changes 3.1.2:
This is a maintenance update to fix issues with the new RAR seeking
feature. This new release also contains fixes for build failures when
building libarchive using Visual Studio 2012 and MinGW.
@
text
@d1 2
a2 2
<!-- Creator     : groff version 1.21 -->
<!-- CreationDate: Sat Feb  9 12:24:06 2013 -->
d97 1
a97 1
<p style="margin-left:6%; margin-top: 1em"><i>ssize_t</i></p>
d104 1
a104 1
<p style="margin-left:6%; margin-top: 1em"><i>ssize_t</i></p>
d245 5
d257 6
d404 1
a404 2
was written by Tim Kientzle &lang; kientzle@@acm.org&rang;
.</p>
@


1.1
log
@Initial revision
@
text
@d1 2
a2 2
<!-- Creator     : groff version 1.19.2 -->
<!-- CreationDate: Thu Feb  4 20:36:34 2010 -->
d11 4
a14 3
       p     { margin-top: 0; margin-bottom: 0; }
       pre   { margin-top: 0; margin-bottom: 0; }
       table { margin-top: 0; margin-bottom: 0; }
d23 2
a24 2
<p valign="top">archive_write_disk(3) FreeBSD Library
Functions Manual archive_write_disk(3)</p>
d26 1
a26 1
<p style="margin-top: 1em" valign="top"><b>NAME</b></p>
d28 1
a28 1
<p style="margin-left:8%;"><b>archive_write_disk_new</b>,
d35 1
d37 3
a39 2
<b>archive_write_close</b>, <b>archive_write_finish</b>
&mdash; functions for creating objects on disk</p>
d41 1
d43 2
a44 1
<p style="margin-top: 1em" valign="top"><b>SYNOPSIS</b></p>
d46 3
a48 1
<p style="margin-left:8%;"><b>#include
d51 1
a51 1
<p style="margin-left:8%; margin-top: 1em"><i>struct
d55 1
a55 1
<p style="margin-left:14%;"><b>archive_write_disk_new</b>(<i>void</i>);</p>
d57 1
a57 1
<p style="margin-left:8%; margin-top: 1em"><i>int</i></p>
d60 1
a60 1
<p style="margin-left:14%;"><b>archive_write_disk_set_options</b>(<i>struct&nbsp;archive&nbsp;*</i>,
d63 1
a63 1
<p style="margin-left:8%; margin-top: 1em"><i>int</i></p>
d66 1
a66 1
<p style="margin-left:14%;"><b>archive_write_disk_set_skip_file</b>(<i>struct&nbsp;archive&nbsp;*</i>,
d69 1
a69 1
<p style="margin-left:8%; margin-top: 1em"><i>int</i></p>
d72 1
a72 1
<p valign="top"><b>archive_write_disk_set_group_lookup</b>(<i>struct&nbsp;archive&nbsp;*</i>,
d77 1
a77 1
<p style="margin-left:8%; margin-top: 1em"><i>int</i></p>
d80 1
a80 1
<p style="margin-left:14%;"><b>archive_write_disk_set_standard_lookup</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
d82 1
a82 1
<p style="margin-left:8%; margin-top: 1em"><i>int</i></p>
d85 1
a85 1
<p valign="top"><b>archive_write_disk_set_user_lookup</b>(<i>struct&nbsp;archive&nbsp;*</i>,
d90 1
a90 1
<p style="margin-left:8%; margin-top: 1em"><i>int</i></p>
d93 1
a93 1
<p style="margin-left:14%;"><b>archive_write_header</b>(<i>struct&nbsp;archive&nbsp;*</i>,
d97 1
a97 1
<p style="margin-left:8%; margin-top: 1em"><i>ssize_t</i></p>
d100 1
a100 1
<p style="margin-left:14%;"><b>archive_write_data</b>(<i>struct&nbsp;archive&nbsp;*</i>,
a102 1
<p style="margin-left:8%; margin-top: 1em"><i>int</i></p>
d104 8
a112 1
<p style="margin-left:14%;"><b>archive_write_finish_entry</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
d114 1
a114 1
<p style="margin-left:8%; margin-top: 1em"><i>int</i></p>
d116 1
a117 1
<p style="margin-left:14%;"><b>archive_write_close</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
d119 1
a119 1
<p style="margin-left:8%; margin-top: 1em"><i>int</i></p>
d121 1
a122 1
<p style="margin-left:14%;"><b>archive_write_finish</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
d124 1
d126 1
a126 1
<p style="margin-top: 1em" valign="top"><b>DESCRIPTION</b></p>
d128 6
a133 1
<p style="margin-left:8%;">These functions provide a
d146 1
a146 1
<p style="margin-top: 1em" valign="top"><b>archive_write_disk_new</b>()</p>
d148 1
a148 1
<p style="margin-left:20%;">Allocates and initializes a
d153 1
a153 1
<p style="margin-top: 1em" valign="top"><b>archive_write_disk_set_skip_file</b>()</p>
d155 1
a155 1
<p style="margin-left:20%;">Records the device and inode
d163 1
a163 1
<p style="margin-top: 1em" valign="top"><b>archive_write_disk_set_options</b>()</p>
d165 1
a165 1
<p style="margin-left:20%;">The options field consists of a
d168 1
a168 1
<p valign="top"><b>ARCHIVE_EXTRACT_OWNER</b></p>
d170 1
a170 1
<p style="margin-left:32%;">The user and group IDs should
d174 1
a174 1
<p valign="top"><b>ARCHIVE_EXTRACT_PERM</b></p>
d176 1
a176 1
<p style="margin-left:32%;">Full permissions (including
d187 1
a187 1
<p valign="top"><b>ARCHIVE_EXTRACT_TIME</b></p>
d189 1
a189 1
<p style="margin-left:32%;">The timestamps (mtime, ctime,
d193 1
a193 1
<p valign="top"><b>ARCHIVE_EXTRACT_NO_OVERWRITE</b></p>
d195 1
a195 1
<p style="margin-left:32%;">Existing files on disk will not
d201 1
a201 1
<p valign="top"><b>ARCHIVE_EXTRACT_UNLINK</b></p>
d203 1
a203 1
<p style="margin-left:32%;">Existing files on disk will be
d210 1
a210 1
<p valign="top"><b>ARCHIVE_EXTRACT_ACL</b></p>
d212 1
a212 1
<p style="margin-left:32%;">Attempt to restore ACLs. By
d215 1
a215 1
<p valign="top"><b>ARCHIVE_EXTRACT_FFLAGS</b></p>
d217 1
a217 1
<p style="margin-left:32%;">Attempt to restore extended
d220 1
a220 1
<p valign="top"><b>ARCHIVE_EXTRACT_XATTR</b></p>
d222 1
a222 1
<p style="margin-left:32%;">Attempt to restore POSIX.1e
d225 1
a225 1
<p valign="top"><b>ARCHIVE_EXTRACT_SECURE_SYMLINKS</b></p>
d227 1
a227 1
<p style="margin-left:32%;">Refuse to extract any object
d237 1
a237 1
<p valign="top"><b>ARCHIVE_EXTRACT_SECURE_NODOTDOT</b></p>
d239 1
a239 1
<p style="margin-left:32%;">Refuse to extract a path that
d245 1
a245 1
<p valign="top"><b>ARCHIVE_EXTRACT_SPARSE</b></p>
d247 1
a247 1
<p style="margin-left:32%;">Scan data for blocks of NUL
d253 1
a253 1
<p style="margin-top: 1em" valign="top"><b>archive_write_disk_set_group_lookup</b>(),
d256 1
a256 1
<p style="margin-left:20%;">The struct archive_entry
d270 1
a270 1
<p style="margin-top: 1em" valign="top"><b>archive_write_disk_set_standard_lookup</b>()</p>
d272 1
a272 1
<p style="margin-left:20%;">This convenience function
d281 1
a281 1
<p style="margin-top: 1em" valign="top"><b>archive_write_header</b>()</p>
d283 1
a283 1
<p style="margin-left:20%;">Build and write a header using
d288 1
d290 1
a290 3
<p style="margin-top: 1em" valign="top"><b>archive_write_data</b>()</p>

<p style="margin-left:20%;">Write data corresponding to the
d295 1
a295 1
<p style="margin-top: 1em" valign="top"><b>archive_write_finish_entry</b>()</p>
d297 14
a310 1
<p style="margin-left:20%;">Close out the entry just
d314 4
a317 1
<b>archive_write_close</b>() as needed.</p>
d320 1
a320 1
<p style="margin-top: 1em" valign="top"><b>archive_write_close</b>()</p>
d322 1
a322 1
<p style="margin-left:20%;">Set any attributes that could
d333 4
a336 1
<p style="margin-top: 1em" valign="top"><b>archive_write_finish</b>()</p>
d338 3
a340 1
<p style="margin-left:20%;">Invokes
d344 1
a344 1
<p style="margin-left:8%;">More information about the
d350 1
a350 2
<p style="margin-top: 1em" valign="top"><b>RETURN
VALUES</b></p>
d352 1
a352 1
<p style="margin-left:8%;">Most functions return
d359 1
a359 4
operations impossible. The <b>archive_errno</b>() and
<b>archive_error_string</b>() functions can be used to
retrieve an appropriate error code and a textual error
message.</p>
d362 1
a362 1
<p style="margin-left:8%; margin-top: 1em"><b>archive_write_disk_new</b>()
d367 5
a371 5
<p style="margin-left:8%; margin-top: 1em"><b>archive_write_data</b>()
returns a count of the number of bytes actually written. On
error, -1 is returned and the <b>archive_errno</b>() and
<b>archive_error_string</b>() functions will return
appropriate values.</p>
d373 3
a375 1
<p style="margin-top: 1em" valign="top"><b>SEE ALSO</b></p>
d377 3
a379 1
<p style="margin-left:8%;">archive_read(3),
d382 1
a382 1
<p style="margin-top: 1em" valign="top"><b>HISTORY</b></p>
d384 1
a384 1
<p style="margin-left:8%;">The <b>libarchive</b> library
d390 1
a390 1
<p style="margin-top: 1em" valign="top"><b>AUTHORS</b></p>
d392 3
a394 3
<p style="margin-left:8%;">The <b>libarchive</b> library
was written by Tim Kientzle
&lang;kientzle@@acm.org&rang;.</p>
d396 1
a396 1
<p style="margin-top: 1em" valign="top"><b>BUGS</b></p>
d398 1
a398 1
<p style="margin-left:8%;">Directories are actually
d412 1
a412 1
<p style="margin-left:8%; margin-top: 1em">The library
d420 1
a420 1
<p style="margin-left:8%; margin-top: 1em">Restoring the
d424 1
a424 1
be exploited to create an entire directory heirarchy with a
d428 1
a428 1
<p style="margin-left:8%; margin-top: 1em">Implicit
d434 1
a434 1
<p style="margin-left:8%; margin-top: 1em">SGID and SUID
d442 2
a443 2
<p style="margin-left:8%; margin-top: 1em">The
&lsquo;&lsquo;standard&rsquo;&rsquo; user-id and group-id
d450 1
a450 1
<p style="margin-left:8%; margin-top: 1em">There should be
d452 1
a452 1
walks a directory heirarchy and returns archive entry
d455 2
a456 3

<p style="margin-left:8%; margin-top: 1em">FreeBSD&nbsp;8.0
August&nbsp;5, 2008 FreeBSD&nbsp;8.0</p>
@


1.1.1.1
log
@Import libarchive 2.8.0:
- Infrastructure:
  - Allow command line tools as fallback for missing compression
    libraries. If compiled without gzip for example, gunzip will
    be used automatically.
  - Improved support for a number of platforms like high-resolution
    timestamps and Extended Attributes on various Unix systems
  - New convience interface for creating archives based on disk content,
    complement of the archive_write_disk interface.
- Frontends:
  - bsdcpio ready for public consumption
  - hand-written date parser replaces the yacc code
- Filter system:
  - Simplified read filter chains
  - Option support for filters
  - LZMA, XZ, uudecode handled
- Format support:
  - Write support for mtree files based on file system or archive
    content
  - Basic read support for Joliet
  - Write support for zip files
  - Write support for shar archives, both text-only and binary-safe
@
text
@@


1.1.1.2
log
@libarchive-2.8.2:
- Fix NULL deference for short self-extracting zip archives
- Don't dereference symlinks on Linux when reading ACLs
- Better detection of SHA2 support for old OpenSSL versions
- Fix parsing of input files for bsdtar -T
- Do not leak setup_xattr into the global namespace
- Fix build when an older libarchive is already installed
- Use O_BINARY opening files in bsdtar
- Include missing archive_crc32.h
- Correctly include iconv.h required by libxml2
@
text
@d1 421
a421 892
%!PS-Adobe-3.0
%%Creator: groff version 1.19.2
%%CreationDate: Sun Mar 14 02:49:16 2010
%%DocumentNeededResources: font Times-Roman
%%DocumentSuppliedResources: procset grops 1.19 2
%%Pages: 63
%%PageOrder: Ascend
%%DocumentMedia: Default 612 792 0 () ()
%%Orientation: Portrait
%%EndComments
%%BeginDefaults
%%PageMedia: Default
%%EndDefaults
%%BeginProlog
%%BeginResource: procset grops 1.19 2
%!PS-Adobe-3.0 Resource-ProcSet
/setpacking where{
pop
currentpacking
true setpacking
}if
/grops 120 dict dup begin
/SC 32 def
/A/show load def
/B{0 SC 3 -1 roll widthshow}bind def
/C{0 exch ashow}bind def
/D{0 exch 0 SC 5 2 roll awidthshow}bind def
/E{0 rmoveto show}bind def
/F{0 rmoveto 0 SC 3 -1 roll widthshow}bind def
/G{0 rmoveto 0 exch ashow}bind def
/H{0 rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
/I{0 exch rmoveto show}bind def
/J{0 exch rmoveto 0 SC 3 -1 roll widthshow}bind def
/K{0 exch rmoveto 0 exch ashow}bind def
/L{0 exch rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
/M{rmoveto show}bind def
/N{rmoveto 0 SC 3 -1 roll widthshow}bind def
/O{rmoveto 0 exch ashow}bind def
/P{rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
/Q{moveto show}bind def
/R{moveto 0 SC 3 -1 roll widthshow}bind def
/S{moveto 0 exch ashow}bind def
/T{moveto 0 exch 0 SC 5 2 roll awidthshow}bind def
/SF{
findfont exch
[exch dup 0 exch 0 exch neg 0 0]makefont
dup setfont
[exch/setfont cvx]cvx bind def
}bind def
/MF{
findfont
[5 2 roll
0 3 1 roll
neg 0 0]makefont
dup setfont
[exch/setfont cvx]cvx bind def
}bind def
/level0 0 def
/RES 0 def
/PL 0 def
/LS 0 def
/MANUAL{
statusdict begin/manualfeed true store end
}bind def
/PLG{
gsave newpath clippath pathbbox grestore
exch pop add exch pop
}bind def
/BP{
/level0 save def
1 setlinecap
1 setlinejoin
72 RES div dup scale
LS{
90 rotate
}{
0 PL translate
}ifelse
1 -1 scale
}bind def
/EP{
level0 restore
showpage
}def
/DA{
newpath arcn stroke
}bind def
/SN{
transform
.25 sub exch .25 sub exch
round .25 add exch round .25 add exch
itransform
}bind def
/DL{
SN
moveto
SN
lineto stroke
}bind def
/DC{
newpath 0 360 arc closepath
}bind def
/TM matrix def
/DE{
TM currentmatrix pop
translate scale newpath 0 0 .5 0 360 arc closepath
TM setmatrix
}bind def
/RC/rcurveto load def
/RL/rlineto load def
/ST/stroke load def
/MT/moveto load def
/CL/closepath load def
/Fr{
setrgbcolor fill
}bind def
/setcmykcolor where{
pop
/Fk{
setcmykcolor fill
}bind def
}if
/Fg{
setgray fill
}bind def
/FL/fill load def
/LW/setlinewidth load def
/Cr/setrgbcolor load def
/setcmykcolor where{
pop
/Ck/setcmykcolor load def
}if
/Cg/setgray load def
/RE{
findfont
dup maxlength 1 index/FontName known not{1 add}if dict begin
{
1 index/FID ne{def}{pop pop}ifelse
}forall
/Encoding exch def
dup/FontName exch def
currentdict end definefont pop
}bind def
/DEFS 0 def
/EBEGIN{
moveto
DEFS begin
}bind def
/EEND/end load def
/CNT 0 def
/level1 0 def
/PBEGIN{
/level1 save def
translate
div 3 1 roll div exch scale
neg exch neg exch translate
0 setgray
0 setlinecap
1 setlinewidth
0 setlinejoin
10 setmiterlimit
[]0 setdash
/setstrokeadjust where{
pop
false setstrokeadjust
}if
/setoverprint where{
pop
false setoverprint
}if
newpath
/CNT countdictstack def
userdict begin
/showpage{}def
/setpagedevice{}def
}bind def
/PEND{
countdictstack CNT sub{end}repeat
level1 restore
}bind def
end def
/setpacking where{
pop
setpacking
}if
%%EndResource
%%EndProlog
%%BeginSetup
%%BeginFeature: *PageSize Default
<< /PageSize [ 612 792 ] /ImagingBBox null >> setpagedevice
%%EndFeature
%%IncludeResource: font Times-Roman
grops begin/DEFS 1 dict def DEFS begin/u{.001 mul}bind def end/RES 72
def/PL 792 def/LS false def/ENC0[/asciicircum/asciitilde/Scaron/Zcaron
/scaron/zcaron/Ydieresis/trademark/quotesingle/Euro/.notdef/.notdef
/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
/.notdef/.notdef/space/exclam/quotedbl/numbersign/dollar/percent
/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen
/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon
/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O
/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/circumflex
/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y
/z/braceleft/bar/braceright/tilde/.notdef/quotesinglbase/guillemotleft
/guillemotright/bullet/florin/fraction/perthousand/dagger/daggerdbl
/endash/emdash/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/hungarumlaut
/dotaccent/breve/caron/ring/ogonek/quotedblleft/quotedblright/oe/lslash
/quotedblbase/OE/Lslash/.notdef/exclamdown/cent/sterling/currency/yen
/brokenbar/section/dieresis/copyright/ordfeminine/guilsinglleft
/logicalnot/minus/registered/macron/degree/plusminus/twosuperior
/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior
/ordmasculine/guilsinglright/onequarter/onehalf/threequarters
/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE
/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex
/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis
/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn
/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla
/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis
/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash
/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]def
/Times-Roman@@0 ENC0/Times-Roman RE
%%EndSetup
%%Page: 1 1
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(<html>)0 12 Q(<head>)0 24 Q(<title>)36 36 Q
(August 5, 2008 archi)74.5 48 Q -.15(ve)-.25 G(_write_disk 3).15 E
(</title>)36 72 Q 0 Cg EP
%%Page: 2 2
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(<style type="te)36 12 Q(xt/css">)-.15 E(<!--)36
24 Q(body { mar)72 36 Q(gin-left:4%; })-.18 E(H1, H2, H3, H4, H5 {)72 48
Q(color: maroon; padding: 4pt; mar)108 60 Q(gin-left: -4%;)-.18 E
(border: solid; border)108 72 Q(-width: thin; width: 100%;)-.2 E 0 Cg EP
%%Page: 3 3
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(background: r)108 12 Q(gb\(204,204,255\))-.18 E
(})72 24 Q(-->)36 36 Q(</style>)36 48 Q(</head>)0 60 Q
(<body bgcolor="#FFFFFF" te)0 72 Q(xt="#000000">)-.15 E 0 Cg EP
%%Page: 4 4
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(<h3 id="N)36 12 Q(AME">)-.35 E -.35(NA)36 24 S
(ME).35 E(</h3>)36 36 Q(<b>archi)0 48 Q -.15(ve)-.25 G(_write_disk_ne)
.15 E(w</b>,)-.25 E(<b>archi)0 60 Q -.15(ve)-.25 G
(_write_disk_set_options</b>,).15 E(<b>archi)0 72 Q -.15(ve)-.25 G
(_write_disk_set_skip_\214le</b>,).15 E 0 Cg EP
%%Page: 5 5
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(<b>archi)0 12 Q -.15(ve)-.25 G
(_write_disk_set_group_lookup</b>,).15 E(<b>archi)0 24 Q -.15(ve)-.25 G
(_write_disk_set_standard_lookup</b>,).15 E(<b>archi)0 36 Q -.15(ve)-.25
G(_write_disk_set_user_lookup</b>,).15 E(<b>archi)0 48 Q -.15(ve)-.25 G
(_write_header</b>,).15 E(<b>archi)0 60 Q -.15(ve)-.25 G
(_write_data</b>,).15 E(<b>archi)0 72 Q -.15(ve)-.25 G
(_write_\214nish_entry</b>,).15 E 0 Cg EP
%%Page: 6 6
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(<b>archi)0 12 Q -.15(ve)-.25 G
(_write_close</b>,).15 E(<b>archi)0 24 Q -.15(ve)-.25 G
(_write_\214nish</b>).15 E 2.5(-f)0 36 S
(unctions for creating objects on disk)-2.5 E(<h3 id="SYNOPSIS">)36 48 Q
(SYNOPSIS)36 60 Q(</h3>)36 72 Q 0 Cg EP
%%Page: 7 7
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF
(<br><br><code></code><code>struct</code><code> archi)0 12 Q -.15(ve)
-.25 G(</code><code> *</code>).15 E(<b>archi)0 24 Q -.15(ve)-.25 G
(_write_disk_ne).15 E(w</b>\(<code></code><code>v)-.25 E(oid</code>\))
-.2 E(<br><br><code></code><code>int</code>)0 36 Q(<b>archi)0 48 Q -.15
(ve)-.25 G(_write_disk_set_options</b>\(<code></code><code>struct archi)
.15 E .3 -.15(ve *)-.25 H(</code><code>, int \215ags</code>\)).15 E
(<br><br><code></code><code>int</code>)0 60 Q(<b>archi)0 72 Q -.15(ve)
-.25 G(_write_disk_set_skip_\214le</b>\(<code></code><code>struct archi)
.15 E .3 -.15(ve *)-.25 H(</code><code>, de).15 E
(v_t</code><code>, ino_t</code>\))-.25 E 0 Cg EP
%%Page: 8 8
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(<br><br><code></code><code>int</code>)0 12 Q
(<b>archi)0 24 Q -.15(ve)-.25 G
(_write_disk_set_group_lookup</b>\(<code></code>).15 E
(<code></code><code>struct archi)0 36 Q .3 -.15(ve *)-.25 H(</code>).15
E(<code></code><code>v)0 48 Q(oid *</code>)-.2 E
(<code></code>gid_t \(*\)\(v)0 60 Q
(oid *, const char *gname, gid_t gid\))-.2 E(<code></code><code>v)0 72 Q
(oid \(*cleanup\)\(v)-.2 E(oid *\)</code>)-.2 E 0 Cg EP
%%Page: 9 9
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(\))0 12 Q(<br><br><code></code><code>int</code>)
0 24 Q(<b>archi)0 36 Q -.15(ve)-.25 G
(_write_disk_set_standard_lookup</b>\(<code></code><code>struct archi)
.15 E .3 -.15(ve *)-.25 H(</code>\)).15 E
(<br><br><code></code><code>int</code>)0 48 Q(<b>archi)0 60 Q -.15(ve)
-.25 G(_write_disk_set_user_lookup</b>\(<code></code>).15 E
(<code></code><code>struct archi)0 72 Q .3 -.15(ve *)-.25 H(</code>).15
E 0 Cg EP
%%Page: 10 10
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(<code></code><code>v)0 12 Q(oid *</code>)-.2 E
(<code></code>uid_t \(*\)\(v)0 24 Q
(oid *, const char *uname, uid_t uid\))-.2 E(<code></code><code>v)0 36 Q
(oid \(*cleanup\)\(v)-.2 E(oid *\)</code>)-.2 E(\))0 48 Q
(<br><br><code></code><code>int</code>)0 60 Q(<b>archi)0 72 Q -.15(ve)
-.25 G(_write_header</b>\(<code></code><code>struct archi).15 E .3 -.15
(ve *)-.25 H(</code><code>, struct archi).15 E -.15(ve)-.25 G
(_entry *</code>\)).15 E 0 Cg EP
%%Page: 11 11
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(<br><br><code></code><code>ssize_t</code>)0 12 Q
(<b>archi)0 24 Q -.15(ve)-.25 G
(_write_data</b>\(<code></code><code>struct archi).15 E .3 -.15(ve *)
-.25 H(</code><code>, const v).15 E(oid *</code><code>, size_t</code>\))
-.2 E(<br><br><code></code><code>int</code>)0 36 Q(<b>archi)0 48 Q -.15
(ve)-.25 G(_write_\214nish_entry</b>\(<code></code><code>struct archi)
.15 E .3 -.15(ve *)-.25 H(</code>\)).15 E
(<br><br><code></code><code>int</code>)0 60 Q(<b>archi)0 72 Q -.15(ve)
-.25 G(_write_close</b>\(<code></code><code>struct archi).15 E .3 -.15
(ve *)-.25 H(</code>\)).15 E 0 Cg EP
%%Page: 12 12
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(<br><br><code></code><code>int</code>)0 12 Q
(<b>archi)0 24 Q -.15(ve)-.25 G
(_write_\214nish</b>\(<code></code><code>struct archi).15 E .3 -.15
(ve *)-.25 H(</code>\)).15 E(<h3 id="DESCRIPTION">)36 36 Q(DESCRIPTION)
36 48 Q(</h3>)36 60 Q(These functions pro)0 72 Q
(vide a complete API for creating objects on)-.15 E 0 Cg EP
%%Page: 13 13
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(disk from)0 12 Q(<font size="-1"></font><font s\
ize="-1">struct</font><font size="-1"> archi)0 24 Q -.15(ve)-.25 G
(_entry</font>).15 E(descriptions.)0 36 Q(The)0 48 Q 2.5(ya)-.15 G
(re most naturally used when e)-2.5 E(xtracting objects from an archi)
-.15 E -.15(ve)-.25 G(using the)0 60 Q(<b>archi)0 72 Q -.15(ve)-.25 G
(_read</b>\(<code></code>\)).15 E 0 Cg EP
%%Page: 14 14
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(interf)0 12 Q(ace.)-.1 E
(The general process is to read)0 24 Q(<font size="-1"></font><font siz\
e="-1">struct</font><font size="-1"> archi)0 36 Q -.15(ve)-.25 G
(_entry</font>).15 E(objects from an archi)0 48 Q -.15(ve)-.25 G 2.5(,t)
.15 G(hen write those objects to a)-2.5 E(<font size="-1"></font><font \
size="-1">struct</font><font size="-1"> archi)0 60 Q -.15(ve)-.25 G
(</font>).15 E(object created using the)0 72 Q 0 Cg EP
%%Page: 15 15
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(<b>archi)0 12 Q -.15(ve)-.25 G
(_write_disk</b>\(<code></code>\)).15 E -.1(fa)0 24 S(mily functions.).1
E(This interf)0 36 Q(ace is deliberately v)-.1 E(ery similar to the)-.15
E(<b>archi)0 48 Q -.15(ve)-.25 G(_write</b>\(<code></code>\)).15 E
(interf)0 60 Q(ace used to write objects to a streaming archi)-.1 E -.15
(ve)-.25 G(.).15 E(<dl compact>)0 72 Q 0 Cg EP
%%Page: 16 16
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(<p><dt><b>archi)0 12 Q -.15(ve)-.25 G
(_write_disk_ne).15 E(w</b>\(<code></code>\)<dd>)-.25 E
(Allocates and initializes a)0 24 Q(<font size="-1"></font><font size="\
-1">struct</font><font size="-1"> archi)0 36 Q -.15(ve)-.25 G(</font>)
.15 E(object suitable for writing objects to disk.)0 48 Q
(<p><dt><b>archi)0 60 Q -.15(ve)-.25 G
(_write_disk_set_skip_\214le</b>\(<code></code>\)<dd>).15 E
(Records the de)0 72 Q
(vice and inode numbers of a \214le that should not be)-.25 E 0 Cg EP
%%Page: 17 17
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF -.15(ove)0 12 S(rwritten.).15 E
(This is typically used to ensure that an e)0 24 Q
(xtraction process does not)-.15 E -.15(ove)0 36 S(rwrite the archi).15
E .3 -.15(ve f)-.25 H(rom which objects are being read.).15 E
(This capability is technically unnecessary b)0 48 Q
(ut can be a signi\214cant)-.2 E(performance optimization in practice.)0
60 Q(<p><dt><b>archi)0 72 Q -.15(ve)-.25 G
(_write_disk_set_options</b>\(<code></code>\)<dd>).15 E 0 Cg EP
%%Page: 18 18
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF
(The options \214eld consists of a bitwise OR of one or more of the)0 12
Q(follo)0 24 Q(wing v)-.25 E(alues:)-.25 E(<dl compact>)0 36 Q
(<dt><b></b><b>ARCHIVE_EXTRA)0 48 Q(CT_O)-.4 E(WNER</b><dd>)-.35 E
(The user and group IDs should be set on the restored \214le.)0 60 Q
(By def)0 72 Q(ault, the user and group IDs are not restored.)-.1 E 0 Cg
EP
%%Page: 19 19
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(<dt><b></b><b>ARCHIVE_EXTRA)0 12 Q
(CT_PERM</b><dd>)-.4 E
(Full permissions \(including SGID, SUID, and stick)0 24 Q 2.5(yb)-.15 G
(its\) should)-2.5 E(be restored e)0 36 Q
(xactly as speci\214ed, without obe)-.15 E(ying the)-.15 E
(current umask.)0 48 Q
(Note that SUID and SGID bits can only be restored if the)0 60 Q
(user and group ID of the object on disk are correct.)0 72 Q 0 Cg EP
%%Page: 20 20
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(If)0 12 Q(<b></b><b>ARCHIVE_EXTRA)0 24 Q(CT_O)
-.4 E(WNER</b>)-.35 E
(is not speci\214ed, then SUID and SGID bits will only be restored)0 36
Q(if the def)0 48 Q(ault user and group IDs of ne)-.1 E
(wly-created objects on disk)-.25 E
(happen to match those speci\214ed in the archi)0 60 Q .3 -.15(ve e)-.25
H(ntry).15 E(.)-.65 E(By def)0 72 Q
(ault, only basic permissions are restored, and umask is obe)-.1 E(yed.)
-.15 E 0 Cg EP
%%Page: 21 21
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(<dt><b></b><b>ARCHIVE_EXTRA)0 12 Q
(CT_TIME</b><dd>)-.4 E
(The timestamps \(mtime, ctime, and atime\) should be restored.)0 24 Q
(By def)0 36 Q(ault, the)-.1 E 2.5(ya)-.15 G(re ignored.)-2.5 E
(Note that restoring of atime is not currently supported.)0 48 Q
(<dt><b></b><b>ARCHIVE_EXTRA)0 60 Q(CT_NO_O)-.4 E(VER)-.5 E
(WRITE</b><dd>)-.55 E(Existing \214les on disk will not be o)0 72 Q -.15
(ve)-.15 G(rwritten.).15 E 0 Cg EP
%%Page: 22 22
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(By def)0 12 Q(ault, e)-.1 E(xisting re)-.15 E
(gular \214les are truncated and o)-.15 E -.15(ve)-.15 G(rwritten;).15 E
-.15(ex)0 24 S(isting directories will ha).15 E .3 -.15(ve t)-.2 H
(heir permissions updated;).15 E(other pre-e)0 36 Q
(xisting objects are unlink)-.15 E(ed and recreated from scratch.)-.1 E
(<dt><b></b><b>ARCHIVE_EXTRA)0 48 Q(CT_UNLINK</b><dd>)-.4 E
(Existing \214les on disk will be unlink)0 60 Q(ed before an)-.1 E 2.5
(ya)-.15 G(ttempt to)-2.5 E(create them.)0 72 Q 0 Cg EP
%%Page: 23 23
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(In some cases, this can pro)0 12 Q .3 -.15(ve t)
-.15 H 2.5(ob).15 G 2.5(eas)-2.5 G(igni\214cant performance impro)-2.5 E
-.15(ve)-.15 G(ment.).15 E(By def)0 24 Q(ault, e)-.1 E
(xisting \214les are truncated and re)-.15 E(written, b)-.25 E(ut)-.2 E
(the \214le is not recreated.)0 36 Q(In particular)0 48 Q 2.5(,t)-.4 G
(he def)-2.5 E(ault beha)-.1 E(vior does not break e)-.2 E
(xisting hard links.)-.15 E(<dt><b></b><b>ARCHIVE_EXTRA)0 60 Q(CT_A)-.4
E(CL</b><dd>)-.4 E(Attempt to restore A)0 72 Q(CLs.)-.4 E 0 Cg EP
%%Page: 24 24
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(By def)0 12 Q(ault, e)-.1 E(xtended A)-.15 E
(CLs are ignored.)-.4 E(<dt><b></b><b>ARCHIVE_EXTRA)0 24 Q(CT_FFLA)-.4 E
(GS</b><dd>)-.4 E(Attempt to restore e)0 36 Q(xtended \214le \215ags.)
-.15 E(By def)0 48 Q(ault, \214le \215ags are ignored.)-.1 E
(<dt><b></b><b>ARCHIVE_EXTRA)0 60 Q(CT_XA)-.4 E(TTR</b><dd>)-1.11 E
(Attempt to restore POSIX.1e e)0 72 Q(xtended attrib)-.15 E(utes.)-.2 E
0 Cg EP
%%Page: 25 25
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(By def)0 12 Q(ault, the)-.1 E 2.5(ya)-.15 G
(re ignored.)-2.5 E(<dt><b></b><b>ARCHIVE_EXTRA)0 24 Q
(CT_SECURE_SYMLINKS</b><dd>)-.4 E(Refuse to e)0 36 Q(xtract an)-.15 E
2.5(yo)-.15 G(bject whose \214nal location w)-2.5 E(ould be altered)-.1
E(by a symlink on disk.)0 48 Q(This is intended to help guard ag)0 60 Q
(ainst a v)-.05 E(ariety of mischief)-.25 E(caused by archi)0 72 Q -.15
(ve)-.25 G 2.5(st).15 G(hat \(deliberately or otherwise\) e)-2.5 E
(xtract)-.15 E 0 Cg EP
%%Page: 26 26
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(\214les outside of the current directory)0 12 Q
(.)-.65 E(The def)0 24 Q(ault is not to perform this check.)-.1 E(If)0
36 Q(<b></b><b>ARCHIVE_EXTRA)0 48 Q(CT_UNLINK</b>)-.4 E
(is speci\214ed together with this option, the library will)0 60 Q(remo)
0 72 Q .3 -.15(ve a)-.15 H .3 -.15(ny i).15 H
(ntermediate symlinks it \214nds and return an).15 E 0 Cg EP
%%Page: 27 27
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(error only if such symlink could not be remo)0
12 Q -.15(ve)-.15 G(d.).15 E(<dt><b></b><b>ARCHIVE_EXTRA)0 24 Q
(CT_SECURE_NODO)-.4 E(TDO)-.4 E(T</b><dd>)-.4 E(Refuse to e)0 36 Q
(xtract a path that contains a)-.15 E(<code></code><code>..</code>)0 48
Q(element an)0 60 Q(ywhere within it.)-.15 E(The def)0 72 Q
(ault is to not refuse such paths.)-.1 E 0 Cg EP
%%Page: 28 28
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(Note that paths ending in)0 12 Q
(<code></code><code>..</code>)0 24 Q(al)0 36 Q -.1(wa)-.1 G
(ys cause an error).1 E 2.5(,r)-.4 G -2.25 -.15(eg a)-2.5 H
(rdless of this \215ag.).15 E(<dt><b></b><b>ARCHIVE_EXTRA)0 48 Q(CT_SP)
-.4 E(ARSE</b><dd>)-.92 E
(Scan data for blocks of NUL bytes and try to recreate them with holes.)
0 60 Q(This results in sparse \214les, independent of whether the archi)
0 72 Q .3 -.15(ve f)-.25 H(ormat).15 E 0 Cg EP
%%Page: 29 29
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(supports or uses them.)0 12 Q(</dl>)0 24 Q
(<p><dt>Xo<dd>)0 36 Q(<b>archi)0 48 Q -.15(ve)-.25 G
(_write_disk_set_group_lookup</b>\(<code></code>\),).15 E(<b>archi)0 60
Q -.15(ve)-.25 G(_write_disk_set_user_lookup</b>\(<code></code>\)).15 E
(The)0 72 Q 0 Cg EP
%%Page: 30 30
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(<font size="-1"></font><font size="-1">struct</\
font><font size="-1"> archi)0 12 Q -.15(ve)-.25 G(_entry</font>).15 E
(objects contain both names and ids that can be used to identify users)0
24 Q(and groups.)0 36 Q(These names and ids describe the o)0 48 Q
(wnership of the \214le itself and)-.25 E(also appear in A)0 60 Q
(CL lists.)-.4 E(By def)0 72 Q
(ault, the library uses the ids and ignores the names, b)-.1 E(ut)-.2 E
0 Cg EP
%%Page: 31 31
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(this can be o)0 12 Q -.15(ve)-.15 G
(rridden by re).15 E(gistering user and group lookup functions.)-.15 E
1.6 -.8(To r)0 24 T -.15(eg).8 G(ister).15 E 2.5(,y)-.4 G(ou must pro)
-2.5 E(vide a lookup function which)-.15 E
(accepts both a name and id and returns a suitable id.)0 36 Q -1.1(Yo)0
48 S 2.5(um)1.1 G(ay also pro)-2.5 E(vide a)-.15 E
(<font size="-1"></font><font size="-1">v)0 60 Q
(oid</font><font size="-1"> *</font>)-.2 E(pointer to a pri)0 72 Q -.25
(va)-.25 G(te data structure and a cleanup function for).25 E 0 Cg EP
%%Page: 32 32
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(that data.)0 12 Q
(The cleanup function will be in)0 24 Q -.2(vo)-.4 G -.1(ke).2 G 2.5(dw)
.1 G(hen the)-2.5 E(<font size="-1"></font><font size="-1">struct</font\
><font size="-1"> archi)0 36 Q -.15(ve)-.25 G(</font>).15 E
(object is destro)0 48 Q(yed.)-.1 E(<p><dt><b>archi)0 60 Q -.15(ve)-.25
G(_write_disk_set_standard_lookup</b>\(<code></code>\)<dd>).15 E
(This con)0 72 Q -.15(ve)-.4 G
(nience function installs a standard set of user).15 E 0 Cg EP
%%Page: 33 33
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(and group lookup functions.)0 12 Q
(These functions use)0 24 Q
(<a href="../html3/getpwnam.html">getpwnam\(3\)</a>)0 36 Q(and)0 48 Q
(<a href="../html3/getgrnam.html">getgrnam\(3\)</a>)0 60 Q(to con)0 72 Q
-.15(ve)-.4 G(rt names to ids, def).15 E
(aulting to the ids if the names cannot)-.1 E 0 Cg EP
%%Page: 34 34
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(be look)0 12 Q(ed up.)-.1 E
(These functions also implement a simple memory cache to reduce)0 24 Q
(the number of calls to)0 36 Q
(<a href="../html3/getpwnam.html">getpwnam\(3\)</a>)0 48 Q(and)0 60 Q
(<a href="../html3/getgrnam.html">getgrnam\(3\)</a>.)0 72 Q 0 Cg EP
%%Page: 35 35
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(<p><dt><b>archi)0 12 Q -.15(ve)-.25 G
(_write_header</b>\(<code></code>\)<dd>).15 E
(Build and write a header using the data in the pro)0 24 Q(vided)-.15 E
(<font size="-1"></font><font size="-1">struct</font><font size="-1"> a\
rchi)0 36 Q -.15(ve)-.25 G(_entry</font>).15 E(structure.)0 48 Q(See)0
60 Q(<a href="../html3/archi)0 72 Q -.15(ve)-.25 G(_entry).15 E
(.html">archi)-.65 E -.15(ve)-.25 G(_entry\(3\)</a>).15 E 0 Cg EP
%%Page: 36 36
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(for information on creating and populating)0 12
Q(<font size="-1"></font><font size="-1">struct</font><font size="-1"> \
archi)0 24 Q -.15(ve)-.25 G(_entry</font>).15 E(objects.)0 36 Q
(<p><dt><b>archi)0 48 Q -.15(ve)-.25 G
(_write_data</b>\(<code></code>\)<dd>).15 E
(Write data corresponding to the header just written.)0 60 Q
(Returns number of bytes written or -1 on error)0 72 Q(.)-.55 E 0 Cg EP
%%Page: 37 37
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(<p><dt><b>archi)0 12 Q -.15(ve)-.25 G
(_write_\214nish_entry</b>\(<code></code>\)<dd>).15 E
(Close out the entry just written.)0 24 Q(Ordinarily)0 36 Q 2.5(,c)-.65
G(lients ne)-2.5 E -.15(ve)-.25 G 2.5(rn).15 G(eed to call this, as it)
-2.5 E(is called automatically by)0 48 Q(<b>archi)0 60 Q -.15(ve)-.25 G
(_write_ne).15 E(xt_header</b>\(<code></code>\))-.15 E(and)0 72 Q 0 Cg
EP
%%Page: 38 38
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(<b>archi)0 12 Q -.15(ve)-.25 G
(_write_close</b>\(<code></code>\)).15 E(as needed.)0 24 Q
(<p><dt><b>archi)0 36 Q -.15(ve)-.25 G
(_write_close</b>\(<code></code>\)<dd>).15 E(Set an)0 48 Q 2.5(ya)-.15 G
(ttrib)-2.5 E(utes that could not be set during the initial restore.)-.2
E -.15(Fo)0 60 S 2.5(re).15 G
(xample, directory timestamps are not restored initially because)-2.65 E
(restoring a subsequent \214le w)0 72 Q(ould alter that timestamp.)-.1 E
0 Cg EP
%%Page: 39 39
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(Similarly)0 12 Q 2.5(,n)-.65 G
(on-writable directories are initially created with)-2.5 E
(write permissions \(so that their contents can be restored\).)0 24 Q
(The)0 36 Q(<b>archi)0 48 Q -.15(ve)-.25 G(_write_disk_ne).15 E(w</b>)
-.25 E(library maintains a list of all such deferred attrib)0 60 Q
(utes and)-.2 E(sets them when this function is in)0 72 Q -.2(vo)-.4 G
-.1(ke).2 G(d.).1 E 0 Cg EP
%%Page: 40 40
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(<p><dt><b>archi)0 12 Q -.15(ve)-.25 G
(_write_\214nish</b>\(<code></code>\)<dd>).15 E(In)0 24 Q -.2(vo)-.4 G
-.1(ke).2 G(s).1 E(<b>archi)0 36 Q -.15(ve)-.25 G
(_write_close</b>\(<code></code>\)).15 E(if it w)0 48 Q(as not in)-.1 E
-.2(vo)-.4 G -.1(ke).2 G 2.5(dm).1 G(anually)-2.5 E 2.5(,t)-.65 G
(hen releases all resources.)-2.5 E(</dl>)0 60 Q
(More information about the)0 72 Q 0 Cg EP
%%Page: 41 41
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(<i></i><i>struct</i><i> archi)0 12 Q -.15(ve)
-.25 G(</i>).15 E(object and the o)0 24 Q -.15(ve)-.15 G
(rall design of the library can be found in the).15 E
(<a href="../html3/libarchi)0 36 Q -.15(ve)-.25 G(.html">libarchi).15 E
-.15(ve)-.25 G(\(3\)</a>).15 E -.15(ove)0 48 S(rvie).15 E -.65(w.)-.25 G
(Man)0 60 Q 2.5(yo)-.15 G 2.5(ft)-2.5 G
(hese functions are also documented under)-2.5 E
(<a href="../html3/archi)0 72 Q -.15(ve)-.25 G(_write.html">archi).15 E
-.15(ve)-.25 G(_write\(3\)</a>.).15 E 0 Cg EP
%%Page: 42 42
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(<h3 id="RETURN V)36 12 Q(ALUES">)-1.35 E
(RETURN V)36 24 Q(ALUES)-1.35 E(</h3>)36 36 Q(Most functions return)0 48
Q(<b></b><b>ARCHIVE_OK</b>)0 60 Q(\(zero\) on success, or one of se)0 72
Q -.15(ve)-.25 G(ral non-zero).15 E 0 Cg EP
%%Page: 43 43
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(error codes for errors.)0 12 Q
(Speci\214c error codes include:)0 24 Q(<b></b><b>ARCHIVE_RETR)0 36 Q
(Y</b>)-.65 E(for operations that might succeed if retried,)0 48 Q
(<b></b><b>ARCHIVE_W)0 60 Q(ARN</b>)-1.2 E
(for unusual conditions that do not pre)0 72 Q -.15(ve)-.25 G
(nt further operations, and).15 E 0 Cg EP
%%Page: 44 44
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(<b></b><b>ARCHIVE_F)0 12 Q -1.21 -1.11(AT A)-.74
H(L</b>)1.11 E(for serious errors that mak)0 24 Q 2.5(er)-.1 G
(emaining operations impossible.)-2.5 E(The)0 36 Q(<b>archi)0 48 Q -.15
(ve)-.25 G(_errno</b>\(<code></code>\)).15 E(and)0 60 Q(<b>archi)0 72 Q
-.15(ve)-.25 G(_error_string</b>\(<code></code>\)).15 E 0 Cg EP
%%Page: 45 45
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(functions can be used to retrie)0 12 Q .3 -.15
(ve a)-.25 H 2.5(na).15 G(ppropriate error code and a)-2.5 E(te)0 24 Q
(xtual error message.)-.15 E(<p>)36 36 Q(<b>archi)0 48 Q -.15(ve)-.25 G
(_write_disk_ne).15 E(w</b>\(<code></code>\))-.25 E
(returns a pointer to a ne)0 60 Q(wly-allocated)-.25 E(<font size="-1">\
</font><font size="-1">struct</font><font size="-1"> archi)0 72 Q -.15
(ve)-.25 G(</font>).15 E 0 Cg EP
%%Page: 46 46
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(object.)0 12 Q(<p>)36 24 Q(<b>archi)0 36 Q -.15
(ve)-.25 G(_write_data</b>\(<code></code>\)).15 E
(returns a count of the number of bytes actually written.)0 48 Q
(On error)0 60 Q 2.5(,-)-.4 G 2.5(1i)-2.5 G 2.5(sr)-2.5 G
(eturned and the)-2.5 E(<b>archi)0 72 Q -.15(ve)-.25 G
(_errno</b>\(<code></code>\)).15 E 0 Cg EP
%%Page: 47 47
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(and)0 12 Q(<b>archi)0 24 Q -.15(ve)-.25 G
(_error_string</b>\(<code></code>\)).15 E
(functions will return appropriate v)0 36 Q(alues.)-.25 E
(<h3 id="SEE ALSO">)36 48 Q(SEE ALSO)36 60 Q(</h3>)36 72 Q 0 Cg EP
%%Page: 48 48
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(<a href="../html3/archi)0 12 Q -.15(ve)-.25 G
(_read.html">archi).15 E -.15(ve)-.25 G(_read\(3\)</a>,).15 E
(<a href="../html3/archi)0 24 Q -.15(ve)-.25 G(_write.html">archi).15 E
-.15(ve)-.25 G(_write\(3\)</a>,).15 E(<a href="../html1/tar)0 36 Q
(.html">tar\(1\)</a>,)-.55 E(<a href="../html3/libarchi)0 48 Q -.15(ve)
-.25 G(.html">libarchi).15 E -.15(ve)-.25 G(\(3\)</a>).15 E
(<h3 id="HIST)36 60 Q(OR)-.18 E(Y">)-.65 E(HIST)36 72 Q(OR)-.18 E(Y)-.65
E 0 Cg EP
%%Page: 49 49
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(</h3>)36 12 Q(The)0 24 Q(<b>libarchi)0 36 Q -.15
(ve)-.25 G(</b>).15 E(library \214rst appeared in)0 48 Q(FreeBSD5.3.)0
60 Q(The)0 72 Q 0 Cg EP
%%Page: 50 50
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(<b>archi)0 12 Q -.15(ve)-.25 G(_write_disk</b>)
.15 E(interf)0 24 Q(ace w)-.1 E(as added to)-.1 E(<b>libarchi)0 36 Q
-.15(ve)-.25 G(</b><b>2.0</b>).15 E(and \214rst appeared in)0 48 Q
(FreeBSD6.3.)0 60 Q(<h3 id="A)36 72 Q(UTHORS">)-.55 E 0 Cg EP
%%Page: 51 51
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF -.55(AU)36 12 S(THORS).55 E(</h3>)36 24 Q(<p>)36
36 Q(The)0 48 Q(<b>libarchi)0 60 Q -.15(ve)-.25 G(</b>).15 E(library w)0
72 Q(as written by)-.1 E 0 Cg EP
%%Page: 52 52
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF -.35(Ti)0 12 S 2.5(mK).35 G
(ientzle &lt;kientzle@@acm.or)-2.5 E(g&gt;.)-.18 E(<h3 id="B)36 24 Q
(UGS">)-.1 E -.1(BU)36 36 S(GS).1 E(</h3>)36 48 Q
(Directories are actually e)0 60 Q(xtracted in tw)-.15 E 2.5(od)-.1 G
(istinct phases.)-2.5 E(Directories are created during)0 72 Q 0 Cg EP
%%Page: 53 53
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(<b>archi)0 12 Q -.15(ve)-.25 G
(_write_header</b>\(<code></code>\),).15 E -.2(bu)0 24 S 2.5<748c>.2 G
(nal permissions are not set until)-2.5 E(<b>archi)0 36 Q -.15(ve)-.25 G
(_write_close</b>\(<code></code>\).).15 E
(This separation is necessary to correctly handle borderline)0 48 Q
(cases such as a non-writable directory containing)0 60 Q(\214les, b)0
72 Q(ut can cause une)-.2 E(xpected results.)-.15 E 0 Cg EP
%%Page: 54 54
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(In particular)0 12 Q 2.5(,d)-.4 G
(irectory permissions are not fully)-2.5 E(restored until the archi)0 24
Q .3 -.15(ve i)-.25 H 2.5(sc).15 G(losed.)-2.5 E(If you use)0 36 Q
(<a href="../html2/chdir)0 48 Q(.html">chdir\(2\)</a>)-.55 E
(to change the current directory between calls to)0 60 Q(<b>archi)0 72 Q
-.15(ve)-.25 G(_read_e).15 E(xtract</b>\(<code></code>\))-.15 E 0 Cg EP
%%Page: 55 55
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(or before calling)0 12 Q(<b>archi)0 24 Q -.15
(ve)-.25 G(_read_close</b>\(<code></code>\),).15 E
(you may confuse the permission-setting logic with)0 36 Q
(the result that directory permissions are restored)0 48 Q(incorrectly)0
60 Q(.)-.65 E(<p>)36 72 Q 0 Cg EP
%%Page: 56 56
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF
(The library attempts to create objects with \214lenames longer than)0
12 Q(<b></b><b>P)0 24 Q -1.11(AT)-.92 G(H_MAX</b>)1.11 E
(by creating pre\214x)0 36 Q
(es of the full path and changing the current directory)-.15 E(.)-.65 E
(Currently)0 48 Q 2.5(,t)-.65 G
(his logic is limited in scope; the \214xup pass does)-2.5 E(not w)0 60
Q(ork correctly for such objects and the symlink security check)-.1 E
(option disables the support for v)0 72 Q(ery long pathnames.)-.15 E 0
Cg EP
%%Page: 57 57
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(<p>)36 12 Q(Restoring the path)0 24 Q
(<code></code><code>aa/../bb</code>)0 36 Q
(does create each intermediate directory)0 48 Q(.)-.65 E(In particular)0
60 Q 2.5(,t)-.4 G(he directory)-2.5 E(<code></code><code>aa</code>)0 72
Q 0 Cg EP
%%Page: 58 58
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(is created as well as the \214nal object)0 12 Q
(<code></code><code>bb</code>.)0 24 Q(In theory)0 36 Q 2.5(,t)-.65 G
(his can be e)-2.5 E(xploited to create an entire directory heirarch)
-.15 E(y)-.05 E(with a single request.)0 48 Q
(Of course, this does not w)0 60 Q(ork if the)-.1 E
(<b></b><b>ARCHIVE_EXTRA)0 72 Q(CT_NODO)-.4 E(TDO)-.4 E(T</b>)-.4 E 0 Cg
EP
%%Page: 59 59
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(option is speci\214ed.)0 12 Q(<p>)36 24 Q
(Implicit directories are al)0 36 Q -.1(wa)-.1 G(ys created obe).1 E
(ying the current umask.)-.15 E(Explicit objects are created obe)0 48 Q
(ying the current umask unless)-.15 E(<b></b><b>ARCHIVE_EXTRA)0 60 Q
(CT_PERM</b>)-.4 E(is speci\214ed, in which case the)0 72 Q 2.5(yc)-.15
G(urrent umask is ignored.)-2.5 E 0 Cg EP
%%Page: 60 60
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(<p>)36 12 Q
(SGID and SUID bits are restored only if the correct user and)0 24 Q
(group could be set.)0 36 Q(If)0 48 Q(<b></b><b>ARCHIVE_EXTRA)0 60 Q
(CT_O)-.4 E(WNER</b>)-.35 E
(is not speci\214ed, then no attempt is made to set the o)0 72 Q
(wnership.)-.25 E 0 Cg EP
%%Page: 61 61
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF
(In this case, SGID and SUID bits are restored only if the)0 12 Q
(user and group of the \214nal object happen to match those speci\214ed)
0 24 Q(in the entry)0 36 Q(.)-.65 E(<p>)36 48 Q(The)0 60 Q -.74(``)0 72
S(standard').74 E(')-.74 E 0 Cg EP
%%Page: 62 62
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(user)0 12 Q
(-id and group-id lookup functions are not the def)-.2 E(aults because)
-.1 E(<a href="../html3/getgrnam.html">getgrnam\(3\)</a>)0 24 Q(and)0 36
Q(<a href="../html3/getpwnam.html">getpwnam\(3\)</a>)0 48 Q
(are sometimes too lar)0 60 Q(ge for particular applications.)-.18 E
(The current design allo)0 72 Q(ws the application author to use a more)
-.25 E 0 Cg EP
%%Page: 63 63
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(compact implementation when appropriate.)0 12 Q
(<p>)36 24 Q(There should be a corresponding)0 36 Q(<b>archi)0 48 Q -.15
(ve)-.25 G(_read_disk</b>).15 E(interf)0 60 Q(ace that w)-.1 E
(alks a directory heirarch)-.1 E 2.5(ya)-.05 G(nd returns archi)-2.5 E
-.15(ve)-.25 G(entry objects.)0 72 Q 0 Cg EP
%%Trailer
end
%%EOF
@


1.1.1.3
log
@libarchive-2.8.3: Build fix for Linux
@
text
@d1 892
a892 421
<!-- Creator     : groff version 1.19.2 -->
<!-- CreationDate: Sun Mar 14 19:50:25 2010 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta name="generator" content="groff -Thtml, see www.gnu.org">
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<meta name="Content-Style" content="text/css">
<style type="text/css">
       p     { margin-top: 0; margin-bottom: 0; }
       pre   { margin-top: 0; margin-bottom: 0; }
       table { margin-top: 0; margin-bottom: 0; }
</style>
<title></title>
</head>
<body>

<hr>


<p valign="top">archive_write_disk(3) FreeBSD Library
Functions Manual archive_write_disk(3)</p>

<p style="margin-top: 1em" valign="top"><b>NAME</b></p>

<p style="margin-left:8%;"><b>archive_write_disk_new</b>,
<b>archive_write_disk_set_options</b>,
<b>archive_write_disk_set_skip_file</b>,
<b>archive_write_disk_set_group_lookup</b>,
<b>archive_write_disk_set_standard_lookup</b>,
<b>archive_write_disk_set_user_lookup</b>,
<b>archive_write_header</b>, <b>archive_write_data</b>,
<b>archive_write_finish_entry</b>,
<b>archive_write_close</b>, <b>archive_write_finish</b>
&mdash; functions for creating objects on disk</p>


<p style="margin-top: 1em" valign="top"><b>SYNOPSIS</b></p>

<p style="margin-left:8%;"><b>#include
&lt;archive.h&gt;</b></p>

<p style="margin-left:8%; margin-top: 1em"><i>struct
archive *</i></p>


<p style="margin-left:14%;"><b>archive_write_disk_new</b>(<i>void</i>);</p>

<p style="margin-left:8%; margin-top: 1em"><i>int</i></p>


<p style="margin-left:14%;"><b>archive_write_disk_set_options</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>int&nbsp;flags</i>);</p>

<p style="margin-left:8%; margin-top: 1em"><i>int</i></p>


<p style="margin-left:14%;"><b>archive_write_disk_set_skip_file</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>dev_t</i>, <i>ino_t</i>);</p>

<p style="margin-left:8%; margin-top: 1em"><i>int</i></p>


<p valign="top"><b>archive_write_disk_set_group_lookup</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>void&nbsp;*</i>,
<i>gid_t&nbsp;(*)(void&nbsp;*,&nbsp;const&nbsp;char&nbsp;*gname,&nbsp;gid_t&nbsp;gid)</i>,
<i>void&nbsp;(*cleanup)(void&nbsp;*)</i>);</p>

<p style="margin-left:8%; margin-top: 1em"><i>int</i></p>


<p style="margin-left:14%;"><b>archive_write_disk_set_standard_lookup</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>

<p style="margin-left:8%; margin-top: 1em"><i>int</i></p>


<p valign="top"><b>archive_write_disk_set_user_lookup</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>void&nbsp;*</i>,
<i>uid_t&nbsp;(*)(void&nbsp;*,&nbsp;const&nbsp;char&nbsp;*uname,&nbsp;uid_t&nbsp;uid)</i>,
<i>void&nbsp;(*cleanup)(void&nbsp;*)</i>);</p>

<p style="margin-left:8%; margin-top: 1em"><i>int</i></p>


<p style="margin-left:14%;"><b>archive_write_header</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>struct&nbsp;archive_entry&nbsp;*</i>);</p>


<p style="margin-left:8%; margin-top: 1em"><i>ssize_t</i></p>


<p style="margin-left:14%;"><b>archive_write_data</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>const&nbsp;void&nbsp;*</i>, <i>size_t</i>);</p>

<p style="margin-left:8%; margin-top: 1em"><i>int</i></p>


<p style="margin-left:14%;"><b>archive_write_finish_entry</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>

<p style="margin-left:8%; margin-top: 1em"><i>int</i></p>


<p style="margin-left:14%;"><b>archive_write_close</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>

<p style="margin-left:8%; margin-top: 1em"><i>int</i></p>


<p style="margin-left:14%;"><b>archive_write_finish</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>


<p style="margin-top: 1em" valign="top"><b>DESCRIPTION</b></p>

<p style="margin-left:8%;">These functions provide a
complete API for creating objects on disk from struct
archive_entry descriptions. They are most naturally used
when extracting objects from an archive using the
<b>archive_read</b>() interface. The general process is to
read struct archive_entry objects from an archive, then
write those objects to a struct archive object created using
the <b>archive_write_disk</b>() family functions. This
interface is deliberately very similar to the
<b>archive_write</b>() interface used to write objects to a
streaming archive.</p>


<p style="margin-top: 1em" valign="top"><b>archive_write_disk_new</b>()</p>

<p style="margin-left:20%;">Allocates and initializes a
struct archive object suitable for writing objects to
disk.</p>


<p style="margin-top: 1em" valign="top"><b>archive_write_disk_set_skip_file</b>()</p>

<p style="margin-left:20%;">Records the device and inode
numbers of a file that should not be overwritten. This is
typically used to ensure that an extraction process does not
overwrite the archive from which objects are being read.
This capability is technically unnecessary but can be a
significant performance optimization in practice.</p>


<p style="margin-top: 1em" valign="top"><b>archive_write_disk_set_options</b>()</p>

<p style="margin-left:20%;">The options field consists of a
bitwise OR of one or more of the following values:</p>

<p valign="top"><b>ARCHIVE_EXTRACT_OWNER</b></p>

<p style="margin-left:32%;">The user and group IDs should
be set on the restored file. By default, the user and group
IDs are not restored.</p>

<p valign="top"><b>ARCHIVE_EXTRACT_PERM</b></p>

<p style="margin-left:32%;">Full permissions (including
SGID, SUID, and sticky bits) should be restored exactly as
specified, without obeying the current umask. Note that SUID
and SGID bits can only be restored if the user and group ID
of the object on disk are correct. If
<b>ARCHIVE_EXTRACT_OWNER</b> is not specified, then SUID and
SGID bits will only be restored if the default user and
group IDs of newly-created objects on disk happen to match
those specified in the archive entry. By default, only basic
permissions are restored, and umask is obeyed.</p>

<p valign="top"><b>ARCHIVE_EXTRACT_TIME</b></p>

<p style="margin-left:32%;">The timestamps (mtime, ctime,
and atime) should be restored. By default, they are ignored.
Note that restoring of atime is not currently supported.</p>

<p valign="top"><b>ARCHIVE_EXTRACT_NO_OVERWRITE</b></p>

<p style="margin-left:32%;">Existing files on disk will not
be overwritten. By default, existing regular files are
truncated and overwritten; existing directories will have
their permissions updated; other pre-existing objects are
unlinked and recreated from scratch.</p>

<p valign="top"><b>ARCHIVE_EXTRACT_UNLINK</b></p>

<p style="margin-left:32%;">Existing files on disk will be
unlinked before any attempt to create them. In some cases,
this can prove to be a significant performance improvement.
By default, existing files are truncated and rewritten, but
the file is not recreated. In particular, the default
behavior does not break existing hard links.</p>

<p valign="top"><b>ARCHIVE_EXTRACT_ACL</b></p>

<p style="margin-left:32%;">Attempt to restore ACLs. By
default, extended ACLs are ignored.</p>

<p valign="top"><b>ARCHIVE_EXTRACT_FFLAGS</b></p>

<p style="margin-left:32%;">Attempt to restore extended
file flags. By default, file flags are ignored.</p>

<p valign="top"><b>ARCHIVE_EXTRACT_XATTR</b></p>

<p style="margin-left:32%;">Attempt to restore POSIX.1e
extended attributes. By default, they are ignored.</p>

<p valign="top"><b>ARCHIVE_EXTRACT_SECURE_SYMLINKS</b></p>

<p style="margin-left:32%;">Refuse to extract any object
whose final location would be altered by a symlink on disk.
This is intended to help guard against a variety of mischief
caused by archives that (deliberately or otherwise) extract
files outside of the current directory. The default is not
to perform this check. If <b>ARCHIVE_EXTRACT_UNLINK</b> is
specified together with this option, the library will remove
any intermediate symlinks it finds and return an error only
if such symlink could not be removed.</p>

<p valign="top"><b>ARCHIVE_EXTRACT_SECURE_NODOTDOT</b></p>

<p style="margin-left:32%;">Refuse to extract a path that
contains a <i>..</i> element anywhere within it. The default
is to not refuse such paths. Note that paths ending in
<i>..</i> always cause an error, regardless of this
flag.</p>

<p valign="top"><b>ARCHIVE_EXTRACT_SPARSE</b></p>

<p style="margin-left:32%;">Scan data for blocks of NUL
bytes and try to recreate them with holes. This results in
sparse files, independent of whether the archive format
supports or uses them.</p>


<p style="margin-top: 1em" valign="top"><b>archive_write_disk_set_group_lookup</b>(),
<b>archive_write_disk_set_user_lookup</b>()</p>

<p style="margin-left:20%;">The struct archive_entry
objects contain both names and ids that can be used to
identify users and groups. These names and ids describe the
ownership of the file itself and also appear in ACL lists.
By default, the library uses the ids and ignores the names,
but this can be overridden by registering user and group
lookup functions. To register, you must provide a lookup
function which accepts both a name and id and returns a
suitable id. You may also provide a void * pointer to a
private data structure and a cleanup function for that data.
The cleanup function will be invoked when the struct archive
object is destroyed.</p>


<p style="margin-top: 1em" valign="top"><b>archive_write_disk_set_standard_lookup</b>()</p>

<p style="margin-left:20%;">This convenience function
installs a standard set of user and group lookup functions.
These functions use getpwnam(3) and getgrnam(3) to convert
names to ids, defaulting to the ids if the names cannot be
looked up. These functions also implement a simple memory
cache to reduce the number of calls to getpwnam(3) and
getgrnam(3).</p>


<p style="margin-top: 1em" valign="top"><b>archive_write_header</b>()</p>

<p style="margin-left:20%;">Build and write a header using
the data in the provided struct archive_entry structure. See
archive_entry(3) for information on creating and populating
struct archive_entry objects.</p>


<p style="margin-top: 1em" valign="top"><b>archive_write_data</b>()</p>

<p style="margin-left:20%;">Write data corresponding to the
header just written. Returns number of bytes written or -1
on error.</p>


<p style="margin-top: 1em" valign="top"><b>archive_write_finish_entry</b>()</p>

<p style="margin-left:20%;">Close out the entry just
written. Ordinarily, clients never need to call this, as it
is called automatically by
<b>archive_write_next_header</b>() and
<b>archive_write_close</b>() as needed.</p>


<p style="margin-top: 1em" valign="top"><b>archive_write_close</b>()</p>

<p style="margin-left:20%;">Set any attributes that could
not be set during the initial restore. For example,
directory timestamps are not restored initially because
restoring a subsequent file would alter that timestamp.
Similarly, non-writable directories are initially created
with write permissions (so that their contents can be
restored). The <b>archive_write_disk_new</b> library
maintains a list of all such deferred attributes and sets
them when this function is invoked.</p>


<p style="margin-top: 1em" valign="top"><b>archive_write_finish</b>()</p>

<p style="margin-left:20%;">Invokes
<b>archive_write_close</b>() if it was not invoked manually,
then releases all resources.</p>

<p style="margin-left:8%;">More information about the
<i>struct archive</i> object and the overall design of the
library can be found in the libarchive(3) overview. Many of
these functions are also documented under
archive_write(3).</p>

<p style="margin-top: 1em" valign="top"><b>RETURN
VALUES</b></p>

<p style="margin-left:8%;">Most functions return
<b>ARCHIVE_OK</b> (zero) on success, or one of several
non-zero error codes for errors. Specific error codes
include: <b>ARCHIVE_RETRY</b> for operations that might
succeed if retried, <b>ARCHIVE_WARN</b> for unusual
conditions that do not prevent further operations, and
<b>ARCHIVE_FATAL</b> for serious errors that make remaining
operations impossible. The <b>archive_errno</b>() and
<b>archive_error_string</b>() functions can be used to
retrieve an appropriate error code and a textual error
message.</p>


<p style="margin-left:8%; margin-top: 1em"><b>archive_write_disk_new</b>()
returns a pointer to a newly-allocated struct archive
object.</p>


<p style="margin-left:8%; margin-top: 1em"><b>archive_write_data</b>()
returns a count of the number of bytes actually written. On
error, -1 is returned and the <b>archive_errno</b>() and
<b>archive_error_string</b>() functions will return
appropriate values.</p>

<p style="margin-top: 1em" valign="top"><b>SEE ALSO</b></p>

<p style="margin-left:8%;">archive_read(3),
archive_write(3), tar(1), libarchive(3)</p>

<p style="margin-top: 1em" valign="top"><b>HISTORY</b></p>

<p style="margin-left:8%;">The <b>libarchive</b> library
first appeared in FreeBSD&nbsp;5.3. The
<b>archive_write_disk</b> interface was added to
<b>libarchive 2.0</b> and first appeared in
FreeBSD&nbsp;6.3.</p>

<p style="margin-top: 1em" valign="top"><b>AUTHORS</b></p>

<p style="margin-left:8%;">The <b>libarchive</b> library
was written by Tim Kientzle
&lang;kientzle@@acm.org&rang;.</p>

<p style="margin-top: 1em" valign="top"><b>BUGS</b></p>

<p style="margin-left:8%;">Directories are actually
extracted in two distinct phases. Directories are created
during <b>archive_write_header</b>(), but final permissions
are not set until <b>archive_write_close</b>(). This
separation is necessary to correctly handle borderline cases
such as a non-writable directory containing files, but can
cause unexpected results. In particular, directory
permissions are not fully restored until the archive is
closed. If you use chdir(2) to change the current directory
between calls to <b>archive_read_extract</b>() or before
calling <b>archive_read_close</b>(), you may confuse the
permission-setting logic with the result that directory
permissions are restored incorrectly.</p>

<p style="margin-left:8%; margin-top: 1em">The library
attempts to create objects with filenames longer than
<b>PATH_MAX</b> by creating prefixes of the full path and
changing the current directory. Currently, this logic is
limited in scope; the fixup pass does not work correctly for
such objects and the symlink security check option disables
the support for very long pathnames.</p>

<p style="margin-left:8%; margin-top: 1em">Restoring the
path <i>aa/../bb</i> does create each intermediate
directory. In particular, the directory <i>aa</i> is created
as well as the final object <i>bb</i>. In theory, this can
be exploited to create an entire directory heirarchy with a
single request. Of course, this does not work if the
<b>ARCHIVE_EXTRACT_NODOTDOT</b> option is specified.</p>

<p style="margin-left:8%; margin-top: 1em">Implicit
directories are always created obeying the current umask.
Explicit objects are created obeying the current umask
unless <b>ARCHIVE_EXTRACT_PERM</b> is specified, in which
case they current umask is ignored.</p>

<p style="margin-left:8%; margin-top: 1em">SGID and SUID
bits are restored only if the correct user and group could
be set. If <b>ARCHIVE_EXTRACT_OWNER</b> is not specified,
then no attempt is made to set the ownership. In this case,
SGID and SUID bits are restored only if the user and group
of the final object happen to match those specified in the
entry.</p>

<p style="margin-left:8%; margin-top: 1em">The
&lsquo;&lsquo;standard&rsquo;&rsquo; user-id and group-id
lookup functions are not the defaults because getgrnam(3)
and getpwnam(3) are sometimes too large for particular
applications. The current design allows the application
author to use a more compact implementation when
appropriate.</p>

<p style="margin-left:8%; margin-top: 1em">There should be
a corresponding <b>archive_read_disk</b> interface that
walks a directory heirarchy and returns archive entry
objects.</p>


<p style="margin-left:8%; margin-top: 1em">FreeBSD&nbsp;9.0
August&nbsp;5, 2008 FreeBSD&nbsp;9.0</p>
<hr>
</body>
</html>
@


1.1.1.4
log
@Import libarchive-2.8.4:
- Improved reliability of hash function detection
- Fix issues on ancient FreeBSD, QNX, ancient NetBSD and Minix
@
text
@d1 421
a421 892
%!PS-Adobe-3.0
%%Creator: groff version 1.19.2
%%CreationDate: Wed Jun 30 11:55:52 2010
%%DocumentNeededResources: font Times-Roman
%%DocumentSuppliedResources: procset grops 1.19 2
%%Pages: 63
%%PageOrder: Ascend
%%DocumentMedia: Default 612 792 0 () ()
%%Orientation: Portrait
%%EndComments
%%BeginDefaults
%%PageMedia: Default
%%EndDefaults
%%BeginProlog
%%BeginResource: procset grops 1.19 2
%!PS-Adobe-3.0 Resource-ProcSet
/setpacking where{
pop
currentpacking
true setpacking
}if
/grops 120 dict dup begin
/SC 32 def
/A/show load def
/B{0 SC 3 -1 roll widthshow}bind def
/C{0 exch ashow}bind def
/D{0 exch 0 SC 5 2 roll awidthshow}bind def
/E{0 rmoveto show}bind def
/F{0 rmoveto 0 SC 3 -1 roll widthshow}bind def
/G{0 rmoveto 0 exch ashow}bind def
/H{0 rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
/I{0 exch rmoveto show}bind def
/J{0 exch rmoveto 0 SC 3 -1 roll widthshow}bind def
/K{0 exch rmoveto 0 exch ashow}bind def
/L{0 exch rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
/M{rmoveto show}bind def
/N{rmoveto 0 SC 3 -1 roll widthshow}bind def
/O{rmoveto 0 exch ashow}bind def
/P{rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
/Q{moveto show}bind def
/R{moveto 0 SC 3 -1 roll widthshow}bind def
/S{moveto 0 exch ashow}bind def
/T{moveto 0 exch 0 SC 5 2 roll awidthshow}bind def
/SF{
findfont exch
[exch dup 0 exch 0 exch neg 0 0]makefont
dup setfont
[exch/setfont cvx]cvx bind def
}bind def
/MF{
findfont
[5 2 roll
0 3 1 roll
neg 0 0]makefont
dup setfont
[exch/setfont cvx]cvx bind def
}bind def
/level0 0 def
/RES 0 def
/PL 0 def
/LS 0 def
/MANUAL{
statusdict begin/manualfeed true store end
}bind def
/PLG{
gsave newpath clippath pathbbox grestore
exch pop add exch pop
}bind def
/BP{
/level0 save def
1 setlinecap
1 setlinejoin
72 RES div dup scale
LS{
90 rotate
}{
0 PL translate
}ifelse
1 -1 scale
}bind def
/EP{
level0 restore
showpage
}def
/DA{
newpath arcn stroke
}bind def
/SN{
transform
.25 sub exch .25 sub exch
round .25 add exch round .25 add exch
itransform
}bind def
/DL{
SN
moveto
SN
lineto stroke
}bind def
/DC{
newpath 0 360 arc closepath
}bind def
/TM matrix def
/DE{
TM currentmatrix pop
translate scale newpath 0 0 .5 0 360 arc closepath
TM setmatrix
}bind def
/RC/rcurveto load def
/RL/rlineto load def
/ST/stroke load def
/MT/moveto load def
/CL/closepath load def
/Fr{
setrgbcolor fill
}bind def
/setcmykcolor where{
pop
/Fk{
setcmykcolor fill
}bind def
}if
/Fg{
setgray fill
}bind def
/FL/fill load def
/LW/setlinewidth load def
/Cr/setrgbcolor load def
/setcmykcolor where{
pop
/Ck/setcmykcolor load def
}if
/Cg/setgray load def
/RE{
findfont
dup maxlength 1 index/FontName known not{1 add}if dict begin
{
1 index/FID ne{def}{pop pop}ifelse
}forall
/Encoding exch def
dup/FontName exch def
currentdict end definefont pop
}bind def
/DEFS 0 def
/EBEGIN{
moveto
DEFS begin
}bind def
/EEND/end load def
/CNT 0 def
/level1 0 def
/PBEGIN{
/level1 save def
translate
div 3 1 roll div exch scale
neg exch neg exch translate
0 setgray
0 setlinecap
1 setlinewidth
0 setlinejoin
10 setmiterlimit
[]0 setdash
/setstrokeadjust where{
pop
false setstrokeadjust
}if
/setoverprint where{
pop
false setoverprint
}if
newpath
/CNT countdictstack def
userdict begin
/showpage{}def
/setpagedevice{}def
}bind def
/PEND{
countdictstack CNT sub{end}repeat
level1 restore
}bind def
end def
/setpacking where{
pop
setpacking
}if
%%EndResource
%%EndProlog
%%BeginSetup
%%BeginFeature: *PageSize Default
<< /PageSize [ 612 792 ] /ImagingBBox null >> setpagedevice
%%EndFeature
%%IncludeResource: font Times-Roman
grops begin/DEFS 1 dict def DEFS begin/u{.001 mul}bind def end/RES 72
def/PL 792 def/LS false def/ENC0[/asciicircum/asciitilde/Scaron/Zcaron
/scaron/zcaron/Ydieresis/trademark/quotesingle/Euro/.notdef/.notdef
/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
/.notdef/.notdef/space/exclam/quotedbl/numbersign/dollar/percent
/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen
/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon
/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O
/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/circumflex
/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y
/z/braceleft/bar/braceright/tilde/.notdef/quotesinglbase/guillemotleft
/guillemotright/bullet/florin/fraction/perthousand/dagger/daggerdbl
/endash/emdash/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/hungarumlaut
/dotaccent/breve/caron/ring/ogonek/quotedblleft/quotedblright/oe/lslash
/quotedblbase/OE/Lslash/.notdef/exclamdown/cent/sterling/currency/yen
/brokenbar/section/dieresis/copyright/ordfeminine/guilsinglleft
/logicalnot/minus/registered/macron/degree/plusminus/twosuperior
/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior
/ordmasculine/guilsinglright/onequarter/onehalf/threequarters
/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE
/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex
/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis
/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn
/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla
/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis
/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash
/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]def
/Times-Roman@@0 ENC0/Times-Roman RE
%%EndSetup
%%Page: 1 1
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(<html>)0 12 Q(<head>)0 24 Q(<title>)36 36 Q
(August 5, 2008 archi)74.5 48 Q -.15(ve)-.25 G(_write_disk 3).15 E
(</title>)36 72 Q 0 Cg EP
%%Page: 2 2
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(<style type="te)36 12 Q(xt/css">)-.15 E(<!--)36
24 Q(body { mar)72 36 Q(gin-left:4%; })-.18 E(H1, H2, H3, H4, H5 {)72 48
Q(color: maroon; padding: 4pt; mar)108 60 Q(gin-left: -4%;)-.18 E
(border: solid; border)108 72 Q(-width: thin; width: 100%;)-.2 E 0 Cg EP
%%Page: 3 3
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(background: r)108 12 Q(gb\(204,204,255\))-.18 E
(})72 24 Q(-->)36 36 Q(</style>)36 48 Q(</head>)0 60 Q
(<body bgcolor="#FFFFFF" te)0 72 Q(xt="#000000">)-.15 E 0 Cg EP
%%Page: 4 4
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(<h3 id="N)36 12 Q(AME">)-.35 E -.35(NA)36 24 S
(ME).35 E(</h3>)36 36 Q(<b>archi)0 48 Q -.15(ve)-.25 G(_write_disk_ne)
.15 E(w</b>,)-.25 E(<b>archi)0 60 Q -.15(ve)-.25 G
(_write_disk_set_options</b>,).15 E(<b>archi)0 72 Q -.15(ve)-.25 G
(_write_disk_set_skip_\214le</b>,).15 E 0 Cg EP
%%Page: 5 5
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(<b>archi)0 12 Q -.15(ve)-.25 G
(_write_disk_set_group_lookup</b>,).15 E(<b>archi)0 24 Q -.15(ve)-.25 G
(_write_disk_set_standard_lookup</b>,).15 E(<b>archi)0 36 Q -.15(ve)-.25
G(_write_disk_set_user_lookup</b>,).15 E(<b>archi)0 48 Q -.15(ve)-.25 G
(_write_header</b>,).15 E(<b>archi)0 60 Q -.15(ve)-.25 G
(_write_data</b>,).15 E(<b>archi)0 72 Q -.15(ve)-.25 G
(_write_\214nish_entry</b>,).15 E 0 Cg EP
%%Page: 6 6
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(<b>archi)0 12 Q -.15(ve)-.25 G
(_write_close</b>,).15 E(<b>archi)0 24 Q -.15(ve)-.25 G
(_write_\214nish</b>).15 E 2.5(-f)0 36 S
(unctions for creating objects on disk)-2.5 E(<h3 id="SYNOPSIS">)36 48 Q
(SYNOPSIS)36 60 Q(</h3>)36 72 Q 0 Cg EP
%%Page: 7 7
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF
(<br><br><code></code><code>struct</code><code> archi)0 12 Q -.15(ve)
-.25 G(</code><code> *</code>).15 E(<b>archi)0 24 Q -.15(ve)-.25 G
(_write_disk_ne).15 E(w</b>\(<code></code><code>v)-.25 E(oid</code>\))
-.2 E(<br><br><code></code><code>int</code>)0 36 Q(<b>archi)0 48 Q -.15
(ve)-.25 G(_write_disk_set_options</b>\(<code></code><code>struct archi)
.15 E .3 -.15(ve *)-.25 H(</code><code>, int \215ags</code>\)).15 E
(<br><br><code></code><code>int</code>)0 60 Q(<b>archi)0 72 Q -.15(ve)
-.25 G(_write_disk_set_skip_\214le</b>\(<code></code><code>struct archi)
.15 E .3 -.15(ve *)-.25 H(</code><code>, de).15 E
(v_t</code><code>, ino_t</code>\))-.25 E 0 Cg EP
%%Page: 8 8
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(<br><br><code></code><code>int</code>)0 12 Q
(<b>archi)0 24 Q -.15(ve)-.25 G
(_write_disk_set_group_lookup</b>\(<code></code>).15 E
(<code></code><code>struct archi)0 36 Q .3 -.15(ve *)-.25 H(</code>).15
E(<code></code><code>v)0 48 Q(oid *</code>)-.2 E
(<code></code>gid_t \(*\)\(v)0 60 Q
(oid *, const char *gname, gid_t gid\))-.2 E(<code></code><code>v)0 72 Q
(oid \(*cleanup\)\(v)-.2 E(oid *\)</code>)-.2 E 0 Cg EP
%%Page: 9 9
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(\))0 12 Q(<br><br><code></code><code>int</code>)
0 24 Q(<b>archi)0 36 Q -.15(ve)-.25 G
(_write_disk_set_standard_lookup</b>\(<code></code><code>struct archi)
.15 E .3 -.15(ve *)-.25 H(</code>\)).15 E
(<br><br><code></code><code>int</code>)0 48 Q(<b>archi)0 60 Q -.15(ve)
-.25 G(_write_disk_set_user_lookup</b>\(<code></code>).15 E
(<code></code><code>struct archi)0 72 Q .3 -.15(ve *)-.25 H(</code>).15
E 0 Cg EP
%%Page: 10 10
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(<code></code><code>v)0 12 Q(oid *</code>)-.2 E
(<code></code>uid_t \(*\)\(v)0 24 Q
(oid *, const char *uname, uid_t uid\))-.2 E(<code></code><code>v)0 36 Q
(oid \(*cleanup\)\(v)-.2 E(oid *\)</code>)-.2 E(\))0 48 Q
(<br><br><code></code><code>int</code>)0 60 Q(<b>archi)0 72 Q -.15(ve)
-.25 G(_write_header</b>\(<code></code><code>struct archi).15 E .3 -.15
(ve *)-.25 H(</code><code>, struct archi).15 E -.15(ve)-.25 G
(_entry *</code>\)).15 E 0 Cg EP
%%Page: 11 11
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(<br><br><code></code><code>ssize_t</code>)0 12 Q
(<b>archi)0 24 Q -.15(ve)-.25 G
(_write_data</b>\(<code></code><code>struct archi).15 E .3 -.15(ve *)
-.25 H(</code><code>, const v).15 E(oid *</code><code>, size_t</code>\))
-.2 E(<br><br><code></code><code>int</code>)0 36 Q(<b>archi)0 48 Q -.15
(ve)-.25 G(_write_\214nish_entry</b>\(<code></code><code>struct archi)
.15 E .3 -.15(ve *)-.25 H(</code>\)).15 E
(<br><br><code></code><code>int</code>)0 60 Q(<b>archi)0 72 Q -.15(ve)
-.25 G(_write_close</b>\(<code></code><code>struct archi).15 E .3 -.15
(ve *)-.25 H(</code>\)).15 E 0 Cg EP
%%Page: 12 12
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(<br><br><code></code><code>int</code>)0 12 Q
(<b>archi)0 24 Q -.15(ve)-.25 G
(_write_\214nish</b>\(<code></code><code>struct archi).15 E .3 -.15
(ve *)-.25 H(</code>\)).15 E(<h3 id="DESCRIPTION">)36 36 Q(DESCRIPTION)
36 48 Q(</h3>)36 60 Q(These functions pro)0 72 Q
(vide a complete API for creating objects on)-.15 E 0 Cg EP
%%Page: 13 13
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(disk from)0 12 Q(<font size="-1"></font><font s\
ize="-1">struct</font><font size="-1"> archi)0 24 Q -.15(ve)-.25 G
(_entry</font>).15 E(descriptions.)0 36 Q(The)0 48 Q 2.5(ya)-.15 G
(re most naturally used when e)-2.5 E(xtracting objects from an archi)
-.15 E -.15(ve)-.25 G(using the)0 60 Q(<b>archi)0 72 Q -.15(ve)-.25 G
(_read</b>\(<code></code>\)).15 E 0 Cg EP
%%Page: 14 14
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(interf)0 12 Q(ace.)-.1 E
(The general process is to read)0 24 Q(<font size="-1"></font><font siz\
e="-1">struct</font><font size="-1"> archi)0 36 Q -.15(ve)-.25 G
(_entry</font>).15 E(objects from an archi)0 48 Q -.15(ve)-.25 G 2.5(,t)
.15 G(hen write those objects to a)-2.5 E(<font size="-1"></font><font \
size="-1">struct</font><font size="-1"> archi)0 60 Q -.15(ve)-.25 G
(</font>).15 E(object created using the)0 72 Q 0 Cg EP
%%Page: 15 15
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(<b>archi)0 12 Q -.15(ve)-.25 G
(_write_disk</b>\(<code></code>\)).15 E -.1(fa)0 24 S(mily functions.).1
E(This interf)0 36 Q(ace is deliberately v)-.1 E(ery similar to the)-.15
E(<b>archi)0 48 Q -.15(ve)-.25 G(_write</b>\(<code></code>\)).15 E
(interf)0 60 Q(ace used to write objects to a streaming archi)-.1 E -.15
(ve)-.25 G(.).15 E(<dl compact>)0 72 Q 0 Cg EP
%%Page: 16 16
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(<p><dt><b>archi)0 12 Q -.15(ve)-.25 G
(_write_disk_ne).15 E(w</b>\(<code></code>\)<dd>)-.25 E
(Allocates and initializes a)0 24 Q(<font size="-1"></font><font size="\
-1">struct</font><font size="-1"> archi)0 36 Q -.15(ve)-.25 G(</font>)
.15 E(object suitable for writing objects to disk.)0 48 Q
(<p><dt><b>archi)0 60 Q -.15(ve)-.25 G
(_write_disk_set_skip_\214le</b>\(<code></code>\)<dd>).15 E
(Records the de)0 72 Q
(vice and inode numbers of a \214le that should not be)-.25 E 0 Cg EP
%%Page: 17 17
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF -.15(ove)0 12 S(rwritten.).15 E
(This is typically used to ensure that an e)0 24 Q
(xtraction process does not)-.15 E -.15(ove)0 36 S(rwrite the archi).15
E .3 -.15(ve f)-.25 H(rom which objects are being read.).15 E
(This capability is technically unnecessary b)0 48 Q
(ut can be a signi\214cant)-.2 E(performance optimization in practice.)0
60 Q(<p><dt><b>archi)0 72 Q -.15(ve)-.25 G
(_write_disk_set_options</b>\(<code></code>\)<dd>).15 E 0 Cg EP
%%Page: 18 18
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF
(The options \214eld consists of a bitwise OR of one or more of the)0 12
Q(follo)0 24 Q(wing v)-.25 E(alues:)-.25 E(<dl compact>)0 36 Q
(<dt><b></b><b>ARCHIVE_EXTRA)0 48 Q(CT_O)-.4 E(WNER</b><dd>)-.35 E
(The user and group IDs should be set on the restored \214le.)0 60 Q
(By def)0 72 Q(ault, the user and group IDs are not restored.)-.1 E 0 Cg
EP
%%Page: 19 19
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(<dt><b></b><b>ARCHIVE_EXTRA)0 12 Q
(CT_PERM</b><dd>)-.4 E
(Full permissions \(including SGID, SUID, and stick)0 24 Q 2.5(yb)-.15 G
(its\) should)-2.5 E(be restored e)0 36 Q
(xactly as speci\214ed, without obe)-.15 E(ying the)-.15 E
(current umask.)0 48 Q
(Note that SUID and SGID bits can only be restored if the)0 60 Q
(user and group ID of the object on disk are correct.)0 72 Q 0 Cg EP
%%Page: 20 20
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(If)0 12 Q(<b></b><b>ARCHIVE_EXTRA)0 24 Q(CT_O)
-.4 E(WNER</b>)-.35 E
(is not speci\214ed, then SUID and SGID bits will only be restored)0 36
Q(if the def)0 48 Q(ault user and group IDs of ne)-.1 E
(wly-created objects on disk)-.25 E
(happen to match those speci\214ed in the archi)0 60 Q .3 -.15(ve e)-.25
H(ntry).15 E(.)-.65 E(By def)0 72 Q
(ault, only basic permissions are restored, and umask is obe)-.1 E(yed.)
-.15 E 0 Cg EP
%%Page: 21 21
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(<dt><b></b><b>ARCHIVE_EXTRA)0 12 Q
(CT_TIME</b><dd>)-.4 E
(The timestamps \(mtime, ctime, and atime\) should be restored.)0 24 Q
(By def)0 36 Q(ault, the)-.1 E 2.5(ya)-.15 G(re ignored.)-2.5 E
(Note that restoring of atime is not currently supported.)0 48 Q
(<dt><b></b><b>ARCHIVE_EXTRA)0 60 Q(CT_NO_O)-.4 E(VER)-.5 E
(WRITE</b><dd>)-.55 E(Existing \214les on disk will not be o)0 72 Q -.15
(ve)-.15 G(rwritten.).15 E 0 Cg EP
%%Page: 22 22
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(By def)0 12 Q(ault, e)-.1 E(xisting re)-.15 E
(gular \214les are truncated and o)-.15 E -.15(ve)-.15 G(rwritten;).15 E
-.15(ex)0 24 S(isting directories will ha).15 E .3 -.15(ve t)-.2 H
(heir permissions updated;).15 E(other pre-e)0 36 Q
(xisting objects are unlink)-.15 E(ed and recreated from scratch.)-.1 E
(<dt><b></b><b>ARCHIVE_EXTRA)0 48 Q(CT_UNLINK</b><dd>)-.4 E
(Existing \214les on disk will be unlink)0 60 Q(ed before an)-.1 E 2.5
(ya)-.15 G(ttempt to)-2.5 E(create them.)0 72 Q 0 Cg EP
%%Page: 23 23
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(In some cases, this can pro)0 12 Q .3 -.15(ve t)
-.15 H 2.5(ob).15 G 2.5(eas)-2.5 G(igni\214cant performance impro)-2.5 E
-.15(ve)-.15 G(ment.).15 E(By def)0 24 Q(ault, e)-.1 E
(xisting \214les are truncated and re)-.15 E(written, b)-.25 E(ut)-.2 E
(the \214le is not recreated.)0 36 Q(In particular)0 48 Q 2.5(,t)-.4 G
(he def)-2.5 E(ault beha)-.1 E(vior does not break e)-.2 E
(xisting hard links.)-.15 E(<dt><b></b><b>ARCHIVE_EXTRA)0 60 Q(CT_A)-.4
E(CL</b><dd>)-.4 E(Attempt to restore A)0 72 Q(CLs.)-.4 E 0 Cg EP
%%Page: 24 24
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(By def)0 12 Q(ault, e)-.1 E(xtended A)-.15 E
(CLs are ignored.)-.4 E(<dt><b></b><b>ARCHIVE_EXTRA)0 24 Q(CT_FFLA)-.4 E
(GS</b><dd>)-.4 E(Attempt to restore e)0 36 Q(xtended \214le \215ags.)
-.15 E(By def)0 48 Q(ault, \214le \215ags are ignored.)-.1 E
(<dt><b></b><b>ARCHIVE_EXTRA)0 60 Q(CT_XA)-.4 E(TTR</b><dd>)-1.11 E
(Attempt to restore POSIX.1e e)0 72 Q(xtended attrib)-.15 E(utes.)-.2 E
0 Cg EP
%%Page: 25 25
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(By def)0 12 Q(ault, the)-.1 E 2.5(ya)-.15 G
(re ignored.)-2.5 E(<dt><b></b><b>ARCHIVE_EXTRA)0 24 Q
(CT_SECURE_SYMLINKS</b><dd>)-.4 E(Refuse to e)0 36 Q(xtract an)-.15 E
2.5(yo)-.15 G(bject whose \214nal location w)-2.5 E(ould be altered)-.1
E(by a symlink on disk.)0 48 Q(This is intended to help guard ag)0 60 Q
(ainst a v)-.05 E(ariety of mischief)-.25 E(caused by archi)0 72 Q -.15
(ve)-.25 G 2.5(st).15 G(hat \(deliberately or otherwise\) e)-2.5 E
(xtract)-.15 E 0 Cg EP
%%Page: 26 26
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(\214les outside of the current directory)0 12 Q
(.)-.65 E(The def)0 24 Q(ault is not to perform this check.)-.1 E(If)0
36 Q(<b></b><b>ARCHIVE_EXTRA)0 48 Q(CT_UNLINK</b>)-.4 E
(is speci\214ed together with this option, the library will)0 60 Q(remo)
0 72 Q .3 -.15(ve a)-.15 H .3 -.15(ny i).15 H
(ntermediate symlinks it \214nds and return an).15 E 0 Cg EP
%%Page: 27 27
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(error only if such symlink could not be remo)0
12 Q -.15(ve)-.15 G(d.).15 E(<dt><b></b><b>ARCHIVE_EXTRA)0 24 Q
(CT_SECURE_NODO)-.4 E(TDO)-.4 E(T</b><dd>)-.4 E(Refuse to e)0 36 Q
(xtract a path that contains a)-.15 E(<code></code><code>..</code>)0 48
Q(element an)0 60 Q(ywhere within it.)-.15 E(The def)0 72 Q
(ault is to not refuse such paths.)-.1 E 0 Cg EP
%%Page: 28 28
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(Note that paths ending in)0 12 Q
(<code></code><code>..</code>)0 24 Q(al)0 36 Q -.1(wa)-.1 G
(ys cause an error).1 E 2.5(,r)-.4 G -2.25 -.15(eg a)-2.5 H
(rdless of this \215ag.).15 E(<dt><b></b><b>ARCHIVE_EXTRA)0 48 Q(CT_SP)
-.4 E(ARSE</b><dd>)-.92 E
(Scan data for blocks of NUL bytes and try to recreate them with holes.)
0 60 Q(This results in sparse \214les, independent of whether the archi)
0 72 Q .3 -.15(ve f)-.25 H(ormat).15 E 0 Cg EP
%%Page: 29 29
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(supports or uses them.)0 12 Q(</dl>)0 24 Q
(<p><dt>Xo<dd>)0 36 Q(<b>archi)0 48 Q -.15(ve)-.25 G
(_write_disk_set_group_lookup</b>\(<code></code>\),).15 E(<b>archi)0 60
Q -.15(ve)-.25 G(_write_disk_set_user_lookup</b>\(<code></code>\)).15 E
(The)0 72 Q 0 Cg EP
%%Page: 30 30
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(<font size="-1"></font><font size="-1">struct</\
font><font size="-1"> archi)0 12 Q -.15(ve)-.25 G(_entry</font>).15 E
(objects contain both names and ids that can be used to identify users)0
24 Q(and groups.)0 36 Q(These names and ids describe the o)0 48 Q
(wnership of the \214le itself and)-.25 E(also appear in A)0 60 Q
(CL lists.)-.4 E(By def)0 72 Q
(ault, the library uses the ids and ignores the names, b)-.1 E(ut)-.2 E
0 Cg EP
%%Page: 31 31
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(this can be o)0 12 Q -.15(ve)-.15 G
(rridden by re).15 E(gistering user and group lookup functions.)-.15 E
1.6 -.8(To r)0 24 T -.15(eg).8 G(ister).15 E 2.5(,y)-.4 G(ou must pro)
-2.5 E(vide a lookup function which)-.15 E
(accepts both a name and id and returns a suitable id.)0 36 Q -1.1(Yo)0
48 S 2.5(um)1.1 G(ay also pro)-2.5 E(vide a)-.15 E
(<font size="-1"></font><font size="-1">v)0 60 Q
(oid</font><font size="-1"> *</font>)-.2 E(pointer to a pri)0 72 Q -.25
(va)-.25 G(te data structure and a cleanup function for).25 E 0 Cg EP
%%Page: 32 32
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(that data.)0 12 Q
(The cleanup function will be in)0 24 Q -.2(vo)-.4 G -.1(ke).2 G 2.5(dw)
.1 G(hen the)-2.5 E(<font size="-1"></font><font size="-1">struct</font\
><font size="-1"> archi)0 36 Q -.15(ve)-.25 G(</font>).15 E
(object is destro)0 48 Q(yed.)-.1 E(<p><dt><b>archi)0 60 Q -.15(ve)-.25
G(_write_disk_set_standard_lookup</b>\(<code></code>\)<dd>).15 E
(This con)0 72 Q -.15(ve)-.4 G
(nience function installs a standard set of user).15 E 0 Cg EP
%%Page: 33 33
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(and group lookup functions.)0 12 Q
(These functions use)0 24 Q
(<a href="../html3/getpwnam.html">getpwnam\(3\)</a>)0 36 Q(and)0 48 Q
(<a href="../html3/getgrnam.html">getgrnam\(3\)</a>)0 60 Q(to con)0 72 Q
-.15(ve)-.4 G(rt names to ids, def).15 E
(aulting to the ids if the names cannot)-.1 E 0 Cg EP
%%Page: 34 34
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(be look)0 12 Q(ed up.)-.1 E
(These functions also implement a simple memory cache to reduce)0 24 Q
(the number of calls to)0 36 Q
(<a href="../html3/getpwnam.html">getpwnam\(3\)</a>)0 48 Q(and)0 60 Q
(<a href="../html3/getgrnam.html">getgrnam\(3\)</a>.)0 72 Q 0 Cg EP
%%Page: 35 35
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(<p><dt><b>archi)0 12 Q -.15(ve)-.25 G
(_write_header</b>\(<code></code>\)<dd>).15 E
(Build and write a header using the data in the pro)0 24 Q(vided)-.15 E
(<font size="-1"></font><font size="-1">struct</font><font size="-1"> a\
rchi)0 36 Q -.15(ve)-.25 G(_entry</font>).15 E(structure.)0 48 Q(See)0
60 Q(<a href="../html3/archi)0 72 Q -.15(ve)-.25 G(_entry).15 E
(.html">archi)-.65 E -.15(ve)-.25 G(_entry\(3\)</a>).15 E 0 Cg EP
%%Page: 36 36
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(for information on creating and populating)0 12
Q(<font size="-1"></font><font size="-1">struct</font><font size="-1"> \
archi)0 24 Q -.15(ve)-.25 G(_entry</font>).15 E(objects.)0 36 Q
(<p><dt><b>archi)0 48 Q -.15(ve)-.25 G
(_write_data</b>\(<code></code>\)<dd>).15 E
(Write data corresponding to the header just written.)0 60 Q
(Returns number of bytes written or -1 on error)0 72 Q(.)-.55 E 0 Cg EP
%%Page: 37 37
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(<p><dt><b>archi)0 12 Q -.15(ve)-.25 G
(_write_\214nish_entry</b>\(<code></code>\)<dd>).15 E
(Close out the entry just written.)0 24 Q(Ordinarily)0 36 Q 2.5(,c)-.65
G(lients ne)-2.5 E -.15(ve)-.25 G 2.5(rn).15 G(eed to call this, as it)
-2.5 E(is called automatically by)0 48 Q(<b>archi)0 60 Q -.15(ve)-.25 G
(_write_ne).15 E(xt_header</b>\(<code></code>\))-.15 E(and)0 72 Q 0 Cg
EP
%%Page: 38 38
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(<b>archi)0 12 Q -.15(ve)-.25 G
(_write_close</b>\(<code></code>\)).15 E(as needed.)0 24 Q
(<p><dt><b>archi)0 36 Q -.15(ve)-.25 G
(_write_close</b>\(<code></code>\)<dd>).15 E(Set an)0 48 Q 2.5(ya)-.15 G
(ttrib)-2.5 E(utes that could not be set during the initial restore.)-.2
E -.15(Fo)0 60 S 2.5(re).15 G
(xample, directory timestamps are not restored initially because)-2.65 E
(restoring a subsequent \214le w)0 72 Q(ould alter that timestamp.)-.1 E
0 Cg EP
%%Page: 39 39
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(Similarly)0 12 Q 2.5(,n)-.65 G
(on-writable directories are initially created with)-2.5 E
(write permissions \(so that their contents can be restored\).)0 24 Q
(The)0 36 Q(<b>archi)0 48 Q -.15(ve)-.25 G(_write_disk_ne).15 E(w</b>)
-.25 E(library maintains a list of all such deferred attrib)0 60 Q
(utes and)-.2 E(sets them when this function is in)0 72 Q -.2(vo)-.4 G
-.1(ke).2 G(d.).1 E 0 Cg EP
%%Page: 40 40
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(<p><dt><b>archi)0 12 Q -.15(ve)-.25 G
(_write_\214nish</b>\(<code></code>\)<dd>).15 E(In)0 24 Q -.2(vo)-.4 G
-.1(ke).2 G(s).1 E(<b>archi)0 36 Q -.15(ve)-.25 G
(_write_close</b>\(<code></code>\)).15 E(if it w)0 48 Q(as not in)-.1 E
-.2(vo)-.4 G -.1(ke).2 G 2.5(dm).1 G(anually)-2.5 E 2.5(,t)-.65 G
(hen releases all resources.)-2.5 E(</dl>)0 60 Q
(More information about the)0 72 Q 0 Cg EP
%%Page: 41 41
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(<i></i><i>struct</i><i> archi)0 12 Q -.15(ve)
-.25 G(</i>).15 E(object and the o)0 24 Q -.15(ve)-.15 G
(rall design of the library can be found in the).15 E
(<a href="../html3/libarchi)0 36 Q -.15(ve)-.25 G(.html">libarchi).15 E
-.15(ve)-.25 G(\(3\)</a>).15 E -.15(ove)0 48 S(rvie).15 E -.65(w.)-.25 G
(Man)0 60 Q 2.5(yo)-.15 G 2.5(ft)-2.5 G
(hese functions are also documented under)-2.5 E
(<a href="../html3/archi)0 72 Q -.15(ve)-.25 G(_write.html">archi).15 E
-.15(ve)-.25 G(_write\(3\)</a>.).15 E 0 Cg EP
%%Page: 42 42
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(<h3 id="RETURN V)36 12 Q(ALUES">)-1.35 E
(RETURN V)36 24 Q(ALUES)-1.35 E(</h3>)36 36 Q(Most functions return)0 48
Q(<b></b><b>ARCHIVE_OK</b>)0 60 Q(\(zero\) on success, or one of se)0 72
Q -.15(ve)-.25 G(ral non-zero).15 E 0 Cg EP
%%Page: 43 43
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(error codes for errors.)0 12 Q
(Speci\214c error codes include:)0 24 Q(<b></b><b>ARCHIVE_RETR)0 36 Q
(Y</b>)-.65 E(for operations that might succeed if retried,)0 48 Q
(<b></b><b>ARCHIVE_W)0 60 Q(ARN</b>)-1.2 E
(for unusual conditions that do not pre)0 72 Q -.15(ve)-.25 G
(nt further operations, and).15 E 0 Cg EP
%%Page: 44 44
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(<b></b><b>ARCHIVE_F)0 12 Q -1.21 -1.11(AT A)-.74
H(L</b>)1.11 E(for serious errors that mak)0 24 Q 2.5(er)-.1 G
(emaining operations impossible.)-2.5 E(The)0 36 Q(<b>archi)0 48 Q -.15
(ve)-.25 G(_errno</b>\(<code></code>\)).15 E(and)0 60 Q(<b>archi)0 72 Q
-.15(ve)-.25 G(_error_string</b>\(<code></code>\)).15 E 0 Cg EP
%%Page: 45 45
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(functions can be used to retrie)0 12 Q .3 -.15
(ve a)-.25 H 2.5(na).15 G(ppropriate error code and a)-2.5 E(te)0 24 Q
(xtual error message.)-.15 E(<p>)36 36 Q(<b>archi)0 48 Q -.15(ve)-.25 G
(_write_disk_ne).15 E(w</b>\(<code></code>\))-.25 E
(returns a pointer to a ne)0 60 Q(wly-allocated)-.25 E(<font size="-1">\
</font><font size="-1">struct</font><font size="-1"> archi)0 72 Q -.15
(ve)-.25 G(</font>).15 E 0 Cg EP
%%Page: 46 46
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(object.)0 12 Q(<p>)36 24 Q(<b>archi)0 36 Q -.15
(ve)-.25 G(_write_data</b>\(<code></code>\)).15 E
(returns a count of the number of bytes actually written.)0 48 Q
(On error)0 60 Q 2.5(,-)-.4 G 2.5(1i)-2.5 G 2.5(sr)-2.5 G
(eturned and the)-2.5 E(<b>archi)0 72 Q -.15(ve)-.25 G
(_errno</b>\(<code></code>\)).15 E 0 Cg EP
%%Page: 47 47
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(and)0 12 Q(<b>archi)0 24 Q -.15(ve)-.25 G
(_error_string</b>\(<code></code>\)).15 E
(functions will return appropriate v)0 36 Q(alues.)-.25 E
(<h3 id="SEE ALSO">)36 48 Q(SEE ALSO)36 60 Q(</h3>)36 72 Q 0 Cg EP
%%Page: 48 48
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(<a href="../html3/archi)0 12 Q -.15(ve)-.25 G
(_read.html">archi).15 E -.15(ve)-.25 G(_read\(3\)</a>,).15 E
(<a href="../html3/archi)0 24 Q -.15(ve)-.25 G(_write.html">archi).15 E
-.15(ve)-.25 G(_write\(3\)</a>,).15 E(<a href="../html1/tar)0 36 Q
(.html">tar\(1\)</a>,)-.55 E(<a href="../html3/libarchi)0 48 Q -.15(ve)
-.25 G(.html">libarchi).15 E -.15(ve)-.25 G(\(3\)</a>).15 E
(<h3 id="HIST)36 60 Q(OR)-.18 E(Y">)-.65 E(HIST)36 72 Q(OR)-.18 E(Y)-.65
E 0 Cg EP
%%Page: 49 49
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(</h3>)36 12 Q(The)0 24 Q(<b>libarchi)0 36 Q -.15
(ve)-.25 G(</b>).15 E(library \214rst appeared in)0 48 Q(FreeBSD5.3.)0
60 Q(The)0 72 Q 0 Cg EP
%%Page: 50 50
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(<b>archi)0 12 Q -.15(ve)-.25 G(_write_disk</b>)
.15 E(interf)0 24 Q(ace w)-.1 E(as added to)-.1 E(<b>libarchi)0 36 Q
-.15(ve)-.25 G(</b><b>2.0</b>).15 E(and \214rst appeared in)0 48 Q
(FreeBSD6.3.)0 60 Q(<h3 id="A)36 72 Q(UTHORS">)-.55 E 0 Cg EP
%%Page: 51 51
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF -.55(AU)36 12 S(THORS).55 E(</h3>)36 24 Q(<p>)36
36 Q(The)0 48 Q(<b>libarchi)0 60 Q -.15(ve)-.25 G(</b>).15 E(library w)0
72 Q(as written by)-.1 E 0 Cg EP
%%Page: 52 52
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF -.35(Ti)0 12 S 2.5(mK).35 G
(ientzle &lt;kientzle@@acm.or)-2.5 E(g&gt;.)-.18 E(<h3 id="B)36 24 Q
(UGS">)-.1 E -.1(BU)36 36 S(GS).1 E(</h3>)36 48 Q
(Directories are actually e)0 60 Q(xtracted in tw)-.15 E 2.5(od)-.1 G
(istinct phases.)-2.5 E(Directories are created during)0 72 Q 0 Cg EP
%%Page: 53 53
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(<b>archi)0 12 Q -.15(ve)-.25 G
(_write_header</b>\(<code></code>\),).15 E -.2(bu)0 24 S 2.5<748c>.2 G
(nal permissions are not set until)-2.5 E(<b>archi)0 36 Q -.15(ve)-.25 G
(_write_close</b>\(<code></code>\).).15 E
(This separation is necessary to correctly handle borderline)0 48 Q
(cases such as a non-writable directory containing)0 60 Q(\214les, b)0
72 Q(ut can cause une)-.2 E(xpected results.)-.15 E 0 Cg EP
%%Page: 54 54
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(In particular)0 12 Q 2.5(,d)-.4 G
(irectory permissions are not fully)-2.5 E(restored until the archi)0 24
Q .3 -.15(ve i)-.25 H 2.5(sc).15 G(losed.)-2.5 E(If you use)0 36 Q
(<a href="../html2/chdir)0 48 Q(.html">chdir\(2\)</a>)-.55 E
(to change the current directory between calls to)0 60 Q(<b>archi)0 72 Q
-.15(ve)-.25 G(_read_e).15 E(xtract</b>\(<code></code>\))-.15 E 0 Cg EP
%%Page: 55 55
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(or before calling)0 12 Q(<b>archi)0 24 Q -.15
(ve)-.25 G(_read_close</b>\(<code></code>\),).15 E
(you may confuse the permission-setting logic with)0 36 Q
(the result that directory permissions are restored)0 48 Q(incorrectly)0
60 Q(.)-.65 E(<p>)36 72 Q 0 Cg EP
%%Page: 56 56
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF
(The library attempts to create objects with \214lenames longer than)0
12 Q(<b></b><b>P)0 24 Q -1.11(AT)-.92 G(H_MAX</b>)1.11 E
(by creating pre\214x)0 36 Q
(es of the full path and changing the current directory)-.15 E(.)-.65 E
(Currently)0 48 Q 2.5(,t)-.65 G
(his logic is limited in scope; the \214xup pass does)-2.5 E(not w)0 60
Q(ork correctly for such objects and the symlink security check)-.1 E
(option disables the support for v)0 72 Q(ery long pathnames.)-.15 E 0
Cg EP
%%Page: 57 57
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(<p>)36 12 Q(Restoring the path)0 24 Q
(<code></code><code>aa/../bb</code>)0 36 Q
(does create each intermediate directory)0 48 Q(.)-.65 E(In particular)0
60 Q 2.5(,t)-.4 G(he directory)-2.5 E(<code></code><code>aa</code>)0 72
Q 0 Cg EP
%%Page: 58 58
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(is created as well as the \214nal object)0 12 Q
(<code></code><code>bb</code>.)0 24 Q(In theory)0 36 Q 2.5(,t)-.65 G
(his can be e)-2.5 E(xploited to create an entire directory heirarch)
-.15 E(y)-.05 E(with a single request.)0 48 Q
(Of course, this does not w)0 60 Q(ork if the)-.1 E
(<b></b><b>ARCHIVE_EXTRA)0 72 Q(CT_NODO)-.4 E(TDO)-.4 E(T</b>)-.4 E 0 Cg
EP
%%Page: 59 59
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(option is speci\214ed.)0 12 Q(<p>)36 24 Q
(Implicit directories are al)0 36 Q -.1(wa)-.1 G(ys created obe).1 E
(ying the current umask.)-.15 E(Explicit objects are created obe)0 48 Q
(ying the current umask unless)-.15 E(<b></b><b>ARCHIVE_EXTRA)0 60 Q
(CT_PERM</b>)-.4 E(is speci\214ed, in which case the)0 72 Q 2.5(yc)-.15
G(urrent umask is ignored.)-2.5 E 0 Cg EP
%%Page: 60 60
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(<p>)36 12 Q
(SGID and SUID bits are restored only if the correct user and)0 24 Q
(group could be set.)0 36 Q(If)0 48 Q(<b></b><b>ARCHIVE_EXTRA)0 60 Q
(CT_O)-.4 E(WNER</b>)-.35 E
(is not speci\214ed, then no attempt is made to set the o)0 72 Q
(wnership.)-.25 E 0 Cg EP
%%Page: 61 61
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF
(In this case, SGID and SUID bits are restored only if the)0 12 Q
(user and group of the \214nal object happen to match those speci\214ed)
0 24 Q(in the entry)0 36 Q(.)-.65 E(<p>)36 48 Q(The)0 60 Q -.74(``)0 72
S(standard').74 E(')-.74 E 0 Cg EP
%%Page: 62 62
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(user)0 12 Q
(-id and group-id lookup functions are not the def)-.2 E(aults because)
-.1 E(<a href="../html3/getgrnam.html">getgrnam\(3\)</a>)0 24 Q(and)0 36
Q(<a href="../html3/getpwnam.html">getpwnam\(3\)</a>)0 48 Q
(are sometimes too lar)0 60 Q(ge for particular applications.)-.18 E
(The current design allo)0 72 Q(ws the application author to use a more)
-.25 E 0 Cg EP
%%Page: 63 63
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@@0 SF(compact implementation when appropriate.)0 12 Q
(<p>)36 24 Q(There should be a corresponding)0 36 Q(<b>archi)0 48 Q -.15
(ve)-.25 G(_read_disk</b>).15 E(interf)0 60 Q(ace that w)-.1 E
(alks a directory heirarch)-.1 E 2.5(ya)-.05 G(nd returns archi)-2.5 E
-.15(ve)-.25 G(entry objects.)0 72 Q 0 Cg EP
%%Trailer
end
%%EOF
@


1.1.1.5
log
@Import libarchive-3.2.1:
- security fixes and other bugfixes
- support for multhreading in xz 5.2+
@
text
@d1 892
a892 469
<!-- Creator     : groff version 1.22.3 -->
<!-- CreationDate: Sun Jun 19 19:54:08 2016 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta name="generator" content="groff -Thtml, see www.gnu.org">
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<meta name="Content-Style" content="text/css">
<style type="text/css">
       p       { margin-top: 0; margin-bottom: 0; vertical-align: top }
       pre     { margin-top: 0; margin-bottom: 0; vertical-align: top }
       table   { margin-top: 0; margin-bottom: 0; vertical-align: top }
       h1      { text-align: center }
</style>
<title></title>
</head>
<body>

<hr>


<p>ARCHIVE_WRITE_DISK(3) BSD Library Functions Manual
ARCHIVE_WRITE_DISK(3)</p>

<p style="margin-top: 1em"><b>NAME</b></p>

<p style="margin-left:6%;"><b>archive_write_disk_new</b>,
<b>archive_write_disk_set_options</b>,
<b>archive_write_disk_set_skip_file</b>,
<b>archive_write_disk_set_group_lookup</b>,
<b>archive_write_disk_set_standard_lookup</b>,
<b>archive_write_disk_set_user_lookup</b>,
<b>archive_write_header</b>, <b>archive_write_data</b>,
<b>archive_write_data_block</b>,
<b>archive_write_finish_entry</b>,
<b>archive_write_close</b>, <b>archive_write_finish
archive_write_free</b> &mdash; functions for creating
objects on disk</p>

<p style="margin-top: 1em"><b>LIBRARY</b></p>

<p style="margin-left:6%;">Streaming Archive Library
(libarchive, -larchive)</p>

<p style="margin-top: 1em"><b>SYNOPSIS</b></p>

<p style="margin-left:6%;"><b>#include
&lt;archive.h&gt;</b></p>

<p style="margin-left:6%; margin-top: 1em"><i>struct
archive *</i></p>


<p style="margin-left:12%;"><b>archive_write_disk_new</b>(<i>void</i>);</p>

<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>


<p style="margin-left:12%;"><b>archive_write_disk_set_options</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>int&nbsp;flags</i>);</p>

<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>


<p style="margin-left:12%;"><b>archive_write_disk_set_skip_file</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>dev_t</i>, <i>ino_t</i>);</p>

<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>


<p><b>archive_write_disk_set_group_lookup</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>void&nbsp;*</i>,
<i>gid_t&nbsp;(*)(void&nbsp;*,&nbsp;const&nbsp;char&nbsp;*gname,&nbsp;gid_t&nbsp;gid)</i>,
<i>void&nbsp;(*cleanup)(void&nbsp;*)</i>);</p>

<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>


<p style="margin-left:12%;"><b>archive_write_disk_set_standard_lookup</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>

<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>


<p><b>archive_write_disk_set_user_lookup</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>void&nbsp;*</i>,
<i>uid_t&nbsp;(*)(void&nbsp;*,&nbsp;const&nbsp;char&nbsp;*uname,&nbsp;uid_t&nbsp;uid)</i>,
<i>void&nbsp;(*cleanup)(void&nbsp;*)</i>);</p>

<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>


<p style="margin-left:12%;"><b>archive_write_header</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>struct&nbsp;archive_entry&nbsp;*</i>);</p>


<p style="margin-left:6%; margin-top: 1em"><i>la_ssize_t</i></p>


<p style="margin-left:12%;"><b>archive_write_data</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>const&nbsp;void&nbsp;*</i>, <i>size_t</i>);</p>


<p style="margin-left:6%; margin-top: 1em"><i>la_ssize_t</i></p>


<p style="margin-left:12%;"><b>archive_write_data_block</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>const&nbsp;void&nbsp;*</i>, <i>size_t&nbsp;size</i>,
<i>int64_t&nbsp;offset</i>);</p>

<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>


<p style="margin-left:12%;"><b>archive_write_finish_entry</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>

<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>


<p style="margin-left:12%;"><b>archive_write_close</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>

<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>


<p style="margin-left:12%;"><b>archive_write_finish</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>

<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>


<p style="margin-left:12%;"><b>archive_write_free</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>

<p style="margin-top: 1em"><b>DESCRIPTION</b></p>

<p style="margin-left:6%;">These functions provide a
complete API for creating objects on disk from struct
archive_entry descriptions. They are most naturally used
when extracting objects from an archive using the
<b>archive_read</b>() interface. The general process is to
read struct archive_entry objects from an archive, then
write those objects to a struct archive object created using
the <b>archive_write_disk</b>() family functions. This
interface is deliberately very similar to the
<b>archive_write</b>() interface used to write objects to a
streaming archive.</p>


<p style="margin-top: 1em"><b>archive_write_disk_new</b>()</p>

<p style="margin-left:17%;">Allocates and initializes a
struct archive object suitable for writing objects to
disk.</p>


<p style="margin-top: 1em"><b>archive_write_disk_set_skip_file</b>()</p>

<p style="margin-left:17%;">Records the device and inode
numbers of a file that should not be overwritten. This is
typically used to ensure that an extraction process does not
overwrite the archive from which objects are being read.
This capability is technically unnecessary but can be a
significant performance optimization in practice.</p>


<p style="margin-top: 1em"><b>archive_write_disk_set_options</b>()</p>

<p style="margin-left:17%;">The options field consists of a
bitwise OR of one or more of the following values:</p>

<p><b>ARCHIVE_EXTRACT_OWNER</b></p>

<p style="margin-left:27%;">The user and group IDs should
be set on the restored file. By default, the user and group
IDs are not restored.</p>

<p><b>ARCHIVE_EXTRACT_PERM</b></p>

<p style="margin-left:27%;">Full permissions (including
SGID, SUID, and sticky bits) should be restored exactly as
specified, without obeying the current umask. Note that SUID
and SGID bits can only be restored if the user and group ID
of the object on disk are correct. If
<b>ARCHIVE_EXTRACT_OWNER</b> is not specified, then SUID and
SGID bits will only be restored if the default user and
group IDs of newly-created objects on disk happen to match
those specified in the archive entry. By default, only basic
permissions are restored, and umask is obeyed.</p>

<p><b>ARCHIVE_EXTRACT_TIME</b></p>

<p style="margin-left:27%;">The timestamps (mtime, ctime,
and atime) should be restored. By default, they are ignored.
Note that restoring of atime is not currently supported.</p>

<p><b>ARCHIVE_EXTRACT_NO_OVERWRITE</b></p>

<p style="margin-left:27%;">Existing files on disk will not
be overwritten. By default, existing regular files are
truncated and overwritten; existing directories will have
their permissions updated; other pre-existing objects are
unlinked and recreated from scratch.</p>

<p><b>ARCHIVE_EXTRACT_UNLINK</b></p>

<p style="margin-left:27%;">Existing files on disk will be
unlinked before any attempt to create them. In some cases,
this can prove to be a significant performance improvement.
By default, existing files are truncated and rewritten, but
the file is not recreated. In particular, the default
behavior does not break existing hard links.</p>

<p><b>ARCHIVE_EXTRACT_ACL</b></p>

<p style="margin-left:27%;">Attempt to restore ACLs. By
default, extended ACLs are ignored.</p>

<p><b>ARCHIVE_EXTRACT_FFLAGS</b></p>

<p style="margin-left:27%;">Attempt to restore extended
file flags. By default, file flags are ignored.</p>

<p><b>ARCHIVE_EXTRACT_XATTR</b></p>

<p style="margin-left:27%;">Attempt to restore POSIX.1e
extended attributes. By default, they are ignored.</p>

<p><b>ARCHIVE_EXTRACT_SECURE_SYMLINKS</b></p>

<p style="margin-left:27%;">Refuse to extract any object
whose final location would be altered by a symlink on disk.
This is intended to help guard against a variety of mischief
caused by archives that (deliberately or otherwise) extract
files outside of the current directory. The default is not
to perform this check. If <b>ARCHIVE_EXTRACT_UNLINK</b> is
specified together with this option, the library will remove
any intermediate symlinks it finds and return an error only
if such symlink could not be removed.</p>

<p><b>ARCHIVE_EXTRACT_SECURE_NODOTDOT</b></p>

<p style="margin-left:27%;">Refuse to extract a path that
contains a <i>..</i> element anywhere within it. The default
is to not refuse such paths. Note that paths ending in
<i>..</i> always cause an error, regardless of this
flag.</p>

<p><b>ARCHIVE_EXTRACT_SECURE_NOABSOLUTEPATHS</b></p>

<p style="margin-left:27%;">Refuse to extract an absolute
path. The default is to not refuse such paths.</p>

<p><b>ARCHIVE_EXTRACT_SPARSE</b></p>

<p style="margin-left:27%;">Scan data for blocks of NUL
bytes and try to recreate them with holes. This results in
sparse files, independent of whether the archive format
supports or uses them.</p>

<p><b>ARCHIVE_EXTRACT_CLEAR_NOCHANGE_FFLAGS</b></p>

<p style="margin-left:27%;">Before removing a file system
object prior to replacing it, clear platform-specific file
flags which might prevent its removal.</p>


<p style="margin-top: 1em"><b>archive_write_disk_set_group_lookup</b>(),
<b>archive_write_disk_set_user_lookup</b>()</p>

<p style="margin-left:17%;">The struct archive_entry
objects contain both names and ids that can be used to
identify users and groups. These names and ids describe the
ownership of the file itself and also appear in ACL lists.
By default, the library uses the ids and ignores the names,
but this can be overridden by registering user and group
lookup functions. To register, you must provide a lookup
function which accepts both a name and id and returns a
suitable id. You may also provide a void * pointer to a
private data structure and a cleanup function for that data.
The cleanup function will be invoked when the struct archive
object is destroyed.</p>


<p style="margin-top: 1em"><b>archive_write_disk_set_standard_lookup</b>()</p>

<p style="margin-left:17%;">This convenience function
installs a standard set of user and group lookup functions.
These functions use getpwnam(3) and getgrnam(3) to convert
names to ids, defaulting to the ids if the names cannot be
looked up. These functions also implement a simple memory
cache to reduce the number of calls to getpwnam(3) and
getgrnam(3).</p>


<p style="margin-top: 1em"><b>archive_write_header</b>()</p>

<p style="margin-left:17%;">Build and write a header using
the data in the provided struct archive_entry structure. See
archive_entry(3) for information on creating and populating
struct archive_entry objects.</p>

<p style="margin-top: 1em"><b>archive_write_data</b>()</p>

<p style="margin-left:17%;">Write data corresponding to the
header just written. Returns number of bytes written or -1
on error.</p>


<p style="margin-top: 1em"><b>archive_write_data_block</b>()</p>

<p style="margin-left:17%;">Write data corresponding to the
header just written. This is like
<b>archive_write_data</b>() except that it performs a seek
on the file being written to the specified offset before
writing the data. This is useful when restoring sparse files
from archive formats that support sparse files. Returns
number of bytes written or -1 on error. (Note: This is
currently not supported for archive_write handles, only for
archive_write_disk handles.)</p>


<p style="margin-top: 1em"><b>archive_write_finish_entry</b>()</p>

<p style="margin-left:17%;">Close out the entry just
written. Ordinarily, clients never need to call this, as it
is called automatically by
<b>archive_write_next_header</b>() and
<b>archive_write_close</b>() as needed. However, some file
attributes are written to disk only after the file is
closed, so this can be necessary if you need to work with
the file on disk right away.</p>


<p style="margin-top: 1em"><b>archive_write_close</b>()</p>

<p style="margin-left:17%;">Set any attributes that could
not be set during the initial restore. For example,
directory timestamps are not restored initially because
restoring a subsequent file would alter that timestamp.
Similarly, non-writable directories are initially created
with write permissions (so that their contents can be
restored). The <b>archive_write_disk_new</b> library
maintains a list of all such deferred attributes and sets
them when this function is invoked.</p>


<p style="margin-top: 1em"><b>archive_write_finish</b>()</p>

<p style="margin-left:17%;">This is a deprecated synonym
for <b>archive_write_free</b>().</p>

<p style="margin-top: 1em"><b>archive_write_free</b>()</p>

<p style="margin-left:17%;">Invokes
<b>archive_write_close</b>() if it was not invoked manually,
then releases all resources.</p>

<p style="margin-left:6%;">More information about the
<i>struct archive</i> object and the overall design of the
library can be found in the libarchive(3) overview. Many of
these functions are also documented under
archive_write(3).</p>

<p style="margin-top: 1em"><b>RETURN VALUES</b></p>

<p style="margin-left:6%;">Most functions return
<b>ARCHIVE_OK</b> (zero) on success, or one of several
non-zero error codes for errors. Specific error codes
include: <b>ARCHIVE_RETRY</b> for operations that might
succeed if retried, <b>ARCHIVE_WARN</b> for unusual
conditions that do not prevent further operations, and
<b>ARCHIVE_FATAL</b> for serious errors that make remaining
operations impossible.</p>


<p style="margin-left:6%; margin-top: 1em"><b>archive_write_disk_new</b>()
returns a pointer to a newly-allocated struct archive
object.</p>


<p style="margin-left:6%; margin-top: 1em"><b>archive_write_data</b>()
returns a count of the number of bytes actually written, or
-1 on error.</p>

<p style="margin-top: 1em"><b>ERRORS</b></p>

<p style="margin-left:6%;">Detailed error codes and textual
descriptions are available from the <b>archive_errno</b>()
and <b>archive_error_string</b>() functions.</p>

<p style="margin-top: 1em"><b>SEE ALSO</b></p>

<p style="margin-left:6%;">archive_read(3),
archive_write(3), tar(1), libarchive(3)</p>

<p style="margin-top: 1em"><b>HISTORY</b></p>

<p style="margin-left:6%;">The <b>libarchive</b> library
first appeared in FreeBSD&nbsp;5.3. The
<b>archive_write_disk</b> interface was added to
<b>libarchive 2.0</b> and first appeared in
FreeBSD&nbsp;6.3.</p>

<p style="margin-top: 1em"><b>AUTHORS</b></p>

<p style="margin-left:6%;">The <b>libarchive</b> library
was written by Tim Kientzle &lt;kientzle@@acm.org&gt;.</p>

<p style="margin-top: 1em"><b>BUGS</b></p>

<p style="margin-left:6%;">Directories are actually
extracted in two distinct phases. Directories are created
during <b>archive_write_header</b>(), but final permissions
are not set until <b>archive_write_close</b>(). This
separation is necessary to correctly handle borderline cases
such as a non-writable directory containing files, but can
cause unexpected results. In particular, directory
permissions are not fully restored until the archive is
closed. If you use chdir(2) to change the current directory
between calls to <b>archive_read_extract</b>() or before
calling <b>archive_read_close</b>(), you may confuse the
permission-setting logic with the result that directory
permissions are restored incorrectly.</p>

<p style="margin-left:6%; margin-top: 1em">The library
attempts to create objects with filenames longer than
<b>PATH_MAX</b> by creating prefixes of the full path and
changing the current directory. Currently, this logic is
limited in scope; the fixup pass does not work correctly for
such objects and the symlink security check option disables
the support for very long pathnames.</p>

<p style="margin-left:6%; margin-top: 1em">Restoring the
path <i>aa/../bb</i> does create each intermediate
directory. In particular, the directory <i>aa</i> is created
as well as the final object <i>bb</i>. In theory, this can
be exploited to create an entire directory hierarchy with a
single request. Of course, this does not work if the
<b>ARCHIVE_EXTRACT_NODOTDOT</b> option is specified.</p>

<p style="margin-left:6%; margin-top: 1em">Implicit
directories are always created obeying the current umask.
Explicit objects are created obeying the current umask
unless <b>ARCHIVE_EXTRACT_PERM</b> is specified, in which
case they current umask is ignored.</p>

<p style="margin-left:6%; margin-top: 1em">SGID and SUID
bits are restored only if the correct user and group could
be set. If <b>ARCHIVE_EXTRACT_OWNER</b> is not specified,
then no attempt is made to set the ownership. In this case,
SGID and SUID bits are restored only if the user and group
of the final object happen to match those specified in the
entry.</p>

<p style="margin-left:6%; margin-top: 1em">The
&rsquo;&rsquo;standard&rsquo;&rsquo; user-id and group-id
lookup functions are not the defaults because getgrnam(3)
and getpwnam(3) are sometimes too large for particular
applications. The current design allows the application
author to use a more compact implementation when
appropriate.</p>

<p style="margin-left:6%; margin-top: 1em">There should be
a corresponding <b>archive_read_disk</b> interface that
walks a directory hierarchy and returns archive entry
objects.</p>

<p style="margin-left:6%; margin-top: 1em">BSD
February&nbsp;2, 2012 BSD</p>
<hr>
</body>
</html>
@


1.1.1.6
log
@Import libarchive-3.3.1.
@
text
@d2 1
a2 1
<!-- CreationDate: Sat Feb 25 11:22:05 2017 -->
d453 1
a453 1
&lsquo;&lsquo;standard&rsquo;&rsquo; user-id and group-id
@


1.1.1.7
log
@Import libarchive-3.3.2 + 9de5f3 + f9dacbf:
- Support NFS4 ACLs on Linux
- Bugfixes
@
text
@d2 1
a2 1
<!-- CreationDate: Mon Jul 10 02:32:56 2017 -->
d33 7
a39 2
<b>archive_write_disk_set_user_lookup</b> &mdash; functions
for creating objects on disk</p>
d90 41
a167 32
<p><b>ARCHIVE_EXTRACT_ACL</b></p>

<p style="margin-left:27%;">Attempt to restore Access
Control Lists. By default, extended ACLs are ignored.</p>

<p><b>ARCHIVE_EXTRACT_CLEAR_NOCHANGE_FFLAGS</b></p>

<p style="margin-left:27%;">Before removing a file system
object prior to replacing it, clear platform-specific file
flags which might prevent its removal.</p>

<p><b>ARCHIVE_EXTRACT_FFLAGS</b></p>

<p style="margin-left:27%;">Attempt to restore file
attributes (file flags). By default, file attributes are
ignored. See chattr(1) (Linux) or chflags(1) (FreeBSD, Mac
OS X) for more information on file attributes.</p>

<p><b>ARCHIVE_EXTRACT_MAC_METADATA</b></p>

<p style="margin-left:27%;">Mac OS X specific. Restore
metadata using copyfile(3). By default, copyfile(3) metadata
is ignored.</p>

<p><b>ARCHIVE_EXTRACT_NO_OVERWRITE</b></p>

<p style="margin-left:27%;">Existing files on disk will not
be overwritten. By default, existing regular files are
truncated and overwritten; existing directories will have
their permissions updated; other pre-existing objects are
unlinked and recreated from scratch.</p>

d187 29
a215 1
<p><b>ARCHIVE_EXTRACT_SECURE_NOABSOLUTEPATHS</b></p>
d217 2
a218 2
<p style="margin-left:27%;">Refuse to extract an absolute
path. The default is to not refuse such paths.</p>
d220 1
a220 1
<p><b>ARCHIVE_EXTRACT_SECURE_NODOTDOT</b></p>
d222 2
a223 5
<p style="margin-left:27%;">Refuse to extract a path that
contains a <i>..</i> element anywhere within it. The default
is to not refuse such paths. Note that paths ending in
<i>..</i> always cause an error, regardless of this
flag.</p>
d232 1
a232 8
to perform this check. If</p>

<p><b>ARCHIVE_EXTRACT_SPARSE</b></p>

<p style="margin-left:27%;">Scan data for blocks of NUL
bytes and try to recreate them with holes. This results in
sparse files, independent of whether the archive format
supports or uses them. <b>ARCHIVE_EXTRACT_UNLINK</b> is
d237 9
a245 1
<p><b>ARCHIVE_EXTRACT_TIME</b></p>
d247 2
a248 3
<p style="margin-left:27%;">The timestamps (mtime, ctime,
and atime) should be restored. By default, they are ignored.
Note that restoring of atime is not currently supported.</p>
d250 1
a250 1
<p><b>ARCHIVE_EXTRACT_UNLINK</b></p>
d252 4
a255 6
<p style="margin-left:27%;">Existing files on disk will be
unlinked before any attempt to create them. In some cases,
this can prove to be a significant performance improvement.
By default, existing files are truncated and rewritten, but
the file is not recreated. In particular, the default
behavior does not break existing hard links.</p>
d257 1
a257 1
<p><b>ARCHIVE_EXTRACT_XATTR</b></p>
d259 3
a261 4
<p style="margin-left:27%;">Attempt to restore extended
file attributes. By default, they are ignored. See xattr(7)
(Linux), xattr(2) (Mac OS X), or getextattr(8) (FreeBSD) for
more information on extended file attributes.</p>
d291 64
d453 1
a453 1
&rsquo;&rsquo;standard&rsquo;&rsquo; user-id and group-id
d466 1
a466 1
April&nbsp;3, 2017 BSD</p>
@


1.1.1.8
log
@Import libarchive-3.3.3 as should have done originally.
@
text
@d2 1
a2 1
<!-- CreationDate: Mon Sep  3 22:55:09 2018 -->
@


1.1.1.9
log
@Import libarchive 3.4.0
@
text
@d1 2
a2 2
<!-- Creator     : groff version 1.22.4 -->
<!-- CreationDate: Wed Jun 12 21:10:17 2019 -->
d353 6
a358 5
&ldquo;standard&rdquo; user-id and group-id lookup functions
are not the defaults because getgrnam(3) and getpwnam(3) are
sometimes too large for particular applications. The current
design allows the application author to use a more compact
implementation when appropriate.</p>
@


1.1.1.10
log
@Import libarchive 3.7.2
@
text
@d2 1
a2 1
<!-- CreationDate: Mon Sep 11 22:06:20 2023 -->
a172 8
<p><b>ARCHIVE_EXTRACT_SAFE_WRITES</b></p>

<p style="margin-left:27%;">Extract files atomically, by
first creating a unique temporary file and then renaming it
to its required destination name. This avoids a race where
an application might see a partial file (or no file) during
extraction.</p>

d193 1
a193 4
to perform this check. If <b>ARCHIVE_EXTRACT_UNLINK</b> is
specified together with this option, the library will remove
any intermediate symlinks it finds and return an error only
if such symlink could not be removed.</p>
d200 4
a203 1
supports or uses them.</p>
d290 2
a291 2
<p style="margin-left:6%;">tar(1), archive_read(3),
archive_write(3), libarchive(3)</p>
d365 1
a365 1
January&nbsp;19, 2020 BSD</p>
@


1.1.1.11
log
@libarchive: import version 3.7.3
@
text
@d2 1
a2 1
<!-- CreationDate: Sun Apr  7 22:36:27 2024 -->
@


1.1.1.12
log
@Libarchive 3.7.4 is a bugfix and security release

Security fixes:

rar: Fix OOB in rar e8 filter (CVE-2024-26256)
zip: Fix out of boundary access

Important bugfixes:

7zip: Limit amount of properties
bsdtar: Fix error handling around strtol() usages
passphrase: Improve newline handling on Windows
passphrase: Never allow empty passwords
rar: Fix "File CRC Error" when extracting specific rar4 archives
xar: Avoid infinite link loop
zip: Update AppleDouble support for directories
zstd: Implement core detection
@
text
@d2 1
a2 1
<!-- CreationDate: Fri Apr 26 09:23:46 2024 -->
@


1.1.1.13
log
@libarchive: imported version 3.7.5

Libarchive 3.7.5

Security fixes:

fix multiple vulnerabilities identified by SAST
cpio: ignore out-of-range gid/uid/size/ino and harden AFIO parsing
lzop: prevent integer overflow
rar4: protect copy_from_lzss_window_to_unp()
rar4: fix CVE-2024-26256
rar4: fix OOB in delta and audio filter
rar4: fix out of boundary access with large files
rar4: add boundary checks to rgb filter
rar4: fix OOB access with unicode filenames
rar5: clear 'data ready' cache on window buffer reallocs
rpm: calculate huge header sizes correctly
unzip: unify EOF handling
util: fix out of boundary access in mktemp functions
uu: stop processing if lines are too long

Important bugfixes:

7zip: fix issue when skipping first file in 7zip archive that is a multiple of 65536 bytes
ar: fix archive entries having no type
lha: do not allow negative file sizes
lha: fix integer truncation on 32-bit systems
shar: check strdup return value
rar5: don't try to read rediculously long names
xar: fix another infinite loop and expat error handling
many Windows fixes, cleanups and improvements
@
text
@d2 1
a2 1
<!-- CreationDate: Fri Sep 13 20:31:05 2024 -->
@


1.1.1.14
log
@libarchove: import version 3.7.7
@
text
@d1 2
a2 2
<!-- Creator     : groff version 1.23.0 -->
<!-- CreationDate: Sun Oct 13 08:12:09 2024 -->
d23 2
a24 2
<p><i>ARCHIVE_WRITE_DISK</i>(3) Library Functions Manual
<i>ARCHIVE_WRITE_DISK</i>(3)</p>
d28 7
a34 7
<p style="margin-left:9%;">archive_write_disk_new,
archive_write_disk_set_options,
archive_write_disk_set_skip_file,
archive_write_disk_set_group_lookup,
archive_write_disk_set_standard_lookup,
archive_write_disk_set_user_lookup &mdash; functions for
creating objects on disk</p>
d38 1
a38 1
<p style="margin-left:9%;">Streaming Archive Library
d43 1
a43 1
<p style="margin-left:9%;"><b>#include
d46 1
a46 1
<p style="margin-left:9%; margin-top: 1em"><i>struct
d50 1
a50 1
<p style="margin-left:14%;"><b>archive_write_disk_new</b>(<i>void</i>);</p>
d52 1
a52 1
<p style="margin-left:9%; margin-top: 1em"><i>int</i></p>
d55 1
a55 1
<p style="margin-left:14%;"><b>archive_write_disk_set_options</b>(<i>struct&nbsp;archive&nbsp;*</i>,
d58 1
a58 1
<p style="margin-left:9%; margin-top: 1em"><i>int</i></p>
d61 1
a61 1
<p style="margin-left:14%;"><b>archive_write_disk_set_skip_file</b>(<i>struct&nbsp;archive&nbsp;*</i>,
d64 1
a64 1
<p style="margin-left:9%; margin-top: 1em"><i>int</i></p>
d72 1
a72 1
<p style="margin-left:9%; margin-top: 1em"><i>int</i></p>
d75 1
a75 1
<p style="margin-left:14%;"><b>archive_write_disk_set_standard_lookup</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
d77 1
a77 1
<p style="margin-left:9%; margin-top: 1em"><i>int</i></p>
d87 1
a87 1
<p style="margin-left:9%;">These functions provide a
d102 1
a102 1
<p style="margin-left:19%;">Allocates and initializes a
d109 1
a109 1
<p style="margin-left:19%;">Records the device and inode
d119 1
a119 1
<p style="margin-left:19%;">The options field consists of a
d124 1
a124 1
<p style="margin-left:29%;">Attempt to restore Access
d129 1
a129 1
<p style="margin-left:29%;">Before removing a file system
d135 1
a135 1
<p style="margin-left:29%;">Attempt to restore file
d137 2
a138 3
ignored. See <i>chattr</i>(1) (Linux) or <i>chflags</i>(1)
(FreeBSD, Mac OS X) for more information on file
attributes.</p>
d142 3
a144 3
<p style="margin-left:29%;">Mac OS X specific. Restore
metadata using <i>copyfile</i>(3). By default,
<i>copyfile</i>(3) metadata is ignored.</p>
d148 1
a148 1
<p style="margin-left:29%;">Existing files on disk will not
d156 1
a156 1
<p style="margin-left:29%;">The user and group IDs should
d162 1
a162 1
<p style="margin-left:29%;">Full permissions (including
d175 1
a175 1
<p style="margin-left:29%;">Extract files atomically, by
d183 1
a183 1
<p style="margin-left:29%;">Refuse to extract an absolute
d188 1
a188 1
<p style="margin-left:29%;">Refuse to extract a path that
d196 1
a196 1
<p style="margin-left:29%;">Refuse to extract any object
d208 1
a208 1
<p style="margin-left:29%;">Scan data for blocks of NUL
d215 1
a215 1
<p style="margin-left:29%;">The timestamps (mtime, ctime,
d221 1
a221 1
<p style="margin-left:29%;">Existing files on disk will be
d230 4
a233 5
<p style="margin-left:29%;">Attempt to restore extended
file attributes. By default, they are ignored. See
<i>xattr</i>(7) (Linux), <i>xattr</i>(2) (Mac OS X), or
<i>getextattr</i>(8) (FreeBSD) for more information on
extended file attributes.</p>
d239 1
a239 1
<p style="margin-left:19%;">The struct archive_entry
d255 1
a255 1
<p style="margin-left:19%;">This convenience function
d257 5
a261 5
These functions use <i>getpwnam</i>(3) and
<i>getgrnam</i>(3) to convert names to ids, defaulting to
the ids if the names cannot be looked up. These functions
also implement a simple memory cache to reduce the number of
calls to <i>getpwnam</i>(3) and <i>getgrnam</i>(3).</p>
d263 1
a263 1
<p style="margin-left:9%;">More information about the
d265 3
a267 3
library can be found in the <i>libarchive</i>(3) overview.
Many of these functions are also documented under
<i>archive_write</i>(3).</p>
d271 1
a271 1
<p style="margin-left:9%;">Most functions return
d281 1
a281 1
<p style="margin-left:9%; margin-top: 1em"><b>archive_write_disk_new</b>()
d286 1
a286 1
<p style="margin-left:9%; margin-top: 1em"><b>archive_write_data</b>()
d288 1
a288 1
<b>-1</b> on error.</p>
d292 1
a292 1
<p style="margin-left:9%;">Detailed error codes and textual
d298 2
a299 3
<p style="margin-left:9%;"><i>tar</i>(1),
<i>archive_read</i>(3), <i>archive_write</i>(3),
<i>libarchive</i>(3)</p>
d303 1
a303 1
<p style="margin-left:9%;">The <b>libarchive</b> library
d311 1
a311 1
<p style="margin-left:9%;">The <b>libarchive</b> library
d316 1
a316 1
<p style="margin-left:9%;">Directories are actually
d324 4
a327 4
closed. If you use <i>chdir</i>(2) to change the current
directory between calls to <b>archive_read_extract</b>() or
before calling <b>archive_read_close</b>(), you may confuse
the permission-setting logic with the result that directory
d330 1
a330 1
<p style="margin-left:9%; margin-top: 1em">The library
d338 1
a338 1
<p style="margin-left:9%; margin-top: 1em">Restoring the
d346 1
a346 1
<p style="margin-left:9%; margin-top: 1em">Implicit
d352 1
a352 1
<p style="margin-left:9%; margin-top: 1em">SGID and SUID
d360 1
a360 1
<p style="margin-left:9%; margin-top: 1em">The
d362 4
a365 5
are not the defaults because <i>getgrnam</i>(3) and
<i>getpwnam</i>(3) are sometimes too large for particular
applications. The current design allows the application
author to use a more compact implementation when
appropriate.</p>
d367 1
a367 1
<p style="margin-left:9%; margin-top: 1em">There should be
d370 4
a373 2
objects. Debian January 19, 2020
<i>ARCHIVE_WRITE_DISK</i>(3)</p>
@


1.1.1.15
log
@libarchive: imported version 3.7.9
@
text
@d2 1
a2 1
<!-- CreationDate: Sun Mar 30 20:07:37 2025 -->
@


1.1.1.16
log
@libarchive: import version 3.8.0

Libarchive 3.8.0 is a feature and bugfix release.

New features:
bsdtar: support --mtime and --clamp-mtime
lib: mbedtls 3.x compatibility
7-zip reader: improve self-extracting archive detection
xar: xmllite support for the XAR reader and writer
zip writer: added XZ, LZMA, ZSTD and BZIP2 support
zip writer: added LZMA + RISCV BCJ filter

Notable security fixes:
rar: do not skip past EOF while reading
rar: fix double free with over 4 billion nodes
rar: fix heap-buffer-overflow
warc: prevent signed integer overflow
tar: fix overflow in build_ustar_entry

Notable bugfixes:
bsdtar: don't hardlink negative inode files together
gz: allow setting the original filename for gzip compressed files
lib: improve lseek handling
lib: support @@-prefixed Unix epoch timestamps as date strings
rar: support large headers on 32 bit systems
tar reader: Improve LFS support on 32 bit systems
@
text
@d2 1
a2 1
<!-- CreationDate: Tue May 20 09:02:19 2025 -->
@


1.1.1.17
log
@libarchive: import version 3.8.1
@
text
@d2 1
a2 1
<!-- CreationDate: Sun Jun  1 19:29:40 2025 -->
@


1.1.1.18
log
@libarchive: imported version 3.8.2
@
text
@d2 1
a2 1
<!-- CreationDate: Wed Oct 15 21:49:46 2025 -->
@


1.1.1.19
log
@libarchive: import version 3.8.3
@
text
@d2 1
a2 1
<!-- CreationDate: Mon Nov 17 22:19:02 2025 -->
@


1.1.1.20
log
@libarchive: import 3.8.4
@
text
@d2 1
a2 1
<!-- CreationDate: Mon Dec  1 12:42:38 2025 -->
@


1.1.1.21
log
@libarchive: import version 3.8.5
@
text
@d2 1
a2 1
<!-- CreationDate: Mon Jan  5 10:42:44 2026 -->
@


1.1.1.22
log
@libarchive: imported version 3.8.6
@
text
@d2 1
a2 1
<!-- CreationDate: Tue Mar 10 09:57:28 2026 -->
@


1.1.1.23
log
@libarchive: imported version 3.8.7
@
text
@d2 1
a2 1
<!-- CreationDate: Mon Apr 13 12:57:34 2026 -->
@


1.1.1.24
log
@libarchive: import 3.8.8
@
text
@d2 1
a2 1
<!-- CreationDate: Tue Jun 23 09:58:13 2026 -->
@


