Blame libarchive/archive_read_open.3

Packit 08bd4c
.\" Copyright (c) 2003-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 February 2, 2012
Packit 08bd4c
.Dt ARCHIVE_READ_OPEN 3
Packit 08bd4c
.Os
Packit 08bd4c
.Sh NAME
Packit 08bd4c
.Nm archive_read_open ,
Packit 08bd4c
.Nm archive_read_open2 ,
Packit 08bd4c
.Nm archive_read_open_fd ,
Packit 08bd4c
.Nm archive_read_open_FILE ,
Packit 08bd4c
.Nm archive_read_open_filename ,
Packit 08bd4c
.Nm archive_read_open_memory
Packit 08bd4c
.Nd functions for reading streaming archives
Packit 08bd4c
.Sh LIBRARY
Packit 08bd4c
Streaming Archive Library (libarchive, -larchive)
Packit 08bd4c
.Sh SYNOPSIS
Packit 08bd4c
.In archive.h
Packit 08bd4c
.Ft int
Packit 08bd4c
.Fo archive_read_open
Packit 08bd4c
.Fa "struct archive *"
Packit 08bd4c
.Fa "void *client_data"
Packit 08bd4c
.Fa "archive_open_callback *"
Packit 08bd4c
.Fa "archive_read_callback *"
Packit 08bd4c
.Fa "archive_close_callback *"
Packit 08bd4c
.Fc
Packit 08bd4c
.Ft int
Packit 08bd4c
.Fo archive_read_open2
Packit 08bd4c
.Fa "struct archive *"
Packit 08bd4c
.Fa "void *client_data"
Packit 08bd4c
.Fa "archive_open_callback *"
Packit 08bd4c
.Fa "archive_read_callback *"
Packit 08bd4c
.Fa "archive_skip_callback *"
Packit 08bd4c
.Fa "archive_close_callback *"
Packit 08bd4c
.Fc
Packit 08bd4c
.Ft int
Packit 08bd4c
.Fn archive_read_open_FILE "struct archive *" "FILE *file"
Packit 08bd4c
.Ft int
Packit 08bd4c
.Fn archive_read_open_fd "struct archive *" "int fd" "size_t block_size"
Packit 08bd4c
.Ft int
Packit 08bd4c
.Fo archive_read_open_filename
Packit 08bd4c
.Fa "struct archive *"
Packit 08bd4c
.Fa "const char *filename"
Packit 08bd4c
.Fa "size_t block_size"
Packit 08bd4c
.Fc
Packit 08bd4c
.Ft int
Packit 08bd4c
.Fn archive_read_open_memory "struct archive *" "const void *buff" "size_t size"
Packit 08bd4c
.Sh DESCRIPTION
Packit 08bd4c
.Bl -tag -compact -width indent
Packit 08bd4c
.It Fn archive_read_open
Packit 08bd4c
The same as
Packit 08bd4c
.Fn archive_read_open2 ,
Packit 08bd4c
except that the skip callback is assumed to be
Packit 08bd4c
.Dv NULL .
Packit 08bd4c
.It Fn archive_read_open2
Packit 08bd4c
Freeze the settings, open the archive, and prepare for reading entries.
Packit 08bd4c
This is the most generic version of this call, which accepts
Packit 08bd4c
four callback functions.
Packit 08bd4c
Most clients will want to use
Packit 08bd4c
.Fn archive_read_open_filename ,
Packit 08bd4c
.Fn archive_read_open_FILE ,
Packit 08bd4c
.Fn archive_read_open_fd ,
Packit 08bd4c
or
Packit 08bd4c
.Fn archive_read_open_memory
Packit 08bd4c
instead.
Packit 08bd4c
The library invokes the client-provided functions to obtain
Packit 08bd4c
raw bytes from the archive.
Packit 08bd4c
.It Fn archive_read_open_FILE
Packit 08bd4c
Like
Packit 08bd4c
.Fn archive_read_open ,
Packit 08bd4c
except that it accepts a
Packit 08bd4c
.Ft "FILE *"
Packit 08bd4c
pointer.
Packit 08bd4c
This function should not be used with tape drives or other devices
Packit 08bd4c
that require strict I/O blocking.
Packit 08bd4c
.It Fn archive_read_open_fd
Packit 08bd4c
Like
Packit 08bd4c
.Fn archive_read_open ,
Packit 08bd4c
except that it accepts a file descriptor and block size rather than
Packit 08bd4c
a set of function pointers.
Packit 08bd4c
Note that the file descriptor will not be automatically closed at
Packit 08bd4c
end-of-archive.
Packit 08bd4c
This function is safe for use with tape drives or other blocked devices.
Packit 08bd4c
.It Fn archive_read_open_file
Packit 08bd4c
This is a deprecated synonym for
Packit 08bd4c
.Fn archive_read_open_filename .
Packit 08bd4c
.It Fn archive_read_open_filename
Packit 08bd4c
Like
Packit 08bd4c
.Fn archive_read_open ,
Packit 08bd4c
except that it accepts a simple filename and a block size.
Packit 08bd4c
A NULL filename represents standard input.
Packit 08bd4c
This function is safe for use with tape drives or other blocked devices.
Packit 08bd4c
.It Fn archive_read_open_memory
Packit 08bd4c
Like
Packit 08bd4c
.Fn archive_read_open ,
Packit 08bd4c
except that it accepts a pointer and size of a block of
Packit 08bd4c
memory containing the archive data.
Packit 08bd4c
.El
Packit 08bd4c
.Pp
Packit 08bd4c
A complete description of the
Packit 08bd4c
.Tn struct archive
Packit 08bd4c
and
Packit 08bd4c
.Tn struct archive_entry
Packit 08bd4c
objects can be found in the overview manual page for
Packit 08bd4c
.Xr libarchive 3 .
Packit 08bd4c
.Sh CLIENT CALLBACKS
Packit 08bd4c
The callback functions must match the following prototypes:
Packit 08bd4c
.Bl -item -offset indent
Packit 08bd4c
.It
Packit 08bd4c
.Ft typedef la_ssize_t
Packit 08bd4c
.Fo archive_read_callback
Packit 08bd4c
.Fa "struct archive *"
Packit 08bd4c
.Fa "void *client_data"
Packit 08bd4c
.Fa "const void **buffer"
Packit 08bd4c
.Fc
Packit 08bd4c
.It
Packit 08bd4c
.Ft typedef la_int64_t
Packit 08bd4c
.Fo archive_skip_callback
Packit 08bd4c
.Fa "struct archive *"
Packit 08bd4c
.Fa "void *client_data"
Packit 08bd4c
.Fa "off_t request"
Packit 08bd4c
.Fc
Packit 08bd4c
.It
Packit 08bd4c
.Ft typedef int
Packit 08bd4c
.Fn archive_open_callback "struct archive *" "void *client_data"
Packit 08bd4c
.It
Packit 08bd4c
.Ft typedef int
Packit 08bd4c
.Fn archive_close_callback "struct archive *" "void *client_data"
Packit 08bd4c
.El
Packit 08bd4c
.Pp
Packit 08bd4c
The open callback is invoked by
Packit 08bd4c
.Fn archive_open .
Packit 08bd4c
It should return
Packit 08bd4c
.Cm ARCHIVE_OK
Packit 08bd4c
if the underlying file or data source is successfully
Packit 08bd4c
opened.
Packit 08bd4c
If the open fails, it should call
Packit 08bd4c
.Fn archive_set_error
Packit 08bd4c
to register an error code and message and return
Packit 08bd4c
.Cm ARCHIVE_FATAL .
Packit 08bd4c
.Pp
Packit 08bd4c
The read callback is invoked whenever the library
Packit 08bd4c
requires raw bytes from the archive.
Packit 08bd4c
The read callback should read data into a buffer,
Packit 08bd4c
set the
Packit 08bd4c
.Li const void **buffer
Packit 08bd4c
argument to point to the available data, and
Packit 08bd4c
return a count of the number of bytes available.
Packit 08bd4c
The library will invoke the read callback again
Packit 08bd4c
only after it has consumed this data.
Packit 08bd4c
The library imposes no constraints on the size
Packit 08bd4c
of the data blocks returned.
Packit 08bd4c
On end-of-file, the read callback should
Packit 08bd4c
return zero.
Packit 08bd4c
On error, the read callback should invoke
Packit 08bd4c
.Fn archive_set_error
Packit 08bd4c
to register an error code and message and
Packit 08bd4c
return -1.
Packit 08bd4c
.Pp
Packit 08bd4c
The skip callback is invoked when the
Packit 08bd4c
library wants to ignore a block of data.
Packit 08bd4c
The return value is the number of bytes actually
Packit 08bd4c
skipped, which may differ from the request.
Packit 08bd4c
If the callback cannot skip data, it should return
Packit 08bd4c
zero.
Packit 08bd4c
If the skip callback is not provided (the
Packit 08bd4c
function pointer is
Packit 08bd4c
.Dv NULL ),
Packit 08bd4c
the library will invoke the read function
Packit 08bd4c
instead and simply discard the result.
Packit 08bd4c
A skip callback can provide significant
Packit 08bd4c
performance gains when reading uncompressed
Packit 08bd4c
archives from slow disk drives or other media
Packit 08bd4c
that can skip quickly.
Packit 08bd4c
.Pp
Packit 08bd4c
The close callback is invoked by archive_close when
Packit 08bd4c
the archive processing is complete.
Packit 08bd4c
The callback should return
Packit 08bd4c
.Cm ARCHIVE_OK
Packit 08bd4c
on success.
Packit 08bd4c
On failure, the callback should invoke
Packit 08bd4c
.Fn archive_set_error
Packit 08bd4c
to register an error code and message and
Packit 08bd4c
return
Packit 08bd4c
.Cm ARCHIVE_FATAL.
Packit 08bd4c
.\" .Sh EXAMPLE
Packit 08bd4c
.\"
Packit 08bd4c
.Sh RETURN VALUES
Packit 08bd4c
These functions return
Packit 08bd4c
.Cm ARCHIVE_OK
Packit 08bd4c
on success, or
Packit 08bd4c
.Cm ARCHIVE_FATAL .
Packit 08bd4c
.\"
Packit 08bd4c
.Sh ERRORS
Packit 08bd4c
Detailed error codes and textual descriptions are available from the
Packit 08bd4c
.Fn archive_errno
Packit 08bd4c
and
Packit 08bd4c
.Fn archive_error_string
Packit 08bd4c
functions.
Packit 08bd4c
.\"
Packit 08bd4c
.Sh SEE ALSO
Packit 08bd4c
.Xr tar 1 ,
Packit 08bd4c
.Xr libarchive 3 ,
Packit 08bd4c
.Xr archive_read 3 ,
Packit 08bd4c
.Xr archive_read_data 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_util 3 ,
Packit 08bd4c
.Xr tar 5