Blame libarchive/libarchive_changes.3

Packit 08bd4c
.\" Copyright (c) 2011 Tim Kientzle
Packit 08bd4c
.\" All rights reserved.
Packit 08bd4c
.\"
Packit 08bd4c
.\" Redistribution and use in source and binary forms, with or without
Packit 08bd4c
.\" modification, are permitted provided that the following conditions
Packit 08bd4c
.\" are met:
Packit 08bd4c
.\" 1. Redistributions of source code must retain the above copyright
Packit 08bd4c
.\"    notice, this list of conditions and the following disclaimer.
Packit 08bd4c
.\" 2. Redistributions in binary form must reproduce the above copyright
Packit 08bd4c
.\"    notice, this list of conditions and the following disclaimer in the
Packit 08bd4c
.\"    documentation and/or other materials provided with the distribution.
Packit 08bd4c
.\"
Packit 08bd4c
.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
Packit 08bd4c
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
Packit 08bd4c
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
Packit 08bd4c
.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
Packit 08bd4c
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
Packit 08bd4c
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
Packit 08bd4c
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
Packit 08bd4c
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
Packit 08bd4c
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
Packit 08bd4c
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
Packit 08bd4c
.\" SUCH DAMAGE.
Packit 08bd4c
.\"
Packit 08bd4c
.\" $FreeBSD$
Packit 08bd4c
.\"
Packit 08bd4c
.Dd December 23, 2011
Packit 08bd4c
.Dt LIBARCHIVE_CHANGES 3
Packit 08bd4c
.Os
Packit 08bd4c
.Sh NAME
Packit 08bd4c
.Nm libarchive_changes
Packit 08bd4c
.Nd changes in libarchive interface
Packit 08bd4c
.\"
Packit 08bd4c
.Sh CHANGES IN LIBARCHIVE 3
Packit 08bd4c
This page describes user-visible changes in libarchive3, and lists
Packit 08bd4c
public functions and other symbols changed, deprecated or removed
Packit 08bd4c
in libarchive3, along with their replacements if any.
Packit 08bd4c
.Pp
Packit 08bd4c
.\"
Packit 08bd4c
.Ss Multiple Filters
Packit 08bd4c
.\"
Packit 08bd4c
Libarchive2 permitted a single (input or output) filter active
Packit 08bd4c
on an archive.
Packit 08bd4c
Libarchive3 extends this into a variable-length stack.
Packit 08bd4c
Where
Packit 08bd4c
.Fn archive_write_set_compression_XXX
Packit 08bd4c
would replace any existing filter,
Packit 08bd4c
.Fn archive_write_add_filter_XXX
Packit 08bd4c
extends the write pipeline with another filter.
Packit 08bd4c
.\"
Packit 08bd4c
.Ss Character Set Handling
Packit 08bd4c
.\"
Packit 08bd4c
Libarchive2 assumed that the local platform uses
Packit 08bd4c
.Tn Unicode
Packit 08bd4c
as the native
Packit 08bd4c
.Tn wchar_t
Packit 08bd4c
encoding, which is true on
Packit 08bd4c
.Tn Windows ,
Packit 08bd4c
modern
Packit 08bd4c
.Tn Linux ,
Packit 08bd4c
and a few other systems, but is certainly not universal.
Packit 08bd4c
As a result, pax format archives were written incorrectly on some
Packit 08bd4c
systems, since pax format requires
Packit 08bd4c
.Tn UTF-8
Packit 08bd4c
and libarchive 2 incorrectly
Packit 08bd4c
assumed that
Packit 08bd4c
.Tn wchar_t
Packit 08bd4c
strings can be easily converted to
Packit 08bd4c
.Tn UTF-8 .
Packit 08bd4c
.Pp
Packit 08bd4c
Libarchive3 uses the standard iconv library to convert between character
Packit 08bd4c
sets and is introducing the notion of a
Packit 08bd4c
.Dq default character set for the archive .
Packit 08bd4c
To support this,
Packit 08bd4c
.Tn archive_entry
Packit 08bd4c
objects can now be bound to a particular archive when they are created.
Packit 08bd4c
The automatic character set conversions performed by
Packit 08bd4c
.Tn archive_entry
Packit 08bd4c
objects when reading and writing filenames, usernames, and other strings
Packit 08bd4c
will now use an appropriate default character set:
Packit 08bd4c
.Pp
Packit 08bd4c
If the
Packit 08bd4c
.Tn archive_entry
Packit 08bd4c
object is bound to an archive, it will use the
Packit 08bd4c
default character set for that archive.
Packit 08bd4c
.Pp
Packit 08bd4c
The platform default character encoding (as returned by
Packit 08bd4c
.Fn nl_langinfo CHARSET )
Packit 08bd4c
will be used if nothing else is specified.
Packit 08bd4c
.Pp
Packit 08bd4c
Libarchive3 also introduces charset options to many of the archive
Packit 08bd4c
readers and writers to control the character set that will be used for
Packit 08bd4c
filenames written in those archives.
Packit 08bd4c
When possible, this will be set automatically based on information in
Packit 08bd4c
the archive itself.
Packit 08bd4c
Combining this with the notion of a default character set for the
Packit 08bd4c
archive should allow you to configure libarchive to read archives from
Packit 08bd4c
other platforms and have the filenames and other information
Packit 08bd4c
transparently converted to the character encoding suitable for your
Packit 08bd4c
application.
Packit 08bd4c
.\"
Packit 08bd4c
.Ss Prototype Changes
Packit 08bd4c
.\"
Packit 08bd4c
These changes break binary compatibility; libarchive3 has a new shared
Packit 08bd4c
library version to reflect these changes.
Packit 08bd4c
The library now uses portable wide types such as
Packit 08bd4c
.Tn int64_t
Packit 08bd4c
instead of less-portable types such as
Packit 08bd4c
.Tn off_t ,
Packit 08bd4c
.Tn gid_t ,
Packit 08bd4c
.Tn uid_t ,
Packit 08bd4c
and
Packit 08bd4c
.Tn ino_t .
Packit 08bd4c
.Pp
Packit 08bd4c
There are a few cases where these changes will affect your source code:
Packit 08bd4c
.Bl -bullet -width ind
Packit 08bd4c
.It
Packit 08bd4c
In some cases, libarchive's wider types will introduce the possibility
Packit 08bd4c
of truncation: for example, on a system with a 16-bit
Packit 08bd4c
.Tn uid_t , you risk having uid
Packit 08bd4c
.Li 65536
Packit 08bd4c
be truncated to uid
Packit 08bd4c
.Li 0 ,
Packit 08bd4c
which can cause serious security problems.
Packit 08bd4c
.It
Packit 08bd4c
Typedef function pointer types will be incompatible.
Packit 08bd4c
For example, if you define custom skip callbacks, you may have to use
Packit 08bd4c
code similar to the following if you want to support building against
Packit 08bd4c
libarchive2 and libarchive3:
Packit 08bd4c
.Bd -literal
Packit 08bd4c
#if ARCHIVE_VERSION_NUMBER < 3000000
Packit 08bd4c
typedef off_t myoff_t;
Packit 08bd4c
#else
Packit 08bd4c
typedef int64_t myoff_t;
Packit 08bd4c
#endif
Packit 08bd4c
Packit 08bd4c
myoff_t
Packit 08bd4c
my_skip_function(struct archive *a, void *v, myoff_t o)
Packit 08bd4c
{
Packit 08bd4c
    ... implementation ...
Packit 08bd4c
}
Packit 08bd4c
.Ed
Packit 08bd4c
.El
Packit 08bd4c
.Pp
Packit 08bd4c
Affected functions:
Packit 08bd4c
.Pp
Packit 08bd4c
.Bl -bullet -compact
Packit 08bd4c
.It
Packit 08bd4c
.Xo
Packit 08bd4c
.Fn archive_entry_gid ,
Packit 08bd4c
.Fn archive_entry_set_gid
Packit 08bd4c
.Xc
Packit 08bd4c
.It
Packit 08bd4c
.Xo
Packit 08bd4c
.Fn archive_entry_uid ,
Packit 08bd4c
.Fn archive_entry_set_uid
Packit 08bd4c
.Xc
Packit 08bd4c
.It
Packit 08bd4c
.Xo
Packit 08bd4c
.Fn archive_entry_ino ,
Packit 08bd4c
.Fn archive_entry_set_ino
Packit 08bd4c
.Xc
Packit 08bd4c
.It
Packit 08bd4c
.Xo
Packit 08bd4c
.Fn archive_read_data_block ,
Packit 08bd4c
.Fn archive_write_data_block
Packit 08bd4c
.Xc
Packit 08bd4c
.It
Packit 08bd4c
.Xo
Packit 08bd4c
.Fn archive_read_disk_gname ,
Packit 08bd4c
.Fn archive_read_disk_uname
Packit 08bd4c
.Xc
Packit 08bd4c
.It
Packit 08bd4c
.Xo
Packit 08bd4c
.Fn archive_read_disk_set_gname_lookup ,
Packit 08bd4c
.Fn archive_read_disk_set_group_lookup ,
Packit 08bd4c
.Fn archive_read_disk_set_uname_lookup ,
Packit 08bd4c
.Fn archive_read_disk_set_user_lookup
Packit 08bd4c
.Xc
Packit 08bd4c
.It
Packit 08bd4c
.Fn archive_skip_callback
Packit 08bd4c
.It
Packit 08bd4c
.Xo
Packit 08bd4c
.Fn archive_read_extract_set_skip_file ,
Packit 08bd4c
.Fn archive_write_disk_set_skip_file ,
Packit 08bd4c
.Fn archive_write_set_skip_file
Packit 08bd4c
.Xc
Packit 08bd4c
.It
Packit 08bd4c
.Xo
Packit 08bd4c
.Fn archive_write_disk_set_group_lookup ,
Packit 08bd4c
.Fn archive_write_disk_set_user_lookup
Packit 08bd4c
.Xc
Packit 08bd4c
.El
Packit 08bd4c
.Pp
Packit 08bd4c
Where these functions or their arguments took or returned
Packit 08bd4c
.Tn gid_t ,
Packit 08bd4c
.Tn ino_t ,
Packit 08bd4c
.Tn off_t ,
Packit 08bd4c
or
Packit 08bd4c
.Tn uid_t
Packit 08bd4c
they now take or return
Packit 08bd4c
.Tn int64_t
Packit 08bd4c
or equivalent.
Packit 08bd4c
.\"
Packit 08bd4c
.Ss Deprecated Symbols
Packit 08bd4c
.\"
Packit 08bd4c
Symbols deprecated in libarchive3 will be removed in libarchive4.
Packit 08bd4c
These symbols, along with their replacements if any, are listed below:
Packit 08bd4c
.\"
Packit 08bd4c
.Bl -tag -width ind
Packit 08bd4c
.It Fn archive_position_compressed , Fn archive_position_uncompressed
Packit 08bd4c
.Fn archive_filter_bytes
Packit 08bd4c
.It Fn archive_compression
Packit 08bd4c
.Fn archive_filter_code
Packit 08bd4c
.It Fn archive_compression_name
Packit 08bd4c
.Fn archive_filter_name
Packit 08bd4c
.It Fn archive_read_finish , Fn archive_write_finish
Packit 08bd4c
.Fn archive_read_free ,
Packit 08bd4c
.Fn archive_write_free
Packit 08bd4c
.It Fn archive_read_open_file , Fn archive_write_open_file
Packit 08bd4c
.Fn archive_read_open_filename ,
Packit 08bd4c
.Fn archive_write_open_filename
Packit 08bd4c
.It Fn archive_read_support_compression_all
Packit 08bd4c
.\" archive_read_support_compression_* -> archive_read_support_filter_*
Packit 08bd4c
.Fn archive_read_support_filter_all
Packit 08bd4c
.It Fn archive_read_support_compression_bzip2
Packit 08bd4c
.Fn archive_read_support_filter_bzip2
Packit 08bd4c
.It Fn archive_read_support_compression_compress
Packit 08bd4c
.Fn archive_read_support_filter_compress
Packit 08bd4c
.It Fn archive_read_support_compression_gzip
Packit 08bd4c
.Fn archive_read_support_filter_gzip
Packit 08bd4c
.It Fn archive_read_support_compression_lzip
Packit 08bd4c
.Fn archive_read_support_filter_lzip
Packit 08bd4c
.It Fn archive_read_support_compression_lzma
Packit 08bd4c
.Fn archive_read_support_filter_lzma
Packit 08bd4c
.It Fn archive_read_support_compression_none
Packit 08bd4c
.Fn archive_read_support_filter_none
Packit 08bd4c
.It Fn archive_read_support_compression_program
Packit 08bd4c
.Fn archive_read_support_filter_program
Packit 08bd4c
.It Fn archive_read_support_compression_program_signature
Packit 08bd4c
.Fn archive_read_support_filter_program_signature
Packit 08bd4c
.It Fn archive_read_support_compression_rpm
Packit 08bd4c
.Fn archive_read_support_filter_rpm
Packit 08bd4c
.It Fn archive_read_support_compression_uu
Packit 08bd4c
.Fn archive_read_support_filter_uu
Packit 08bd4c
.It Fn archive_read_support_compression_xz
Packit 08bd4c
.Fn archive_read_support_filter_xz
Packit 08bd4c
.\" archive_write_set_compression_* -> archive_write_add_filter_*
Packit 08bd4c
.It Fn archive_write_set_compression_bzip2
Packit 08bd4c
.Fn archive_write_add_filter_bzip2
Packit 08bd4c
.It Fn archive_write_set_compression_compress
Packit 08bd4c
.Fn archive_write_add_filter_compress
Packit 08bd4c
.It Fn archive_write_set_compression_gzip
Packit 08bd4c
.Fn archive_write_add_filter_gzip
Packit 08bd4c
.It Fn archive_write_set_compression_lzip
Packit 08bd4c
.Fn archive_write_add_filter_lzip
Packit 08bd4c
.It Fn archive_write_set_compression_lzma
Packit 08bd4c
.Fn archive_write_add_filter_lzma
Packit 08bd4c
.It Fn archive_write_set_compression_none
Packit 08bd4c
.Fn archive_write_add_filter_none
Packit 08bd4c
.It Fn archive_write_set_compression_program
Packit 08bd4c
.Fn archive_write_add_filter_program
Packit 08bd4c
.It Fn archive_write_set_compression_filter
Packit 08bd4c
.Fn archive_write_add_filter_filter
Packit 08bd4c
.El
Packit 08bd4c
.\"
Packit 08bd4c
.Ss Removed Symbols
Packit 08bd4c
.\"
Packit 08bd4c
These symbols, listed below along with their replacements if any,
Packit 08bd4c
were deprecated in libarchive2, and are not part of libarchive3.
Packit 08bd4c
.\"
Packit 08bd4c
.Bl -tag -width ind
Packit 08bd4c
.It Fn archive_api_feature
Packit 08bd4c
.Fn archive_version_number
Packit 08bd4c
.It Fn archive_api_version
Packit 08bd4c
.Fn archive_version_number
Packit 08bd4c
.It Fn archive_version
Packit 08bd4c
.Fn archive_version_string
Packit 08bd4c
.It Fn archive_version_stamp
Packit 08bd4c
.Fn archive_version_number
Packit 08bd4c
.It Fn archive_read_set_filter_options
Packit 08bd4c
.Fn archive_read_set_options
Packit 08bd4c
or
Packit 08bd4c
.Fn archive_read_set_filter_option
Packit 08bd4c
.It Fn archive_read_set_format_options
Packit 08bd4c
.Fn archive_read_set_options
Packit 08bd4c
or
Packit 08bd4c
.Fn archive_read_set_format_option
Packit 08bd4c
.It Fn archive_write_set_filter_options
Packit 08bd4c
.Fn archive_write_set_options
Packit 08bd4c
or
Packit 08bd4c
.Fn archive_write_set_filter_option
Packit 08bd4c
.It Fn archive_write_set_format_options
Packit 08bd4c
.Fn archive_write_set_options
Packit 08bd4c
or
Packit 08bd4c
.Fn archive_write_set_format_option
Packit 08bd4c
.It Dv ARCHIVE_API_FEATURE
Packit 08bd4c
.Dv ARCHIVE_VERSION_NUMBER
Packit 08bd4c
.It Dv ARCHIVE_API_VERSION
Packit 08bd4c
.Dv ARCHIVE_VERSION_NUMBER
Packit 08bd4c
.It Dv ARCHIVE_VERSION_STAMP
Packit 08bd4c
.Dv ARCHIVE_VERSION_NUMBER
Packit 08bd4c
.It Dv ARCHIVE_LIBRARY_VERSION
Packit 08bd4c
.Dv ARCHIVE_VERSION_STRING
Packit 08bd4c
.\"
Packit 08bd4c
.It Dv ARCHIVE_COMPRESSION_NONE
Packit 08bd4c
.Dv ARCHIVE_FILTER_NONE
Packit 08bd4c
.It Dv ARCHIVE_COMPRESSION_GZIP
Packit 08bd4c
.Dv ARCHIVE_FILTER_GZIP
Packit 08bd4c
.It Dv ARCHIVE_COMPRESSION_BZIP2
Packit 08bd4c
.Dv ARCHIVE_FILTER_BZIP2
Packit 08bd4c
.It Dv ARCHIVE_COMPRESSION_COMPRESS
Packit 08bd4c
.Dv ARCHIVE_FILTER_COMPRESS
Packit 08bd4c
.It Dv ARCHIVE_COMPRESSION_PROGRAM
Packit 08bd4c
.Dv ARCHIVE_FILTER_PROGRAM
Packit 08bd4c
.It Dv ARCHIVE_COMPRESSION_LZMA
Packit 08bd4c
.Dv ARCHIVE_FILTER_LZMA
Packit 08bd4c
.It Dv ARCHIVE_COMPRESSION_XZ
Packit 08bd4c
.Dv ARCHIVE_FILTER_XZ
Packit 08bd4c
.It Dv ARCHIVE_COMPRESSION_UU
Packit 08bd4c
.Dv ARCHIVE_FILTER_UU
Packit 08bd4c
.It Dv ARCHIVE_COMPRESSION_RPM
Packit 08bd4c
.Dv ARCHIVE_FILTER_RPM
Packit 08bd4c
.It Dv ARCHIVE_COMPRESSION_LZIP
Packit 08bd4c
.Dv ARCHIVE_FILTER_LZIP
Packit 08bd4c
.\"
Packit 08bd4c
.It Dv ARCHIVE_BYTES_PER_RECORD
Packit 08bd4c
.Li 512
Packit 08bd4c
.It Dv ARCHIVE_DEFAULT_BYTES_PER_BLOCK
Packit 08bd4c
.Li 10240
Packit 08bd4c
.El
Packit 08bd4c
.Sh SEE ALSO
Packit 08bd4c
.Xr libarchive 3 ,
Packit 08bd4c
.Xr archive_read 3 ,
Packit 08bd4c
.Xr archive_read_filter 3 ,
Packit 08bd4c
.Xr archive_read_format 3 ,
Packit 08bd4c
.Xr archive_read_set_options 3 ,
Packit 08bd4c
.Xr archive_write 3 ,
Packit 08bd4c
.Xr archive_write_filter 3 ,
Packit 08bd4c
.Xr archive_write_format 3 ,
Packit 08bd4c
.Xr archive_write_set_options 3 ,
Packit 08bd4c
.Xr archive_util 3