summaryrefslogtreecommitdiff
path: root/libarchive/libarchive-2.8.0/doc/wiki/ManPageArchiveWriteDisk3.wiki
diff options
context:
space:
mode:
authorTomas Bzatek <tbzatek@redhat.com>2010-02-05 11:06:31 +0100
committerTomas Bzatek <tbzatek@redhat.com>2010-02-05 11:06:31 +0100
commitbaea7d877d3cf69679a39e8512a120658a478073 (patch)
tree37c9a98cb3d3a322f3f91c8ca656ccd6bd2eaebe /libarchive/libarchive-2.8.0/doc/wiki/ManPageArchiveWriteDisk3.wiki
parente42a4ff3031aa1c1aaf27aa34d9395fec185924b (diff)
downloadtuxcmd-modules-baea7d877d3cf69679a39e8512a120658a478073.tar.xz
Rebase libarchive to 2.8.0
Diffstat (limited to 'libarchive/libarchive-2.8.0/doc/wiki/ManPageArchiveWriteDisk3.wiki')
-rw-r--r--libarchive/libarchive-2.8.0/doc/wiki/ManPageArchiveWriteDisk3.wiki358
1 files changed, 358 insertions, 0 deletions
diff --git a/libarchive/libarchive-2.8.0/doc/wiki/ManPageArchiveWriteDisk3.wiki b/libarchive/libarchive-2.8.0/doc/wiki/ManPageArchiveWriteDisk3.wiki
new file mode 100644
index 0000000..f71f85f
--- /dev/null
+++ b/libarchive/libarchive-2.8.0/doc/wiki/ManPageArchiveWriteDisk3.wiki
@@ -0,0 +1,358 @@
+#summary archive_write_disk 3 manual page
+== NAME ==
+*archive_write_disk_new*,
+*archive_write_disk_set_options*,
+*archive_write_disk_set_skip_file*,
+*archive_write_disk_set_group_lookup*,
+*archive_write_disk_set_standard_lookup*,
+*archive_write_disk_set_user_lookup*,
+*archive_write_header*,
+*archive_write_data*,
+*archive_write_finish_entry*,
+*archive_write_close*,
+*archive_write_finish*
+- functions for creating objects on disk
+== SYNOPSIS ==
+*#include <archive.h>*
+<br>
+*struct archive `*`*
+<br>
+*archive_write_disk_new*(_void_);
+<br>
+*int*
+<br>
+*archive_write_disk_set_options*(_struct archive `*`_, _int flags_);
+<br>
+*int*
+<br>
+*archive_write_disk_set_skip_file*(_struct archive `*`_, _dev_t_, _ino_t_);
+<br>
+*int*
+<br>
+*archive_write_disk_set_group_lookup*(_struct archive `*`_, _void `*`_, _gid_t (`*`)(void `*`, const char `*`gname, gid_t gid)_, _void (`*`cleanup)(void `*`)_);
+<br>
+*int*
+<br>
+*archive_write_disk_set_standard_lookup*(_struct archive `*`_);
+<br>
+*int*
+<br>
+*archive_write_disk_set_user_lookup*(_struct archive `*`_, _void `*`_, _uid_t (`*`)(void `*`, const char `*`uname, uid_t uid)_, _void (`*`cleanup)(void `*`)_);
+<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 objects on
+disk from
+*struct archive_entry*
+descriptions.
+They are most naturally used when extracting objects from an archive
+using the
+*archive_read*()
+interface.
+The general process is to read
+*struct archive_entry*
+objects from an archive, then write those objects to a
+*struct archive*
+object created using the
+*archive_write_disk*()
+family functions.
+This interface is deliberately very similar to the
+*archive_write*()
+interface used to write objects to a streaming archive.
+<dl>
+<dt>*archive_write_disk_new*()</dt><dd>
+Allocates and initializes a
+*struct archive*
+object suitable for writing objects to disk.
+</dd><dt>*archive_write_disk_set_skip_file*()</dt><dd>
+Records the device and inode numbers of a file that should not be
+overwritten.
+This is typically used to ensure that an extraction process does not
+overwrite the archive from which objects are being read.
+This capability is technically unnecessary but can be a significant
+performance optimization in practice.
+</dd><dt>*archive_write_disk_set_options*()</dt><dd>
+The options field consists of a bitwise OR of one or more of the
+following values:
+<dl>
+<dt>*ARCHIVE_EXTRACT_OWNER*</dt><dd>
+The user and group IDs should be set on the restored file.
+By default, the user and group IDs are not restored.
+</dd><dt>*ARCHIVE_EXTRACT_PERM*</dt><dd>
+Full permissions (including SGID, SUID, and sticky bits) should
+be restored exactly as specified, without obeying the
+current umask.
+Note that SUID and SGID bits can only be restored if the
+user and group ID of the object on disk are correct.
+If
+*ARCHIVE_EXTRACT_OWNER*
+is not specified, then SUID and SGID bits will only be restored
+if the default user and group IDs of newly-created objects on disk
+happen to match those specified in the archive entry.
+By default, only basic permissions are restored, and umask is obeyed.
+</dd><dt>*ARCHIVE_EXTRACT_TIME*</dt><dd>
+The timestamps (mtime, ctime, and atime) should be restored.
+By default, they are ignored.
+Note that restoring of atime is not currently supported.
+</dd><dt>*ARCHIVE_EXTRACT_NO_OVERWRITE*</dt><dd>
+Existing files on disk will not be overwritten.
+By default, existing regular files are truncated and overwritten;
+existing directories will have their permissions updated;
+other pre-existing objects are unlinked and recreated from scratch.
+</dd><dt>*ARCHIVE_EXTRACT_UNLINK*</dt><dd>
+Existing files on disk will be unlinked before any attempt to
+create them.
+In some cases, this can prove to be a significant performance improvement.
+By default, existing files are truncated and rewritten, but
+the file is not recreated.
+In particular, the default behavior does not break existing hard links.
+</dd><dt>*ARCHIVE_EXTRACT_ACL*</dt><dd>
+Attempt to restore ACLs.
+By default, extended ACLs are ignored.
+</dd><dt>*ARCHIVE_EXTRACT_FFLAGS*</dt><dd>
+Attempt to restore extended file flags.
+By default, file flags are ignored.
+</dd><dt>*ARCHIVE_EXTRACT_XATTR*</dt><dd>
+Attempt to restore POSIX.1e extended attributes.
+By default, they are ignored.
+</dd><dt>*ARCHIVE_EXTRACT_SECURE_SYMLINKS*</dt><dd>
+Refuse to extract any object whose final location would be altered
+by a symlink on disk.
+This is intended to help guard against a variety of mischief
+caused by archives that (deliberately or otherwise) extract
+files outside of the current directory.
+The default is not to perform this check.
+If
+*ARCHIVE_EXTRACT_UNLINK*
+is specified together with this option, the library will
+remove any intermediate symlinks it finds and return an
+error only if such symlink could not be removed.
+</dd><dt>*ARCHIVE_EXTRACT_SECURE_NODOTDOT*</dt><dd>
+Refuse to extract a path that contains a
+_.._
+element anywhere within it.
+The default is to not refuse such paths.
+Note that paths ending in
+_.._
+always cause an error, regardless of this flag.
+</dd><dt>*ARCHIVE_EXTRACT_SPARSE*</dt><dd>
+Scan data for blocks of NUL bytes and try to recreate them with holes.
+This results in sparse files, independent of whether the archive format
+supports or uses them.
+</dd></dl>
+</dd><dt>
+*archive_write_disk_set_group_lookup*(),
+*archive_write_disk_set_user_lookup*()
+</dt> <dd>
+The
+*struct archive_entry*
+objects contain both names and ids that can be used to identify users
+and groups.
+These names and ids describe the ownership of the file itself and
+also appear in ACL lists.
+By default, the library uses the ids and ignores the names, but
+this can be overridden by registering user and group lookup functions.
+To register, you must provide a lookup function which
+accepts both a name and id and returns a suitable id.
+You may also provide a
+*void `*`*
+pointer to a private data structure and a cleanup function for
+that data.
+The cleanup function will be invoked when the
+*struct archive*
+object is destroyed.
+</dd><dt>*archive_write_disk_set_standard_lookup*()</dt><dd>
+This convenience function installs a standard set of user
+and group lookup functions.
+These functions use
+*getpwnam*(3)
+and
+*getgrnam*(3)
+to convert names to ids, defaulting to the ids if the names cannot
+be looked up.
+These functions also implement a simple memory cache to reduce
+the number of calls to
+*getpwnam*(3)
+and
+*getgrnam*(3).
+</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.
+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>
+Set any attributes that could not be set during the initial restore.
+For example, directory timestamps are not restored initially because
+restoring a subsequent file would alter that timestamp.
+Similarly, non-writable directories are initially created with
+write permissions (so that their contents can be restored).
+The
+*archive_write_disk_new*
+library maintains a list of all such deferred attributes and
+sets them when this function is invoked.
+</dd><dt>*archive_write_finish*()</dt><dd>
+Invokes
+*archive_write_close*()
+if it was not invoked manually, then releases all resources.
+</dd></dl>
+More information about the
+_struct_ archive
+object and the overall design of the library can be found in the
+*libarchive*(3)
+overview.
+Many of these functions are also documented under
+*archive_write*(3).
+== 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_disk_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.
+== SEE ALSO ==
+*archive_read*(3),
+*archive_write*(3),
+*tar*(1),
+*libarchive*(3)
+== HISTORY ==
+The
+*libarchive*
+library first appeared in
+FreeBSD 5.3.
+The
+*archive_write_disk*
+interface was added to
+*libarchive* 2.0
+and first appeared in
+FreeBSD 6.3.
+== AUTHORS ==
+The
+*libarchive*
+library was written by
+Tim Kientzle <kientzle@acm.org.>
+== BUGS ==
+Directories are actually extracted in two distinct phases.
+Directories are created during
+*archive_write_header*(),
+but final permissions are not set until
+*archive_write_close*().
+This separation is necessary to correctly handle borderline
+cases such as a non-writable directory containing
+files, but can cause unexpected results.
+In particular, directory permissions are not fully
+restored until the archive is closed.
+If you use
+*chdir*(2)
+to change the current directory between calls to
+*archive_read_extract*()
+or before calling
+*archive_read_close*(),
+you may confuse the permission-setting logic with
+the result that directory permissions are restored
+incorrectly.
+
+The library attempts to create objects with filenames longer than
+*PATH_MAX*
+by creating prefixes of the full path and changing the current directory.
+Currently, this logic is limited in scope; the fixup pass does
+not work correctly for such objects and the symlink security check
+option disables the support for very long pathnames.
+
+Restoring the path
+_aa/../bb_
+does create each intermediate directory.
+In particular, the directory
+_aa_
+is created as well as the final object
+_bb_.
+In theory, this can be exploited to create an entire directory heirarchy
+with a single request.
+Of course, this does not work if the
+*ARCHIVE_EXTRACT_NODOTDOT*
+option is specified.
+
+Implicit directories are always created obeying the current umask.
+Explicit objects are created obeying the current umask unless
+*ARCHIVE_EXTRACT_PERM*
+is specified, in which case they current umask is ignored.
+
+SGID and SUID bits are restored only if the correct user and
+group could be set.
+If
+*ARCHIVE_EXTRACT_OWNER*
+is not specified, then no attempt is made to set the ownership.
+In this case, SGID and SUID bits are restored only if the
+user and group of the final object happen to match those specified
+in the entry.
+
+The
+"standard"
+user-id and group-id lookup functions are not the defaults because
+*getgrnam*(3)
+and
+*getpwnam*(3)
+are sometimes too large for particular applications.
+The current design allows the application author to use a more
+compact implementation when appropriate.
+
+There should be a corresponding
+*archive_read_disk*
+interface that walks a directory heirarchy and returns archive
+entry objects.