freebsd-nq/lib/libarchive
Tim Kientzle cbf4203db5 I think this is my fourth complete rewrite of the dir-creation
code. <whew!> This version handles all of the following edge cases:
  * Restoring explicit dirs with 000 permissions (star fails this test)
  * Restore of implicit or explicit dirs when umask=777
    (gtar and star both fail this test)
  * Restoring dir paths containing "." and ".." components
This version initially creates all dirs with permission 700 (ignoring
umask), then does a post-extract "fixup" pass to set the correct
permissions (which may or may not depend on umask, depending on the
restore flags and whether it's an explicit or implicit dir).
Permissions are restored depth-first so that permissions within
non-writable dirs can be correctly restored. (The depth-sorting does
correctly account for dirs with ".." components.)
2004-07-08 05:24:48 +00:00
..
archive_check_magic.c More work on ACLs: fix error in archive_entry's ACL parsing code, 2004-04-12 01:16:16 +00:00
archive_entry.3 Add convenience functions to retrieve the atime fields directly, 2004-07-05 18:11:44 +00:00
archive_entry.c Add convenience functions to retrieve the atime fields directly, 2004-07-05 18:11:44 +00:00
archive_entry.h Add convenience functions to retrieve the atime fields directly, 2004-07-05 18:11:44 +00:00
archive_platform.h Consistify: #define gets 1 tab character afterwards 2004-05-03 01:40:34 +00:00
archive_private.h Clean up some consistent confusion between "dev" and "rdev." 2004-06-27 18:38:13 +00:00
archive_read_data_into_buffer.c Read gtar-style sparse archives. 2004-06-27 01:15:31 +00:00
archive_read_data_into_fd.c Read gtar-style sparse archives. 2004-06-27 01:15:31 +00:00
archive_read_extract.c I think this is my fourth complete rewrite of the dir-creation 2004-07-08 05:24:48 +00:00
archive_read_open_fd.c Refuse to extract an entry from an archive on top of the archive being read. 2004-06-27 23:36:39 +00:00
archive_read_open_file.c Refuse to extract an entry from an archive on top of the archive being read. 2004-06-27 23:36:39 +00:00
archive_read_open_filename.c Refuse to extract an entry from an archive on top of the archive being read. 2004-06-27 23:36:39 +00:00
archive_read_support_compression_all.c Connect libarchive decompress support to the build. 2004-05-27 23:57:45 +00:00
archive_read_support_compression_bzip2.c Add statistics: track offset in compressed and uncompressed archive, 2004-04-28 04:41:27 +00:00
archive_read_support_compression_compress.c Add read-only support for .Z compressed archives. 2004-05-27 03:58:55 +00:00
archive_read_support_compression_gzip.c Add statistics: track offset in compressed and uncompressed archive, 2004-04-28 04:41:27 +00:00
archive_read_support_compression_none.c Add statistics: track offset in compressed and uncompressed archive, 2004-04-28 04:41:27 +00:00
archive_read_support_format_all.c 'gnutar' is now handled by the 'tar' reader, so 2004-05-27 21:27:42 +00:00
archive_read_support_format_cpio.c Refactor read_data: 2004-06-02 08:14:43 +00:00
archive_read_support_format_tar.c Clean up some consistent confusion between "dev" and "rdev." 2004-06-27 18:38:13 +00:00
archive_read.3 Fixed cross-references in SEE ALSO. 2004-07-04 21:15:37 +00:00
archive_read.c Correctly reset archive_read_data state everytime a header is read. 2004-06-04 23:25:20 +00:00
archive_string_sprintf.c More work on ACLs: fix error in archive_entry's ACL parsing code, 2004-04-12 01:16:16 +00:00
archive_string.c More work on ACLs: fix error in archive_entry's ACL parsing code, 2004-04-12 01:16:16 +00:00
archive_string.h Consistify: #define gets 1 tab character afterwards 2004-05-03 01:40:34 +00:00
archive_util.3 Fixed cross-references in SEE ALSO. 2004-07-04 21:15:37 +00:00
archive_util.c Add statistics: track offset in compressed and uncompressed archive, 2004-04-28 04:41:27 +00:00
archive_write_open_fd.c Clean up some consistent confusion between "dev" and "rdev." 2004-06-27 18:38:13 +00:00
archive_write_open_file.c Clean up some consistent confusion between "dev" and "rdev." 2004-06-27 18:38:13 +00:00
archive_write_open_filename.c Clean up some consistent confusion between "dev" and "rdev." 2004-06-27 18:38:13 +00:00
archive_write_set_compression_bzip2.c Add statistics: track offset in compressed and uncompressed archive, 2004-04-28 04:41:27 +00:00
archive_write_set_compression_gzip.c Update raw byte count statistic correctly. 2004-05-13 06:38:30 +00:00
archive_write_set_compression_none.c Add statistics: track offset in compressed and uncompressed archive, 2004-04-28 04:41:27 +00:00
archive_write_set_format_by_name.c Many fixes. 2004-03-09 19:50:41 +00:00
archive_write_set_format_cpio.c * Plug a buffer overrun in ACL parsing. (archive_entry.c) 2004-04-13 23:45:37 +00:00
archive_write_set_format_pax.c Clean up some consistent confusion between "dev" and "rdev." 2004-06-27 18:38:13 +00:00
archive_write_set_format_shar.c Clean up some consistent confusion between "dev" and "rdev." 2004-06-27 18:38:13 +00:00
archive_write_set_format_ustar.c Clean up some consistent confusion between "dev" and "rdev." 2004-06-27 18:38:13 +00:00
archive_write_set_format.c Many fixes. 2004-03-09 19:50:41 +00:00
archive_write.3 Minor wordsmithing; remove a controversial colon. 2004-07-05 19:44:35 +00:00
archive_write.c Refuse to extract an entry from an archive on top of the archive being read. 2004-06-27 23:36:39 +00:00
archive.h More cleanup work on permissions restore: 2004-06-27 23:27:28 +00:00
archive.h.in More cleanup work on permissions restore: 2004-06-27 23:27:28 +00:00
libarchive-formats.5 Fixed cross-references in SEE ALSO. 2004-07-04 21:15:37 +00:00
libarchive.3 Fixed cross-references in SEE ALSO. 2004-07-04 21:15:37 +00:00
Makefile Add two new convenience functions to query the uid/gid from an 2004-06-27 23:16:42 +00:00
Makefile.freebsd Add two new convenience functions to query the uid/gid from an 2004-06-27 23:16:42 +00:00
README
tar.5 Fixed cross-references in SEE ALSO. 2004-07-04 21:15:37 +00:00

$FreeBSD$

libarchive: a library for reading and writing streaming archives

This is all under a BSD license.  Use, enjoy, but don't blame me if it breaks!

As of February, 2004, the library proper is fairly complete and compiles
cleanly on FreeBSD 5-CURRENT.  The API should be stable now.

Documentation:
 * libarchive(3) gives an overview of the library as a whole
 * archive_read(3) and archive_write(3) provide detailed calling
   sequences for the read and write APIs
 * archive_entry(3) details the "struct archive_entry" utility class
 * tar(5) documents the "tar" file formats supported by the library

You should also read the copious comments in "archive.h" and the source
code for the sample "bsdtar" program for more details.  Please let me know
about any errors or omissions you find.  (In particular, I no doubt missed
a few things when researching the tar(5) page.)

Notes:
 * This is a heavily stream-oriented system.  There is no direct
   support for in-place modification or random access and no intention
   of ever adding such support.  Adding such support would require
   sacrificing a lot of other features, so don't bother asking.

 * The library is designed to be extended with new compression and
   archive formats.  The only requirement is that the format be
   readable or writable as a stream and that each archive entry be
   independent.  For example, zip archives can't be written as a
   stream because they require the compressed size of the data as part
   of the file header.  Similarly, some file attributes for zip
   archives can't be extracted when streaming because those attributes
   are only stored in the end-of-archive central directory and thus
   aren't available when the corresponding entry is actually
   extracted.

 * Under certain circumstances, you can append entries to an archive
   by opening the file for reading, skimming to the end of the archive,
   noting the file location, then opening it for write with a custom write
   callback that seeks to the appropriate position before writing.  Be
   sure to not enable any compression support if you do this!

 * Compression and blocking are handled implicitly and, as far as
   possible, transparently.  All archive I/O is correctly blocked, even if
   it's compressed.  On read, the compression format is detected
   automatically and the appropriate decompressor is invoked.

 * It should be easy to implement a system that reads one
   archive and writes entries to another archive, omitting
   or adding entries as appropriate along the way.  This permits
   "re-writing" of archive streams in lieu of in-place modification.
   bsdtar has some code to demonstrate this.

 * The archive itself is read/written using callback functions.
   You can read an archive directly from an in-memory buffer or
   write it to a socket, if you wish.  There are some utility
   functions to provide easy-to-use "open file," etc, capabilities.

 * The read/write APIs are designed to allow individual entries
   to be read or written to any data source:  You can create
   a block of data in memory and add it to a tar archive without
   first writing a temporary file.  You can also read an entry from
   an archive and write the data directly to a socket.  If you want
   to read/write entries to disk, there are convenience functions to
   make this especially easy.

 * Read supports most common tar formats, including GNU tar,
   POSIX-compliant "ustar interchange format", and the
   shiny-and-improved POSIX "pax extended interchange format."  The
   pax format, in particular, eliminates most of the traditional tar
   limitations in a standard way that is increasingly well supported.
   (GNU tar notably does not support "pax interchange format"; the
   GPL-licensed 'star' archiver does, however.)  GNU format is only
   incompletely supported at this time; if you really need GNU-format
   sparse file support, volume headers, or GNU-format split archives,
   let me know.

   There's also support for a grab-bag of non-tar formats, including
   POSIX cpio and shar.

 * When writing tar formats, consider using "pax restricted" format
   by default.  This avoids the pax extensions whenever it can, enabling
   them only on entries that cannot be correctly archived with ustar
   format.  Thus, you get the broad compatibility of ustar with the
   safety of pax's support for very long filenames, etc.

 * Note: "pax interchange format" is really an extended tar format,
   despite what the name says.