summaryrefslogtreecommitdiff
path: root/libarchive/libarchive-2.8.0/doc/wiki/ManPageArchiveWrite3.wiki
diff options
context:
space:
mode:
Diffstat (limited to 'libarchive/libarchive-2.8.0/doc/wiki/ManPageArchiveWrite3.wiki')
-rw-r--r--libarchive/libarchive-2.8.0/doc/wiki/ManPageArchiveWrite3.wiki630
1 files changed, 0 insertions, 630 deletions
diff --git a/libarchive/libarchive-2.8.0/doc/wiki/ManPageArchiveWrite3.wiki b/libarchive/libarchive-2.8.0/doc/wiki/ManPageArchiveWrite3.wiki
deleted file mode 100644
index 30ccd8f..0000000
--- a/libarchive/libarchive-2.8.0/doc/wiki/ManPageArchiveWrite3.wiki
+++ /dev/null
@@ -1,630 +0,0 @@
-#summary archive_write 3 manual page
-== NAME ==
-*archive_write_new*,
-*archive_write_set_format_cpio*,
-*archive_write_set_format_pax*,
-*archive_write_set_format_pax_restricted*,
-*archive_write_set_format_shar*,
-*archive_write_set_format_shar_binary*,
-*archive_write_set_format_ustar*,
-*archive_write_get_bytes_per_block*,
-*archive_write_set_bytes_per_block*,
-*archive_write_set_bytes_in_last_block*,
-*archive_write_set_compression_bzip2*,
-*archive_write_set_compression_compress*,
-*archive_write_set_compression_gzip*,
-*archive_write_set_compression_none*,
-*archive_write_set_compression_program*,
-*archive_write_set_compressor_options*,
-*archive_write_set_format_options*,
-*archive_write_set_options*,
-*archive_write_open*,
-*archive_write_open_fd*,
-*archive_write_open_FILE*,
-*archive_write_open_filename*,
-*archive_write_open_memory*,
-*archive_write_header*,
-*archive_write_data*,
-*archive_write_finish_entry*,
-*archive_write_close*,
-*archive_write_finish*
-- functions for creating archives
-== SYNOPSIS ==
-*#include <archive.h>*
-<br>
-*struct archive `*`*
-<br>
-*archive_write_new*(_void_);
-<br>
-*int*
-<br>
-*archive_write_get_bytes_per_block*(_struct archive `*`_);
-<br>
-*int*
-<br>
-*archive_write_set_bytes_per_block*(_struct archive `*`_, _int bytes_per_block_);
-<br>
-*int*
-<br>
-*archive_write_set_bytes_in_last_block*(_struct archive `*`_, _int_);
-<br>
-*int*
-<br>
-*archive_write_set_compression_bzip2*(_struct archive `*`_);
-<br>
-*int*
-<br>
-*archive_write_set_compression_compress*(_struct archive `*`_);
-<br>
-*int*
-<br>
-*archive_write_set_compression_gzip*(_struct archive `*`_);
-<br>
-*int*
-<br>
-*archive_write_set_compression_none*(_struct archive `*`_);
-<br>
-*int*
-<br>
-*archive_write_set_compression_program*(_struct archive `*`_, _const char `*` cmd_);
-<br>
-*int*
-<br>
-*archive_write_set_format_cpio*(_struct archive `*`_);
-<br>
-*int*
-<br>
-*archive_write_set_format_pax*(_struct archive `*`_);
-<br>
-*int*
-<br>
-*archive_write_set_format_pax_restricted*(_struct archive `*`_);
-<br>
-*int*
-<br>
-*archive_write_set_format_shar*(_struct archive `*`_);
-<br>
-*int*
-<br>
-*archive_write_set_format_shar_binary*(_struct archive `*`_);
-<br>
-*int*
-<br>
-*archive_write_set_format_ustar*(_struct archive `*`_);
-<br>
-*int*
-<br>
-*archive_write_set_format_options*(_struct archive `*`_, _const char `*`_);
-<br>
-*int*
-<br>
-*archive_write_set_compressor_options*(_struct archive `*`_, _const char `*`_);
-<br>
-*int*
-<br>
-*archive_write_set_options*(_struct archive `*`_, _const char `*`_);
-<br>
-*int*
-<br>
-*archive_write_open*(_struct archive `*`_, _void `*`client_data_, _archive_open_callback `*`_, _archive_write_callback `*`_, _archive_close_callback `*`_);
-<br>
-*int*
-<br>
-*archive_write_open_fd*(_struct archive `*`_, _int fd_);
-<br>
-*int*
-<br>
-*archive_write_open_FILE*(_struct archive `*`_, _FILE `*`file_);
-<br>
-*int*
-<br>
-*archive_write_open_filename*(_struct archive `*`_, _const char `*`filename_);
-<br>
-*int*
-<br>
-*archive_write_open_memory*(_struct archive `*`_, _void `*`buffer_, _size_t bufferSize_, _size_t `*`outUsed_);
-<br>
-*int*
-<br>
-*archive_write_header*(_struct archive `*`_, _struct archive_entry `*`_);
-<br>
-*ssize_t*
-<br>
-*archive_write_data*(_struct archive `*`_, _const void `*`_, _size_t_);
-<br>
-*int*
-<br>
-*archive_write_finish_entry*(_struct archive `*`_);
-<br>
-*int*
-<br>
-*archive_write_close*(_struct archive `*`_);
-<br>
-*int*
-<br>
-*archive_write_finish*(_struct archive `*`_);
-== DESCRIPTION ==
-These functions provide a complete API for creating streaming
-archive files.
-The general process is to first create the
-*struct archive*
-object, set any desired options, initialize the archive, append entries, then
-close the archive and release all resources.
-The following summary describes the functions in approximately
-the order they are ordinarily used:
-<dl>
-<dt>*archive_write_new*()</dt><dd>
-Allocates and initializes a
-*struct archive*
-object suitable for writing a tar archive.
-</dd><dt>*archive_write_set_bytes_per_block*()</dt><dd>
-Sets the block size used for writing the archive data.
-Every call to the write callback function, except possibly the last one, will
-use this value for the length.
-The third parameter is a boolean that specifies whether or not the final block
-written will be padded to the full block size.
-If it is zero, the last block will not be padded.
-If it is non-zero, padding will be added both before and after compression.
-The default is to use a block size of 10240 bytes and to pad the last block.
-Note that a block size of zero will suppress internal blocking
-and cause writes to be sent directly to the write callback as they occur.
-</dd><dt>*archive_write_get_bytes_per_block*()</dt><dd>
-Retrieve the block size to be used for writing.
-A value of -1 here indicates that the library should use default values.
-A value of zero indicates that internal blocking is suppressed.
-</dd><dt>*archive_write_set_bytes_in_last_block*()</dt><dd>
-Sets the block size used for writing the last block.
-If this value is zero, the last block will be padded to the same size
-as the other blocks.
-Otherwise, the final block will be padded to a multiple of this size.
-In particular, setting it to 1 will cause the final block to not be padded.
-For compressed output, any padding generated by this option
-is applied only after the compression.
-The uncompressed data is always unpadded.
-The default is to pad the last block to the full block size (note that
-*archive_write_open_filename*()
-will set this based on the file type).
-Unlike the other
-"set"
-functions, this function can be called after the archive is opened.
-</dd><dt>*archive_write_get_bytes_in_last_block*()</dt><dd>
-Retrieve the currently-set value for last block size.
-A value of -1 here indicates that the library should use default values.
-</dd><dt>
-*archive_write_set_format_cpio*(),
-*archive_write_set_format_pax*(),
-*archive_write_set_format_pax_restricted*(),
-*archive_write_set_format_shar*(),
-*archive_write_set_format_shar_binary*(),
-*archive_write_set_format_ustar*()
-</dt> <dd>
-Sets the format that will be used for the archive.
-The library can write
-POSIX octet-oriented cpio format archives,
-POSIX-standard
-"pax interchange"
-format archives,
-traditional
-"shar"
-archives,
-enhanced
-"binary"
-shar archives that store a variety of file attributes and handle binary files,
-and
-POSIX-standard
-"ustar"
-archives.
-The pax interchange format is a backwards-compatible tar format that
-adds key/value attributes to each entry and supports arbitrary
-filenames, linknames, uids, sizes, etc.
-"Restricted pax interchange format"
-is the library default; this is the same as pax format, but suppresses
-the pax extended header for most normal files.
-In most cases, this will result in ordinary ustar archives.
-</dd><dt>
-*archive_write_set_compression_bzip2*(),
-*archive_write_set_compression_compress*(),
-*archive_write_set_compression_gzip*(),
-*archive_write_set_compression_none*()
-</dt> <dd>
-The resulting archive will be compressed as specified.
-Note that the compressed output is always properly blocked.
-</dd><dt>*archive_write_set_compression_program*()</dt><dd>
-The archive will be fed into the specified compression program.
-The output of that program is blocked and written to the client
-write callbacks.
-</dd><dt>
-*archive_write_set_compressor_options*(),
-*archive_write_set_format_options*(),
-*archive_write_set_options*()
-</dt> <dd>
-Specifies options that will be passed to the currently-enabled
-compressor and/or format writer.
-The argument is a comma-separated list of individual options.
-Individual options have one of the following forms:
-<dl>
-<dt>_option=value_</dt><dd>
-The option/value pair will be provided to every module.
-Modules that do not accept an option with this name will ignore it.
-</dd><dt>_option_</dt><dd>
-The option will be provided to every module with a value of
-"1".
-</dd><dt>_!option_</dt><dd>
-The option will be provided to every module with a NULL value.
-</dd><dt>_module:option=value_, _module:option_, _module:!option_</dt><dd>
-As above, but the corresponding option and value will be provided
-only to modules whose name matches
-_module_.
-</dd></dl>
-The return value will be
-*ARCHIVE_OK*
-if any module accepts the option, or
-*ARCHIVE_WARN*
-if no module accepted the option, or
-*ARCHIVE_FATAL*
-if there was a fatal error while attempting to process the option.
-
-The currently supported options are:
-<dl>
-<dt>Compressor gzip</dt><dd>
-<dl>
-<dt>*compression-level*</dt><dd>
-The value is interpreted as a decimal integer specifying the
-gzip compression level.
-</dd></dl>
-</dd><dt>Compressor xz</dt><dd>
-<dl>
-<dt>*compression-level*</dt><dd>
-The value is interpreted as a decimal integer specifying the
-compression level.
-</dd></dl>
-</dd><dt>Format mtree</dt><dd>
-<dl>
-<dt>*cksum*, *device*, *flags*, *gid*, *gname*, *indent*, *link*, *md5*, *mode*, *nlink*, *rmd160*, *sha1*, *sha256*, *sha384*, *sha512*, *size*, *time*, *uid*, *uname*</dt><dd>
-Enable a particular keyword in the mtree output.
-Prefix with an exclamation mark to disable the corresponding keyword.
-The default is equivalent to
-"device, flags, gid, gname, link, mode, nlink, size, time, type, uid, uname".
-</dd><dt>*all*</dt><dd>
-Enables all of the above keywords.
-</dd><dt>*use-set*</dt><dd>
-Enables generation of
-*/set*
-lines that specify default values for the following files and/or directories.
-</dd><dt>*indent*</dt><dd>
-XXX needs explanation XXX
-</dd></dl>
-</dd></dl>
-</dd><dt>*archive_write_open*()</dt><dd>
-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.
-</dd><dt>*archive_write_open_fd*()</dt><dd>
-A convenience form of
-*archive_write_open*()
-that accepts a file descriptor.
-The
-*archive_write_open_fd*()
-function is safe for use with tape drives or other
-block-oriented devices.
-</dd><dt>*archive_write_open_FILE*()</dt><dd>
-A convenience form of
-*archive_write_open*()
-that accepts a
-*FILE `*`*
-pointer.
-Note that
-*archive_write_open_FILE*()
-is not safe for writing to tape drives or other devices
-that require correct blocking.
-</dd><dt>*archive_write_open_file*()</dt><dd>
-A deprecated synonym for
-*archive_write_open_filename*().
-</dd><dt>*archive_write_open_filename*()</dt><dd>
-A convenience form of
-*archive_write_open*()
-that accepts a filename.
-A NULL argument indicates that the output should be written to standard output;
-an argument of
-"-"
-will open a file with that name.
-If you have not invoked
-*archive_write_set_bytes_in_last_block*(),
-then
-*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
-*archive_write_set_bytes_in_last_block*()
-before calling
-*archive_write_open*().
-The
-*archive_write_open_filename*()
-function is safe for use with tape drives or other
-block-oriented devices.
-</dd><dt>*archive_write_open_memory*()</dt><dd>
-A convenience form of
-*archive_write_open*()
-that accepts a pointer to a block of memory that will receive
-the archive.
-The final
-*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.
-</dd><dt>*archive_write_header*()</dt><dd>
-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.
-</dd><dt>*archive_write_data*()</dt><dd>
-Write data corresponding to the header just written.
-Returns number of bytes written or -1 on error.
-</dd><dt>*archive_write_finish_entry*()</dt><dd>
-Close out the entry just written.
-In particular, this writes out the final padding required by some formats.
-Ordinarily, clients never need to call this, as it
-is called automatically by
-*archive_write_next_header*()
-and
-*archive_write_close*()
-as needed.
-</dd><dt>*archive_write_close*()</dt><dd>
-Complete the archive and invoke the close callback.
-</dd><dt>*archive_write_finish*()</dt><dd>
-Invokes
-*archive_write_close*()
-if it was not invoked manually, then releases all resources.
-Note that this function was declared to return
-*void*
-in libarchive 1.x, which made it impossible to detect errors when
-*archive_write_close*()
-was invoked implicitly from this function.
-This is corrected beginning with libarchive 2.0.
-</dd></dl>
-More information about the
-_struct_ archive
-object and the overall design of the library can be found in the
-*libarchive*(3)
-overview.
-== IMPLEMENTATION ==
-Compression support is built-in to libarchive, which uses zlib and bzlib
-to handle gzip and bzip2 compression, respectively.
-== 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
-*archive_write_open*():
-<ul>
-<li>
-*typedef int*
-*archive_open_callback*(_struct archive `*`_, _void `*`client_data_)
-</li></ul>
-
-The open callback is invoked by
-*archive_write_open*().
-It should return
-*ARCHIVE_OK*
-if the underlying file or data source is successfully
-opened.
-If the open fails, it should call
-*archive_set_error*()
-to register an error code and message and return
-*ARCHIVE_FATAL*.
-<ul>
-<li>
-*typedef ssize_t*
-*archive_write_callback*(_struct archive `*`_, _void `*`client_data_, _const void `*`buffer_, _size_t length_)
-</li></ul>
-
-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
-*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
-*archive_set_error*()
-to register an error code and message and return -1.
-<ul>
-<li>
-*typedef int*
-*archive_close_callback*(_struct archive `*`_, _void `*`client_data_)
-</li></ul>
-
-The close callback is invoked by archive_close when
-the archive processing is complete.
-The callback should return
-*ARCHIVE_OK*
-on success.
-On failure, the callback should invoke
-*archive_set_error*()
-to register an error code and message and
-return
-*ARCHIVE_FATAL.*
-== EXAMPLE ==
-The following sketch illustrates basic usage of the library.
-In this example,
-the callback functions are simply wrappers around the standard
-*open*(2),
-*write*(2),
-and
-*close*(2)
-system calls.
-{{{
-#ifdef __linux__
-#define _FILE_OFFSET_BITS 64
-#endif
-#include <sys/stat.h>
-#include <archive.h>
-#include <archive_entry.h>
-#include <fcntl.h>
-#include <stdlib.h>
-#include <unistd.h>
-struct mydata {
- const char *name;
- int fd;
-};
-int
-myopen(struct archive *a, void *client_data)
-{
- struct mydata *mydata = client_data;
- mydata->fd = open(mydata->name, O_WRONLY | O_CREAT, 0644);
- if (mydata->fd >= 0)
- return (ARCHIVE_OK);
- else
- return (ARCHIVE_FATAL);
-}
-ssize_t
-mywrite(struct archive *a, void *client_data, const void *buff, size_t n)
-{
- struct mydata *mydata = client_data;
- return (write(mydata->fd, buff, n));
-}
-int
-myclose(struct archive *a, void *client_data)
-{
- struct mydata *mydata = client_data;
- if (mydata->fd > 0)
- close(mydata->fd);
- return (0);
-}
-void
-write_archive(const char *outname, const char **filename)
-{
- struct mydata *mydata = malloc(sizeof(struct mydata));
- struct archive *a;
- struct archive_entry *entry;
- struct stat st;
- char buff[8192];
- int len;
- int fd;
- a = archive_write_new();
- mydata->name = outname;
- archive_write_set_compression_gzip(a);
- archive_write_set_format_ustar(a);
- archive_write_open(a, mydata, myopen, mywrite, myclose);
- while (*filename) {
- stat(*filename, &st);
- entry = archive_entry_new();
- archive_entry_copy_stat(entry, &st);
- archive_entry_set_pathname(entry, *filename);
- archive_write_header(a, entry);
- fd = open(*filename, O_RDONLY);
- len = read(fd, buff, sizeof(buff));
- while ( len > 0 ) {
- archive_write_data(a, buff, len);
- len = read(fd, buff, sizeof(buff));
- }
- archive_entry_free(entry);
- filename++;
- }
- archive_write_finish(a);
-}
-int main(int argc, const char **argv)
-{
- const char *outname;
- argv++;
- outname = argv++;
- write_archive(outname, argv);
- return 0;
-}
-}}}
-== RETURN VALUES ==
-Most functions return
-*ARCHIVE_OK*
-(zero) on success, or one of several non-zero
-error codes for errors.
-Specific error codes include:
-*ARCHIVE_RETRY*
-for operations that might succeed if retried,
-*ARCHIVE_WARN*
-for unusual conditions that do not prevent further operations, and
-*ARCHIVE_FATAL*
-for serious errors that make remaining operations impossible.
-The
-*archive_errno*()
-and
-*archive_error_string*()
-functions can be used to retrieve an appropriate error code and a
-textual error message.
-
-*archive_write_new*()
-returns a pointer to a newly-allocated
-*struct archive*
-object.
-
-*archive_write_data*()
-returns a count of the number of bytes actually written.
-On error, -1 is returned and the
-*archive_errno*()
-and
-*archive_error_string*()
-functions will return appropriate values.
-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
-*archive_write_header*(),
-*archive_write_data*(),
-*archive_write_close*(),
-or
-*archive_write_finish*().
-The client callback can call
-*archive_set_error*()
-to provide values that can then be retrieved by
-*archive_errno*()
-and
-*archive_error_string*().
-== SEE ALSO ==
-*tar*(1),
-*libarchive*(3),
-*tar*(5)
-== HISTORY ==
-The
-*libarchive*
-library first appeared in
-FreeBSD 5.3.
-== AUTHORS ==
-The
-*libarchive*
-library was written by
-Tim Kientzle <kientzle@acm.org.>
-== BUGS ==
-There are many peculiar bugs in historic tar implementations that may cause
-certain programs to reject archives written by this library.
-For example, several historic implementations calculated header checksums
-incorrectly and will thus reject valid archives; GNU tar does not fully support
-pax interchange format; some old tar implementations required specific
-field terminations.
-
-The default pax interchange format eliminates most of the historic
-tar limitations and provides a generic key/value attribute facility
-for vendor-defined extensions.
-One oversight in POSIX is the failure to provide a standard attribute
-for large device numbers.
-This library uses
-"SCHILY.devminor"
-and
-"SCHILY.devmajor"
-for device numbers that exceed the range supported by the backwards-compatible
-ustar header.
-These keys are compatible with Joerg Schilling's
-*star*
-archiver.
-Other implementations may not recognize these keys and will thus be unable
-to correctly restore device nodes with large device numbers from archives
-created by this library.