123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246 |
- .\" Copyright (c) 2003-2011 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 February 2, 2012
- .Dt ARCHIVE_WRITE_OPEN 3
- .Os
- .Sh NAME
- .Nm archive_write_open ,
- .Nm archive_write_open_fd ,
- .Nm archive_write_open_FILE ,
- .Nm archive_write_open_filename ,
- .Nm archive_write_open_memory
- .Nd functions for creating archives
- .Sh LIBRARY
- Streaming Archive Library (libarchive, -larchive)
- .Sh SYNOPSIS
- .In archive.h
- .Ft int
- .Fo archive_write_open
- .Fa "struct archive *"
- .Fa "void *client_data"
- .Fa "archive_open_callback *"
- .Fa "archive_write_callback *"
- .Fa "archive_close_callback *"
- .Fc
- .Ft int
- .Fn archive_write_open_fd "struct archive *" "int fd"
- .Ft int
- .Fn archive_write_open_FILE "struct archive *" "FILE *file"
- .Ft int
- .Fn archive_write_open_filename "struct archive *" "const char *filename"
- .Ft int
- .Fo archive_write_open_memory
- .Fa "struct archive *"
- .Fa "void *buffer"
- .Fa "size_t bufferSize"
- .Fa "size_t *outUsed"
- .Fc
- .Sh DESCRIPTION
- .Bl -tag -width indent
- .It Fn archive_write_open
- Freeze the settings, open the archive, and prepare for writing entries.
- This is the most generic form of this function, which accepts
- pointers to three callback functions which will be invoked by
- the compression layer to write the constructed archive.
- This does not alter the default archive padding.
- .It Fn archive_write_open_fd
- A convenience form of
- .Fn archive_write_open
- that accepts a file descriptor.
- The
- .Fn archive_write_open_fd
- function is safe for use with tape drives or other
- block-oriented devices.
- .It Fn archive_write_open_FILE
- A convenience form of
- .Fn archive_write_open
- that accepts a
- .Ft "FILE *"
- pointer.
- Note that
- .Fn archive_write_open_FILE
- is not safe for writing to tape drives or other devices
- that require correct blocking.
- .It Fn archive_write_open_file
- A deprecated synonym for
- .Fn archive_write_open_filename .
- .It Fn archive_write_open_filename
- A convenience form of
- .Fn archive_write_open
- that accepts a filename.
- A NULL argument indicates that the output should be written to standard output;
- an argument of
- .Dq -
- will open a file with that name.
- If you have not invoked
- .Fn archive_write_set_bytes_in_last_block ,
- then
- .Fn archive_write_open_filename
- will adjust the last-block padding depending on the file:
- it will enable padding when writing to standard output or
- to a character or block device node, it will disable padding otherwise.
- You can override this by manually invoking
- .Fn archive_write_set_bytes_in_last_block
- before calling
- .Fn archive_write_open .
- The
- .Fn archive_write_open_filename
- function is safe for use with tape drives or other
- block-oriented devices.
- .It Fn archive_write_open_memory
- A convenience form of
- .Fn archive_write_open
- that accepts a pointer to a block of memory that will receive
- the archive.
- The final
- .Ft "size_t *"
- argument points to a variable that will be updated
- after each write to reflect how much of the buffer
- is currently in use.
- You should be careful to ensure that this variable
- remains allocated until after the archive is
- closed.
- This function will disable padding unless you
- have specifically set the block size.
- .El
- More information about the
- .Va struct archive
- object and the overall design of the library can be found in the
- .Xr libarchive 3
- overview.
- .Pp
- Note that the convenience forms above vary in how
- they block the output.
- See
- .Xr archive_write_blocksize 3
- if you need to control the block size used for writes
- or the end-of-file padding behavior.
- .\"
- .Sh CLIENT CALLBACKS
- To use this library, you will need to define and register
- callback functions that will be invoked to write data to the
- resulting archive.
- These functions are registered by calling
- .Fn archive_write_open :
- .Bl -item -offset indent
- .It
- .Ft typedef int
- .Fn archive_open_callback "struct archive *" "void *client_data"
- .El
- .Pp
- The open callback is invoked by
- .Fn archive_write_open .
- It should return
- .Cm ARCHIVE_OK
- if the underlying file or data source is successfully
- opened.
- If the open fails, it should call
- .Fn archive_set_error
- to register an error code and message and return
- .Cm ARCHIVE_FATAL .
- .Bl -item -offset indent
- .It
- .Ft typedef la_ssize_t
- .Fo archive_write_callback
- .Fa "struct archive *"
- .Fa "void *client_data"
- .Fa "const void *buffer"
- .Fa "size_t length"
- .Fc
- .El
- .Pp
- The write callback is invoked whenever the library
- needs to write raw bytes to the archive.
- For correct blocking, each call to the write callback function
- should translate into a single
- .Xr write 2
- system call.
- This is especially critical when writing archives to tape drives.
- On success, the write callback should return the
- number of bytes actually written.
- On error, the callback should invoke
- .Fn archive_set_error
- to register an error code and message and return -1.
- .Bl -item -offset indent
- .It
- .Ft typedef int
- .Fn archive_close_callback "struct archive *" "void *client_data"
- .El
- .Pp
- The close callback is invoked by archive_close when
- the archive processing is complete.
- The callback should return
- .Cm ARCHIVE_OK
- on success.
- On failure, the callback should invoke
- .Fn archive_set_error
- to register an error code and message and
- return
- .Cm ARCHIVE_FATAL.
- .Pp
- Note that if the client-provided write callback function
- returns a non-zero value, that error will be propagated back to the caller
- through whatever API function resulted in that call, which
- may include
- .Fn archive_write_header ,
- .Fn archive_write_data ,
- .Fn archive_write_close ,
- .Fn archive_write_finish ,
- or
- .Fn archive_write_free .
- The client callback can call
- .Fn archive_set_error
- to provide values that can then be retrieved by
- .Fn archive_errno
- and
- .Fn archive_error_string .
- .\" .Sh EXAMPLE
- .Sh RETURN VALUES
- These functions return
- .Cm ARCHIVE_OK
- on success, or
- .Cm ARCHIVE_FATAL .
- .\"
- .Sh ERRORS
- 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 libarchive 3 ,
- .Xr archive_write 3 ,
- .Xr archive_write_blocksize 3 ,
- .Xr archive_write_filter 3 ,
- .Xr archive_write_format 3 ,
- .Xr archive_write_new 3 ,
- .Xr archive_write_set_options 3 ,
- .Xr cpio 5 ,
- .Xr mtree 5 ,
- .Xr tar 5
|