.\" Copyright (c) 2003-2010 Tim Kientzle
.\" All rights reserved.
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
.\" are met:
.\" 1. Redistributions of source code must retain the above copyright
.\"    notice, this list of conditions and the following disclaimer.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\"    notice, this list of conditions and the following disclaimer in the
.\"    documentation and/or other materials provided with the distribution.
.\"
.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
.\" $FreeBSD$
.\"
.Dd January 31, 2020
.Dt ARCHIVE_WRITE_OPTIONS 3
.Os
.Sh NAME
.Nm archive_write_set_filter_option ,
.Nm archive_write_set_format_option ,
.Nm archive_write_set_option ,
.Nm archive_write_set_options
.Nd functions controlling options for writing archives
.Sh LIBRARY
Streaming Archive Library (libarchive, -larchive)
.Sh SYNOPSIS
.Ft int
.Fo archive_write_set_filter_option
.Fa "struct archive *"
.Fa "const char *module"
.Fa "const char *option"
.Fa "const char *value"
.Fc
.Ft int
.Fo archive_write_set_format_option
.Fa "struct archive *"
.Fa "const char *module"
.Fa "const char *option"
.Fa "const char *value"
.Fc
.Ft int
.Fo archive_write_set_option
.Fa "struct archive *"
.Fa "const char *module"
.Fa "const char *option"
.Fa "const char *value"
.Fc
.Ft int
.Fo archive_write_set_options
.Fa "struct archive *"
.Fa "const char *options"
.Fc
.Sh DESCRIPTION
These functions provide a way for libarchive clients to configure
specific write modules.
.Bl -tag -width indent
.It Xo
.Fn archive_write_set_filter_option ,
.Fn archive_write_set_format_option
.Xc
Specifies an option that will be passed to the currently-registered
filters (including decompression filters) or format readers.
.Pp
If
.Ar option
and
.Ar value
are both
.Dv NULL ,
these functions will do nothing and
.Cm ARCHIVE_OK
will be returned.
If
.Ar option
is
.Dv NULL
but
.Ar value
is not, these functions will do nothing and
.Cm ARCHIVE_FAILED
will be returned.
.Pp
If
.Ar module
is not
.Dv NULL ,
.Ar option
and
.Ar value
will be provided to the filter or reader named
.Ar module .
The return value will be either
.Cm ARCHIVE_OK
if the option was successfully handled or
.Cm ARCHIVE_WARN
if the option was unrecognized by the module or could otherwise
not be handled.
If there is no such module,
.Cm ARCHIVE_FAILED
will be returned.
.Pp
If
.Ar module
is
.Dv NULL ,
.Ar option
and
.Ar value
will be provided to every registered module.
If any module returns
.Cm ARCHIVE_FATAL ,
this value will be returned immediately.
Otherwise,
.Cm ARCHIVE_OK
will be returned if any module accepts the option, and
.Cm ARCHIVE_FAILED
in all other cases.
.\"
.It Fn archive_write_set_option
Calls
.Fn archive_write_set_format_option ,
then
.Fn archive_write_set_filter_option .
If either function returns
.Cm ARCHIVE_FATAL ,
.Cm ARCHIVE_FATAL
will be returned
immediately.
Otherwise, the greater of the two values will be returned.
.\"
.It Fn archive_write_set_options
.Ar options
is a comma-separated list of options.
If
.Ar options
is
.Dv NULL
or empty,
.Cm ARCHIVE_OK
will be returned immediately.
.Pp
Individual options have one of the following forms:
.Bl -tag -compact -width indent
.It Ar option=value
The option/value pair will be provided to every module.
Modules that do not accept an option with this name will ignore it.
.It Ar option
The option will be provided to every module with a value of
.Dq 1 .
.It Ar !option
The option will be provided to every module with a NULL value.
.It Ar module:option=value , Ar module:option , Ar module:!option
As above, but the corresponding option and value will be provided
only to modules whose name matches
.Ar module .
.El
.El
.\"
.Sh OPTIONS
.Bl -tag -compact -width indent
.It Filter b64encode
.Bl -tag -compact -width indent
.It Cm mode
The value is interpreted as octal digits specifying the file mode.
.It Cm name
The value specifies the file name.
.El
.It Filter bzip2
.Bl -tag -compact -width indent
.It Cm compression-level
The value is interpreted as a decimal integer specifying the
bzip2 compression level. Supported values are from 1 to 9.
.El
.It Filter gzip
.Bl -tag -compact -width indent
.It Cm compression-level
The value is interpreted as a decimal integer specifying the
gzip compression level. Supported values are from 0 to 9.
.It Cm timestamp
Store timestamp. This is enabled by default.
.El
.It Filter lrzip
.Bl -tag -compact -width indent
.It Cm compression Ns = Ns Ar type
Use
.Ar type
as compression method.
Supported values are
.Dq bzip2 ,
.Dq gzipi ,
.Dq lzo
.Pq ultra fast ,
and
.Dq zpaq
.Pq best, extremely slow .
.It Cm compression-level
The value is interpreted as a decimal integer specifying the
lrzip compression level. Supported values are from 1 to 9.
.El
.It Filter lz4
.Bl -tag -compact -width indent
.It Cm compression-level
The value is interpreted as a decimal integer specifying the
lz4 compression level. Supported values are from 0 to 9.
.It Cm stream-checksum
Enable stream checksum. This is enabled by default.
.It Cm block-checksum
Enable block checksum. This is disabled by default.
.It Cm block-size
The value is interpreted as a decimal integer specifying the
lz4 compression block size. Supported values are from 4 to 7
.Pq default .
.It Cm block-dependence
Use the previous block of the block being compressed for
a compression dictionary to improve compression ratio.
This is disabled by default.
.El
.It Filter lzop
.Bl -tag -compact -width indent
.It Cm compression-level
The value is interpreted as a decimal integer specifying the
lzop compression level. Supported values are from 1 to 9.
.El
.It Filter uuencode
.Bl -tag -compact -width indent
.It Cm mode
The value is interpreted as octal digits specifying the file mode.
.It Cm name
The value specifies the file name.
.El
.It Filter xz
.Bl -tag -compact -width indent
.It Cm compression-level
The value is interpreted as a decimal integer specifying the
compression level. Supported values are from 0 to 9.
.It Cm threads
The value is interpreted as a decimal integer specifying the
number of threads for multi-threaded lzma compression.
If supported, the default value is read from
.Fn lzma_cputhreads .
.El
.It Filter zstd
.Bl -tag -compact -width indent
.It Cm compression-level
The value is interpreted as a decimal integer specifying the
compression level. Supported values are from 1 to 22.
.El
.It Format 7zip
.Bl -tag -compact -width indent
.It Cm compression
The value is one of
.Dq store ,
.Dq deflate ,
.Dq bzip2 ,
.Dq lzma1 ,
.Dq lzma2
or
.Dq ppmd
to indicate how the following entries should be compressed.
Note that this setting is ignored for directories, symbolic links,
and other special entries.
.It Cm compression-level
The value is interpreted as a decimal integer specifying the
compression level.
Values between 0 and 9 are supported.
The interpretation of the compression level depends on the chosen
compression method.
.El
.It Format cpio
.Bl -tag -compact -width indent
.It Cm hdrcharset
The value is used as a character set name that will be
used when translating file names.
.El
.It Format gnutar
.Bl -tag -compact -width indent
.It Cm hdrcharset
The value is used as a character set name that will be
used when translating file, group and user names.
.El
.It Format iso9660 - volume metadata
These options are used to set standard ISO9660 metadata.
.Bl -tag -compact -width indent
.It Cm abstract-file Ns = Ns Ar filename
The file with the specified name will be identified in the ISO9660 metadata
as holding the abstract for this volume.
Default: none.
.It Cm application-id Ns = Ns Ar filename
The file with the specified name will be identified in the ISO9660 metadata
as holding the application identifier for this volume.
Default: none.
.It Cm biblio-file Ns = Ns Ar filename
The file with the specified name will be identified in the ISO9660 metadata
as holding the bibliography for this volume.
Default: none.
.It Cm copyright-file Ns = Ns Ar filename
The file with the specified name will be identified in the ISO9660 metadata
as holding the copyright for this volume.
Default: none.
.It Cm publisher Ns = Ns Ar filename
The file with the specified name will be identified in the ISO9660 metadata
as holding the publisher information for this volume.
Default: none.
.It Cm volume-id Ns = Ns Ar string
The specified string will be used as the Volume Identifier in the ISO9660 metadata.
It is limited to 32 bytes.
Default: none.
.El
.It Format iso9660 - boot support
These options are used to make an ISO9660 image that can be directly
booted on various systems.
.Bl -tag -compact -width indent
.It Cm boot Ns = Ns Ar filename
The file matching this name will be used as the El Torito boot image file.
.It Cm boot-catalog Ns = Ns Ar name
The name that will be used for the El Torito boot catalog.
Default:
.Ar boot.catalog
.It Cm boot-info-table
The boot image file provided by the
.Cm boot Ns = Ns Ar filename
option will be edited with appropriate boot information in bytes 8 through 64.
Default: disabled
.It Cm boot-load-seg Ns = Ns Ar hexadecimal-number
The load segment for a no-emulation boot image.
.It Cm boot-load-size Ns = Ns Ar decimal-number
The number of "virtual" 512-byte sectors to be loaded from a no-emulation boot image.
Some very old BIOSes can only load very small images, setting this
value to 4 will often allow such BIOSes to load the first part of
the boot image (which will then need to be intelligent enough to
load the rest of itself).
This should not be needed unless you are trying to support systems with very old BIOSes.
This defaults to the full size of the image.
.It Cm boot-type Ns = Ns Ar value
Specifies the boot semantics used by the El Torito boot image:
If the
.Ar value
is
.Cm fd ,
then the boot image is assumed to be a bootable floppy image.
If the
.Ar value
is
.Cm hd ,
then the boot image is assumed to be a bootable hard disk image.
If the
.Ar value
is
.Cm no-emulation ,
the boot image is used without floppy or hard disk emulation.
If the boot image is exactly 1.2MB, 1.44MB, or 2.88MB, then
the default is
.Cm fd ,
otherwise the default is
.Cm no-emulation .
.El
.It Format iso9660 - filename and size extensions
Various extensions to the base ISO9660 format.
.Bl -tag -compact -width indent
.It Cm allow-ldots
If enabled, allows filenames to begin with a leading period.
If disabled, filenames that begin with a leading period will have
that period replaced by an underscore character in the standard ISO9660
namespace.
This does not impact names stored in the Rockridge or Joliet extension area.
Default: disabled.
.It Cm allow-lowercase
If enabled, allows filenames to contain lowercase characters.
If disabled, filenames will be forced to uppercase.
This does not impact names stored in the Rockridge or Joliet extension area.
Default: disabled.
.It Cm allow-multidot
If enabled, allows filenames to contain multiple period characters, in violation of the ISO9660 specification.
If disabled, additional periods will be converted to underscore characters.
This does not impact names stored in the Rockridge or Joliet extension area.
Default: disabled.
.It Cm allow-period
If enabled, allows filenames to contain trailing period characters, in violation of the ISO9660 specification.
If disabled, trailing periods will be converted to underscore characters.
This does not impact names stored in the Rockridge or Joliet extension area.
Default: disabled.
.It Cm allow-pvd-lowercase
If enabled, the Primary Volume Descriptor may contain lowercase ASCII characters, in violation of the ISO9660 specification.
If disabled, characters will be converted to uppercase ASCII.
Default: disabled.
.It Cm allow-sharp-tilde
If enabled, sharp and tilde characters will be permitted in filenames, in violation if the ISO9660 specification.
If disabled, such characters will be converted to underscore characters.
Default: disabled.
.It Cm allow-vernum
If enabled, version numbers will be included with files.
If disabled, version numbers will be suppressed, in violation of the ISO9660 standard.
This does not impact names stored in the Rockridge or Joliet extension area.
Default: enabled.
.It Cm iso-level
This enables support for file size and file name extensions in the
core ISO9660 area.
The name extensions specified here do not affect the names stored in the Rockridge or Joliet extension areas.
.Bl -tag -compact -width indent
.It Cm iso-level=1
The most compliant form of ISO9660 image.
Filenames are limited to 8.3 uppercase format,
directory names are limited to 8 uppercase characters,
files are limited to 4 GiB,
the complete ISO9660 image cannot exceed 4 GiB.
.It Cm iso-level=2
Filenames are limited to 30 uppercase characters with a 30-character extension,
directory names are limited to 30 characters,
files are limited to 4 GiB.
.It Cm iso-level=3
As with
.Cm iso-level=2 ,
except that files may exceed 4 GiB.
.It Cm iso-level=4
As with
.Cm iso-level=3 ,
except that filenames may be up to 193 characters
and may include arbitrary 8-bit characters.
.El
.It Cm joliet
Microsoft's Joliet extensions store a completely separate set of directory information about each file.
In particular, this information includes Unicode filenames of up to 255 characters.
Default: enabled.
.It Cm limit-depth
If enabled, libarchive will use directory relocation records to ensure that
no pathname exceeds the ISO9660 limit of 8 directory levels.
If disabled, no relocation will occur.
Default: enabled.
.It Cm limit-dirs
If enabled, libarchive will cause an error if there are more than
65536 directories.
If disabled, there is no limit on the number of directories.
Default: enabled
.It Cm pad
If enabled, 300 kiB of zero bytes will be appended to the end of the archive.
Default: enabled
.It Cm relaxed-filenames
If enabled, all 7-bit ASCII characters are permitted in filenames
(except lowercase characters unless
.Cm allow-lowercase
is also specified).
This violates ISO9660 standards.
This does not impact names stored in the Rockridge or Joliet extension area.
Default: disabled.
.It Cm rockridge
The Rockridge extensions store an additional set of POSIX-style file
information with each file, including mtime, atime, ctime, permissions,
and long filenames with arbitrary 8-bit characters.
These extensions also support symbolic links and other POSIX file types.
Default: enabled.
.El
.It Format iso9660 - zisofs support
The zisofs extensions permit each file to be independently compressed
using a gzip-compatible compression.
This can provide significant size savings, but requires the reading
system to have support for these extensions.
These extensions are disabled by default.
.Bl -tag -compact -width indent
.It Cm compression-level Ns = Ns number
The compression level used by the deflate compressor.
Ranges from 0 (least effort) to 9 (most effort).
Default: 6
.It Cm zisofs
Synonym for
.Cm zisofs=direct .
.It Cm zisofs=direct
Compress each file in the archive.
Unlike
.Cm zisofs=indirect ,
this is handled entirely within libarchive and does not require a
separate utility.
For best results, libarchive tests each file and will store
the file uncompressed if the compression does not actually save any space.
In particular, files under 2k will never be compressed.
Note that boot image files are never compressed.
.It Cm zisofs=indirect
Recognizes files that have already been compressed with the
.Cm mkzftree
utility and sets up the necessary file metadata so that
readers will correctly identify these as zisofs-compressed files.
.It Cm zisofs-exclude Ns = Ns Ar filename
Specifies a filename that should not be compressed when using
.Cm zisofs=direct .
This option can be provided multiple times to suppress compression
on many files.
.El
.It Format mtree
.Bl -tag -compact -width indent
.It Cm cksum , Cm device , Cm flags , Cm gid , Cm gname , Cm indent , Cm link , Cm md5 , Cm mode , Cm nlink , Cm rmd160 , Cm sha1 , Cm sha256 , Cm sha384 , Cm sha512 , Cm size , Cm time , Cm uid , Cm uname
Enable a particular keyword in the mtree output.
Prefix with an exclamation mark to disable the corresponding keyword.
The default is equivalent to
.Dq device, flags, gid, gname, link, mode, nlink, size, time, type, uid, uname .
.It Cm all
Enables all of the above keywords.
.It Cm use-set
Enables generation of
.Cm /set
lines that specify default values for the following files and/or directories.
.It Cm indent
XXX needs explanation XXX
.El
.It Format newc
.Bl -tag -compact -width indent
.It Cm hdrcharset
The value is used as a character set name that will be
used when translating file names.
.El
.It Format pax
.Bl -tag -compact -width indent
.It Cm hdrcharset
The value is used as a character set name that will be
used when translating file, group and user names.
The value is one of
.Dq BINARY
or
.Dq UTF-8 .
With
.Dq BINARY
there is no character conversion, with
.Dq UTF-8
names are converted to UTF-8.
.It Cm xattrheader
When storing extended attributes, this option configures which
headers should be written. The value is one of
.Dq all ,
.Dq LIBARCHIVE ,
or
.Dq SCHILY .
By default, both
.Dq LIBARCHIVE.xattr
and
.Dq SCHILY.xattr
headers are written.
.El
.It Format ustar
.Bl -tag -compact -width indent
.It Cm hdrcharset
The value is used as a character set name that will be
used when translating file, group and user names.
.El
.It Format v7tar
.Bl -tag -compact -width indent
.It Cm hdrcharset
The value is used as a character set name that will be
used when translating file, group and user names.
.El
.It Format warc
.Bl -tag -compact -width indent
.It Cm omit-warcinfo
Set to
.Dq true
to disable output of the warcinfo record.
.El
.It Format xar
.Bl -tag -compact -width indent
.It Cm checksum Ns = Ns Ar type
Use
.Ar type
as file checksum method.
Supported values are
.Dq none ,
.Dq md5 ,
and
.Dq sha1
.Pq default .
.It Cm compression Ns = Ns Ar type
Use
.Ar type
as compression method.
Supported values are
.Dq none ,
.Dq bzip2 ,
.Dq gzip
.Pq default ,
.Dq lzma
and
.Dq xz .
.It Cm compression_level
The value is a decimal integer from 1 to 9 specifying the compression level.
.It Cm toc-checksum Ns = Ns Ar type
Use
.Ar type
as table of contents checksum method.
Supported values are
.Dq none ,
.Dq md5
and
.Dq sha1
.Pq default .
.El
.It Format zip
.Bl -tag -compact -width indent
.It Cm compression
The value is either
.Dq store
or
.Dq deflate
to indicate how the following entries should be compressed.
Note that this setting is ignored for directories, symbolic links,
and other special entries.
.It Cm compression-level
The value is interpreted as a decimal integer specifying the
compression level.
Values between 0 and 9 are supported.
A compression level of 0 switches the compression method to
.Dq store ,
other values will enable
.Dq deflate
compression with the given level.
.It Cm encryption
Enable encryption using traditional zip encryption.
.It Cm encryption Ns = Ns Ar type
Use
.Ar type
as encryption type.
Supported values are
.Dq zipcrypt
.Pq traditional zip encryption ,
.Dq aes128
.Pq WinZip AES-128 encryption
and
.Dq aes256
.Pq WinZip AES-256 encryption .
.It Cm experimental
This boolean option enables or disables experimental Zip features
that may not be compatible with other Zip implementations.
.It Cm fakecrc32
This boolean option disables CRC calculations.
All CRC fields are set to zero.
It should not be used except for testing purposes.
.It Cm hdrcharset
The value is used as a character set name that will be
used when translating file names.
.It Cm zip64
Zip64 extensions provide additional file size information
for entries larger than 4 GiB.
They also provide extended file offset and archive size information
when archives exceed 4 GiB.
By default, the Zip writer selectively enables these extensions only as needed.
In particular, if the file size is unknown, the Zip writer will
include Zip64 extensions to guard against the possibility that the
file might be larger than 4 GiB.
.Pp
Setting this boolean option will force the writer to use Zip64 extensions
even for small files that would not otherwise require them.
This is primarily useful for testing.
.Pp
Disabling this option with
.Cm !zip64
will force the Zip writer to avoid Zip64 extensions:
It will reject files with size greater than 4 GiB,
it will reject any new entries once the total archive size reaches 4 GiB,
and it will not use Zip64 extensions for files with unknown size.
In particular, this can improve compatibility when generating archives
where the entry sizes are not known in advance.
.El
.El
.Sh EXAMPLES
The following example creates an archive write handle to
create a gzip-compressed ISO9660 format image.
The two options here specify that the ISO9660 archive will use
.Ar kernel.img
as the boot image for El Torito booting, and that the gzip
compressor should use the maximum compression level.
.Bd -literal -offset indent
a = archive_write_new();
archive_write_add_filter_gzip(a);
archive_write_set_format_iso9660(a);
archive_write_set_options(a, "boot=kernel.img,compression=9");
archive_write_open_filename(a, filename, blocksize);
.Ed
.\"
.Sh ERRORS
More detailed error codes and textual descriptions are available from the
.Fn archive_errno
and
.Fn archive_error_string
functions.
.\"
.Sh SEE ALSO
.Xr tar 1 ,
.Xr archive_read_set_options 3 ,
.Xr archive_write 3 ,
.Xr libarchive 3
.Sh HISTORY
The
.Nm libarchive
library first appeared in
.Fx 5.3 .
.Sh AUTHORS
.An -nosplit
The options support for libarchive was originally implemented by
.An Michihiro NAKAJIMA .
.Sh BUGS
