|
|
@@ -28,9 +28,20 @@ |
|
|
|
#ifndef ARCHIVE_H_INCLUDED |
|
|
|
#define ARCHIVE_H_INCLUDED |
|
|
|
|
|
|
|
/* |
|
|
|
* The version number is expressed as a single integer that makes it |
|
|
|
* easy to compare versions at build time: for version a.b.c, the |
|
|
|
* version number is printf("%d%03d%03d",a,b,c). For example, if you |
|
|
|
* know your application requires version 2.12.108 or later, you can |
|
|
|
* assert that ARCHIVE_VERSION_NUMBER >= 2012108. |
|
|
|
*/ |
|
|
|
/* Note: Compiler will complain if this does not match archive_entry.h! */ |
|
|
|
#define ARCHIVE_VERSION_NUMBER 3005003 |
|
|
|
|
|
|
|
#include <sys/stat.h> |
|
|
|
#include <stddef.h> /* for wchar_t */ |
|
|
|
#include <stdio.h> /* For FILE * */ |
|
|
|
#include <time.h> /* For time_t */ |
|
|
|
|
|
|
|
/* |
|
|
|
* Note: archive.h is for use outside of libarchive; the configuration |
|
|
@@ -41,29 +52,53 @@ |
|
|
|
*/ |
|
|
|
#if defined(__BORLANDC__) && __BORLANDC__ >= 0x560 |
|
|
|
# include <stdint.h> |
|
|
|
#elif !defined(__WATCOMC__) && !defined(_MSC_VER) && !defined(__INTERIX) && !defined(__BORLANDC__) && !defined(_SCO_DS) |
|
|
|
#elif !defined(__WATCOMC__) && !defined(_MSC_VER) && !defined(__INTERIX) && !defined(__BORLANDC__) && !defined(_SCO_DS) && !defined(__osf__) && !defined(__CLANG_INTTYPES_H) |
|
|
|
# include <inttypes.h> |
|
|
|
#endif |
|
|
|
|
|
|
|
/* Get appropriate definitions of standard POSIX-style types. */ |
|
|
|
/* These should match the types used in 'struct stat' */ |
|
|
|
#if defined(_WIN32) && !defined(__CYGWIN__) |
|
|
|
# define __LA_INT64_T __int64 |
|
|
|
# if defined(_SSIZE_T_DEFINED) || defined(_SSIZE_T_) |
|
|
|
# define __LA_SSIZE_T ssize_t |
|
|
|
# elif defined(_WIN64) |
|
|
|
# define __LA_SSIZE_T __int64 |
|
|
|
# else |
|
|
|
# define __LA_SSIZE_T long |
|
|
|
/* Get appropriate definitions of 64-bit integer */ |
|
|
|
#if !defined(__LA_INT64_T_DEFINED) |
|
|
|
/* Older code relied on the __LA_INT64_T macro; after 4.0 we'll switch to the typedef exclusively. */ |
|
|
|
# if ARCHIVE_VERSION_NUMBER < 4000000 |
|
|
|
#define __LA_INT64_T la_int64_t |
|
|
|
# endif |
|
|
|
#else |
|
|
|
#define __LA_INT64_T_DEFINED |
|
|
|
# if defined(_WIN32) && !defined(__CYGWIN__) && !defined(__WATCOMC__) |
|
|
|
typedef __int64 la_int64_t; |
|
|
|
# else |
|
|
|
# include <unistd.h> /* ssize_t */ |
|
|
|
# if defined(_SCO_DS) |
|
|
|
# define __LA_INT64_T long long |
|
|
|
# if defined(_SCO_DS) || defined(__osf__) |
|
|
|
typedef long long la_int64_t; |
|
|
|
# else |
|
|
|
typedef int64_t la_int64_t; |
|
|
|
# endif |
|
|
|
# endif |
|
|
|
#endif |
|
|
|
|
|
|
|
/* The la_ssize_t should match the type used in 'struct stat' */ |
|
|
|
#if !defined(__LA_SSIZE_T_DEFINED) |
|
|
|
/* Older code relied on the __LA_SSIZE_T macro; after 4.0 we'll switch to the typedef exclusively. */ |
|
|
|
# if ARCHIVE_VERSION_NUMBER < 4000000 |
|
|
|
#define __LA_SSIZE_T la_ssize_t |
|
|
|
# endif |
|
|
|
#define __LA_SSIZE_T_DEFINED |
|
|
|
# if defined(_WIN32) && !defined(__CYGWIN__) && !defined(__WATCOMC__) |
|
|
|
# if defined(_SSIZE_T_DEFINED) || defined(_SSIZE_T_) |
|
|
|
typedef ssize_t la_ssize_t; |
|
|
|
# elif defined(_WIN64) |
|
|
|
typedef __int64 la_ssize_t; |
|
|
|
# else |
|
|
|
typedef long la_ssize_t; |
|
|
|
# endif |
|
|
|
# else |
|
|
|
# define __LA_INT64_T int64_t |
|
|
|
# include <unistd.h> /* ssize_t */ |
|
|
|
typedef ssize_t la_ssize_t; |
|
|
|
# endif |
|
|
|
# define __LA_SSIZE_T ssize_t |
|
|
|
#endif |
|
|
|
|
|
|
|
/* Large file support for Android */ |
|
|
|
#ifdef __ANDROID__ |
|
|
|
#include "android_lf.h" |
|
|
|
#endif |
|
|
|
|
|
|
|
/* |
|
|
@@ -97,6 +132,12 @@ |
|
|
|
#define __LA_PRINTF(fmtarg, firstvararg) /* nothing */ |
|
|
|
#endif |
|
|
|
|
|
|
|
#if defined(__GNUC__) && __GNUC__ >= 3 && __GNUC_MINOR__ >= 1 |
|
|
|
# define __LA_DEPRECATED __attribute__((deprecated)) |
|
|
|
#else |
|
|
|
# define __LA_DEPRECATED |
|
|
|
#endif |
|
|
|
|
|
|
|
#ifdef __cplusplus |
|
|
|
extern "C" { |
|
|
|
#endif |
|
|
@@ -109,24 +150,35 @@ extern "C" { |
|
|
|
* header and library are very different, you should expect some |
|
|
|
* strangeness. Don't do that. |
|
|
|
*/ |
|
|
|
|
|
|
|
/* |
|
|
|
* The version number is expressed as a single integer that makes it |
|
|
|
* easy to compare versions at build time: for version a.b.c, the |
|
|
|
* version number is printf("%d%03d%03d",a,b,c). For example, if you |
|
|
|
* know your application requires version 2.12.108 or later, you can |
|
|
|
* assert that ARCHIVE_VERSION_NUMBER >= 2012108. |
|
|
|
*/ |
|
|
|
/* Note: Compiler will complain if this does not match archive_entry.h! */ |
|
|
|
#define ARCHIVE_VERSION_NUMBER 3000004 |
|
|
|
__LA_DECL int archive_version_number(void); |
|
|
|
|
|
|
|
/* |
|
|
|
* Textual name/version of the library, useful for version displays. |
|
|
|
*/ |
|
|
|
#define ARCHIVE_VERSION_STRING "libarchive 3.0.4" |
|
|
|
#define ARCHIVE_VERSION_ONLY_STRING "3.5.3" |
|
|
|
#define ARCHIVE_VERSION_STRING "libarchive " ARCHIVE_VERSION_ONLY_STRING |
|
|
|
__LA_DECL const char * archive_version_string(void); |
|
|
|
|
|
|
|
/* |
|
|
|
* Detailed textual name/version of the library and its dependencies. |
|
|
|
* This has the form: |
|
|
|
* "libarchive x.y.z zlib/a.b.c liblzma/d.e.f ... etc ..." |
|
|
|
* the list of libraries described here will vary depending on how |
|
|
|
* libarchive was compiled. |
|
|
|
*/ |
|
|
|
__LA_DECL const char * archive_version_details(void); |
|
|
|
|
|
|
|
/* |
|
|
|
* Returns NULL if libarchive was compiled without the associated library. |
|
|
|
* Otherwise, returns the version number that libarchive was compiled |
|
|
|
* against. |
|
|
|
*/ |
|
|
|
__LA_DECL const char * archive_zlib_version(void); |
|
|
|
__LA_DECL const char * archive_liblzma_version(void); |
|
|
|
__LA_DECL const char * archive_bzlib_version(void); |
|
|
|
__LA_DECL const char * archive_liblz4_version(void); |
|
|
|
__LA_DECL const char * archive_libzstd_version(void); |
|
|
|
|
|
|
|
/* Declare our basic types. */ |
|
|
|
struct archive; |
|
|
|
struct archive_entry; |
|
|
@@ -167,7 +219,7 @@ struct archive_entry; |
|
|
|
*/ |
|
|
|
|
|
|
|
/* Returns pointer and size of next block of data from archive. */ |
|
|
|
typedef __LA_SSIZE_T archive_read_callback(struct archive *, |
|
|
|
typedef la_ssize_t archive_read_callback(struct archive *, |
|
|
|
void *_client_data, const void **_buffer); |
|
|
|
|
|
|
|
/* Skips at most request bytes from archive and returns the skipped amount. |
|
|
@@ -175,18 +227,18 @@ typedef __LA_SSIZE_T archive_read_callback(struct archive *, |
|
|
|
* If you do skip fewer bytes than requested, libarchive will invoke your |
|
|
|
* read callback and discard data as necessary to make up the full skip. |
|
|
|
*/ |
|
|
|
typedef __LA_INT64_T archive_skip_callback(struct archive *, |
|
|
|
void *_client_data, __LA_INT64_T request); |
|
|
|
typedef la_int64_t archive_skip_callback(struct archive *, |
|
|
|
void *_client_data, la_int64_t request); |
|
|
|
|
|
|
|
/* Seeks to specified location in the file and returns the position. |
|
|
|
* Whence values are SEEK_SET, SEEK_CUR, SEEK_END from stdio.h. |
|
|
|
* Return ARCHIVE_FATAL if the seek fails for any reason. |
|
|
|
*/ |
|
|
|
typedef __LA_INT64_T archive_seek_callback(struct archive *, |
|
|
|
void *_client_data, __LA_INT64_T offset, int whence); |
|
|
|
typedef la_int64_t archive_seek_callback(struct archive *, |
|
|
|
void *_client_data, la_int64_t offset, int whence); |
|
|
|
|
|
|
|
/* Returns size actually written, zero on EOF, -1 on error. */ |
|
|
|
typedef __LA_SSIZE_T archive_write_callback(struct archive *, |
|
|
|
typedef la_ssize_t archive_write_callback(struct archive *, |
|
|
|
void *_client_data, |
|
|
|
const void *_buffer, size_t _length); |
|
|
|
|
|
|
@@ -194,6 +246,22 @@ typedef int archive_open_callback(struct archive *, void *_client_data); |
|
|
|
|
|
|
|
typedef int archive_close_callback(struct archive *, void *_client_data); |
|
|
|
|
|
|
|
typedef int archive_free_callback(struct archive *, void *_client_data); |
|
|
|
|
|
|
|
/* Switches from one client data object to the next/prev client data object. |
|
|
|
* This is useful for reading from different data blocks such as a set of files |
|
|
|
* that make up one large file. |
|
|
|
*/ |
|
|
|
typedef int archive_switch_callback(struct archive *, void *_client_data1, |
|
|
|
void *_client_data2); |
|
|
|
|
|
|
|
/* |
|
|
|
* Returns a passphrase used for encryption or decryption, NULL on nothing |
|
|
|
* to do and give it up. |
|
|
|
*/ |
|
|
|
typedef const char *archive_passphrase_callback(struct archive *, |
|
|
|
void *_client_data); |
|
|
|
|
|
|
|
/* |
|
|
|
* Codes to identify various stream filters. |
|
|
|
*/ |
|
|
@@ -207,6 +275,11 @@ typedef int archive_close_callback(struct archive *, void *_client_data); |
|
|
|
#define ARCHIVE_FILTER_UU 7 |
|
|
|
#define ARCHIVE_FILTER_RPM 8 |
|
|
|
#define ARCHIVE_FILTER_LZIP 9 |
|
|
|
#define ARCHIVE_FILTER_LRZIP 10 |
|
|
|
#define ARCHIVE_FILTER_LZOP 11 |
|
|
|
#define ARCHIVE_FILTER_GRZIP 12 |
|
|
|
#define ARCHIVE_FILTER_LZ4 13 |
|
|
|
#define ARCHIVE_FILTER_ZSTD 14 |
|
|
|
|
|
|
|
#if ARCHIVE_VERSION_NUMBER < 4000000 |
|
|
|
#define ARCHIVE_COMPRESSION_NONE ARCHIVE_FILTER_NONE |
|
|
@@ -219,6 +292,7 @@ typedef int archive_close_callback(struct archive *, void *_client_data); |
|
|
|
#define ARCHIVE_COMPRESSION_UU ARCHIVE_FILTER_UU |
|
|
|
#define ARCHIVE_COMPRESSION_RPM ARCHIVE_FILTER_RPM |
|
|
|
#define ARCHIVE_COMPRESSION_LZIP ARCHIVE_FILTER_LZIP |
|
|
|
#define ARCHIVE_COMPRESSION_LRZIP ARCHIVE_FILTER_LRZIP |
|
|
|
#endif |
|
|
|
|
|
|
|
/* |
|
|
@@ -245,6 +319,7 @@ typedef int archive_close_callback(struct archive *, void *_client_data); |
|
|
|
#define ARCHIVE_FORMAT_CPIO_SVR4_NOCRC (ARCHIVE_FORMAT_CPIO | 4) |
|
|
|
#define ARCHIVE_FORMAT_CPIO_SVR4_CRC (ARCHIVE_FORMAT_CPIO | 5) |
|
|
|
#define ARCHIVE_FORMAT_CPIO_AFIO_LARGE (ARCHIVE_FORMAT_CPIO | 6) |
|
|
|
#define ARCHIVE_FORMAT_CPIO_PWB (ARCHIVE_FORMAT_CPIO | 7) |
|
|
|
#define ARCHIVE_FORMAT_SHAR 0x20000 |
|
|
|
#define ARCHIVE_FORMAT_SHAR_BASE (ARCHIVE_FORMAT_SHAR | 1) |
|
|
|
#define ARCHIVE_FORMAT_SHAR_DUMP (ARCHIVE_FORMAT_SHAR | 2) |
|
|
@@ -267,6 +342,32 @@ typedef int archive_close_callback(struct archive *, void *_client_data); |
|
|
|
#define ARCHIVE_FORMAT_CAB 0xC0000 |
|
|
|
#define ARCHIVE_FORMAT_RAR 0xD0000 |
|
|
|
#define ARCHIVE_FORMAT_7ZIP 0xE0000 |
|
|
|
#define ARCHIVE_FORMAT_WARC 0xF0000 |
|
|
|
#define ARCHIVE_FORMAT_RAR_V5 0x100000 |
|
|
|
|
|
|
|
/* |
|
|
|
* Codes returned by archive_read_format_capabilities(). |
|
|
|
* |
|
|
|
* This list can be extended with values between 0 and 0xffff. |
|
|
|
* The original purpose of this list was to let different archive |
|
|
|
* format readers expose their general capabilities in terms of |
|
|
|
* encryption. |
|
|
|
*/ |
|
|
|
#define ARCHIVE_READ_FORMAT_CAPS_NONE (0) /* no special capabilities */ |
|
|
|
#define ARCHIVE_READ_FORMAT_CAPS_ENCRYPT_DATA (1<<0) /* reader can detect encrypted data */ |
|
|
|
#define ARCHIVE_READ_FORMAT_CAPS_ENCRYPT_METADATA (1<<1) /* reader can detect encryptable metadata (pathname, mtime, etc.) */ |
|
|
|
|
|
|
|
/* |
|
|
|
* Codes returned by archive_read_has_encrypted_entries(). |
|
|
|
* |
|
|
|
* In case the archive does not support encryption detection at all |
|
|
|
* ARCHIVE_READ_FORMAT_ENCRYPTION_UNSUPPORTED is returned. If the reader |
|
|
|
* for some other reason (e.g. not enough bytes read) cannot say if |
|
|
|
* there are encrypted entries, ARCHIVE_READ_FORMAT_ENCRYPTION_DONT_KNOW |
|
|
|
* is returned. |
|
|
|
*/ |
|
|
|
#define ARCHIVE_READ_FORMAT_ENCRYPTION_UNSUPPORTED -2 |
|
|
|
#define ARCHIVE_READ_FORMAT_ENCRYPTION_DONT_KNOW -1 |
|
|
|
|
|
|
|
/*- |
|
|
|
* Basic outline for reading an archive: |
|
|
@@ -278,7 +379,7 @@ typedef int archive_close_callback(struct archive *, void *_client_data); |
|
|
|
* 4) Repeatedly call archive_read_next_header to get information about |
|
|
|
* successive archive entries. Call archive_read_data to extract |
|
|
|
* data for entries of interest. |
|
|
|
* 5) Call archive_read_finish to end processing. |
|
|
|
* 5) Call archive_read_free to end processing. |
|
|
|
*/ |
|
|
|
__LA_DECL struct archive *archive_read_new(void); |
|
|
|
|
|
|
@@ -291,40 +392,55 @@ __LA_DECL struct archive *archive_read_new(void); |
|
|
|
*/ |
|
|
|
|
|
|
|
#if ARCHIVE_VERSION_NUMBER < 4000000 |
|
|
|
__LA_DECL int archive_read_support_compression_all(struct archive *); |
|
|
|
__LA_DECL int archive_read_support_compression_bzip2(struct archive *); |
|
|
|
__LA_DECL int archive_read_support_compression_compress(struct archive *); |
|
|
|
__LA_DECL int archive_read_support_compression_gzip(struct archive *); |
|
|
|
__LA_DECL int archive_read_support_compression_lzip(struct archive *); |
|
|
|
__LA_DECL int archive_read_support_compression_lzma(struct archive *); |
|
|
|
__LA_DECL int archive_read_support_compression_none(struct archive *); |
|
|
|
__LA_DECL int archive_read_support_compression_all(struct archive *) |
|
|
|
__LA_DEPRECATED; |
|
|
|
__LA_DECL int archive_read_support_compression_bzip2(struct archive *) |
|
|
|
__LA_DEPRECATED; |
|
|
|
__LA_DECL int archive_read_support_compression_compress(struct archive *) |
|
|
|
__LA_DEPRECATED; |
|
|
|
__LA_DECL int archive_read_support_compression_gzip(struct archive *) |
|
|
|
__LA_DEPRECATED; |
|
|
|
__LA_DECL int archive_read_support_compression_lzip(struct archive *) |
|
|
|
__LA_DEPRECATED; |
|
|
|
__LA_DECL int archive_read_support_compression_lzma(struct archive *) |
|
|
|
__LA_DEPRECATED; |
|
|
|
__LA_DECL int archive_read_support_compression_none(struct archive *) |
|
|
|
__LA_DEPRECATED; |
|
|
|
__LA_DECL int archive_read_support_compression_program(struct archive *, |
|
|
|
const char *command); |
|
|
|
const char *command) __LA_DEPRECATED; |
|
|
|
__LA_DECL int archive_read_support_compression_program_signature |
|
|
|
(struct archive *, const char *, |
|
|
|
const void * /* match */, size_t); |
|
|
|
|
|
|
|
__LA_DECL int archive_read_support_compression_rpm(struct archive *); |
|
|
|
__LA_DECL int archive_read_support_compression_uu(struct archive *); |
|
|
|
__LA_DECL int archive_read_support_compression_xz(struct archive *); |
|
|
|
const void * /* match */, size_t) __LA_DEPRECATED; |
|
|
|
|
|
|
|
__LA_DECL int archive_read_support_compression_rpm(struct archive *) |
|
|
|
__LA_DEPRECATED; |
|
|
|
__LA_DECL int archive_read_support_compression_uu(struct archive *) |
|
|
|
__LA_DEPRECATED; |
|
|
|
__LA_DECL int archive_read_support_compression_xz(struct archive *) |
|
|
|
__LA_DEPRECATED; |
|
|
|
#endif |
|
|
|
|
|
|
|
__LA_DECL int archive_read_support_filter_all(struct archive *); |
|
|
|
__LA_DECL int archive_read_support_filter_by_code(struct archive *, int); |
|
|
|
__LA_DECL int archive_read_support_filter_bzip2(struct archive *); |
|
|
|
__LA_DECL int archive_read_support_filter_compress(struct archive *); |
|
|
|
__LA_DECL int archive_read_support_filter_gzip(struct archive *); |
|
|
|
__LA_DECL int archive_read_support_filter_grzip(struct archive *); |
|
|
|
__LA_DECL int archive_read_support_filter_lrzip(struct archive *); |
|
|
|
__LA_DECL int archive_read_support_filter_lz4(struct archive *); |
|
|
|
__LA_DECL int archive_read_support_filter_lzip(struct archive *); |
|
|
|
__LA_DECL int archive_read_support_filter_lzma(struct archive *); |
|
|
|
__LA_DECL int archive_read_support_filter_lzop(struct archive *); |
|
|
|
__LA_DECL int archive_read_support_filter_none(struct archive *); |
|
|
|
__LA_DECL int archive_read_support_filter_program(struct archive *, |
|
|
|
const char *command); |
|
|
|
__LA_DECL int archive_read_support_filter_program_signature |
|
|
|
(struct archive *, const char *, |
|
|
|
(struct archive *, const char * /* cmd */, |
|
|
|
const void * /* match */, size_t); |
|
|
|
|
|
|
|
__LA_DECL int archive_read_support_filter_rpm(struct archive *); |
|
|
|
__LA_DECL int archive_read_support_filter_uu(struct archive *); |
|
|
|
__LA_DECL int archive_read_support_filter_xz(struct archive *); |
|
|
|
__LA_DECL int archive_read_support_filter_zstd(struct archive *); |
|
|
|
|
|
|
|
__LA_DECL int archive_read_support_format_7zip(struct archive *); |
|
|
|
__LA_DECL int archive_read_support_format_all(struct archive *); |
|
|
@@ -338,10 +454,31 @@ __LA_DECL int archive_read_support_format_iso9660(struct archive *); |
|
|
|
__LA_DECL int archive_read_support_format_lha(struct archive *); |
|
|
|
__LA_DECL int archive_read_support_format_mtree(struct archive *); |
|
|
|
__LA_DECL int archive_read_support_format_rar(struct archive *); |
|
|
|
__LA_DECL int archive_read_support_format_rar5(struct archive *); |
|
|
|
__LA_DECL int archive_read_support_format_raw(struct archive *); |
|
|
|
__LA_DECL int archive_read_support_format_tar(struct archive *); |
|
|
|
__LA_DECL int archive_read_support_format_warc(struct archive *); |
|
|
|
__LA_DECL int archive_read_support_format_xar(struct archive *); |
|
|
|
/* archive_read_support_format_zip() enables both streamable and seekable |
|
|
|
* zip readers. */ |
|
|
|
__LA_DECL int archive_read_support_format_zip(struct archive *); |
|
|
|
/* Reads Zip archives as stream from beginning to end. Doesn't |
|
|
|
* correctly handle SFX ZIP files or ZIP archives that have been modified |
|
|
|
* in-place. */ |
|
|
|
__LA_DECL int archive_read_support_format_zip_streamable(struct archive *); |
|
|
|
/* Reads starting from central directory; requires seekable input. */ |
|
|
|
__LA_DECL int archive_read_support_format_zip_seekable(struct archive *); |
|
|
|
|
|
|
|
/* Functions to manually set the format and filters to be used. This is |
|
|
|
* useful to bypass the bidding process when the format and filters to use |
|
|
|
* is known in advance. |
|
|
|
*/ |
|
|
|
__LA_DECL int archive_read_set_format(struct archive *, int); |
|
|
|
__LA_DECL int archive_read_append_filter(struct archive *, int); |
|
|
|
__LA_DECL int archive_read_append_filter_program(struct archive *, |
|
|
|
const char *); |
|
|
|
__LA_DECL int archive_read_append_filter_program_signature |
|
|
|
(struct archive *, const char *, const void * /* match */, size_t); |
|
|
|
|
|
|
|
/* Set various callbacks. */ |
|
|
|
__LA_DECL int archive_read_set_open_callback(struct archive *, |
|
|
@@ -354,8 +491,23 @@ __LA_DECL int archive_read_set_skip_callback(struct archive *, |
|
|
|
archive_skip_callback *); |
|
|
|
__LA_DECL int archive_read_set_close_callback(struct archive *, |
|
|
|
archive_close_callback *); |
|
|
|
/* The callback data is provided to all of the callbacks above. */ |
|
|
|
/* Callback used to switch between one data object to the next */ |
|
|
|
__LA_DECL int archive_read_set_switch_callback(struct archive *, |
|
|
|
archive_switch_callback *); |
|
|
|
|
|
|
|
/* This sets the first data object. */ |
|
|
|
__LA_DECL int archive_read_set_callback_data(struct archive *, void *); |
|
|
|
/* This sets data object at specified index */ |
|
|
|
__LA_DECL int archive_read_set_callback_data2(struct archive *, void *, |
|
|
|
unsigned int); |
|
|
|
/* This adds a data object at the specified index. */ |
|
|
|
__LA_DECL int archive_read_add_callback_data(struct archive *, void *, |
|
|
|
unsigned int); |
|
|
|
/* This appends a data object to the end of list */ |
|
|
|
__LA_DECL int archive_read_append_callback_data(struct archive *, void *); |
|
|
|
/* This prepends a data object to the beginning of list */ |
|
|
|
__LA_DECL int archive_read_prepend_callback_data(struct archive *, void *); |
|
|
|
|
|
|
|
/* Opening freezes the callbacks. */ |
|
|
|
__LA_DECL int archive_read_open1(struct archive *); |
|
|
|
|
|
|
@@ -375,16 +527,20 @@ __LA_DECL int archive_read_open2(struct archive *, void *_client_data, |
|
|
|
/* Use this if you know the filename. Note: NULL indicates stdin. */ |
|
|
|
__LA_DECL int archive_read_open_filename(struct archive *, |
|
|
|
const char *_filename, size_t _block_size); |
|
|
|
/* Use this for reading multivolume files by filenames. |
|
|
|
* NOTE: Must be NULL terminated. Sorting is NOT done. */ |
|
|
|
__LA_DECL int archive_read_open_filenames(struct archive *, |
|
|
|
const char **_filenames, size_t _block_size); |
|
|
|
__LA_DECL int archive_read_open_filename_w(struct archive *, |
|
|
|
const wchar_t *_filename, size_t _block_size); |
|
|
|
/* archive_read_open_file() is a deprecated synonym for ..._open_filename(). */ |
|
|
|
__LA_DECL int archive_read_open_file(struct archive *, |
|
|
|
const char *_filename, size_t _block_size); |
|
|
|
const char *_filename, size_t _block_size) __LA_DEPRECATED; |
|
|
|
/* Read an archive that's stored in memory. */ |
|
|
|
__LA_DECL int archive_read_open_memory(struct archive *, |
|
|
|
void * buff, size_t size); |
|
|
|
const void * buff, size_t size); |
|
|
|
/* A more involved version that is only used for internal testing. */ |
|
|
|
__LA_DECL int archive_read_open_memory2(struct archive *a, void *buff, |
|
|
|
__LA_DECL int archive_read_open_memory2(struct archive *a, const void *buff, |
|
|
|
size_t size, size_t read_size); |
|
|
|
/* Read an archive that's already open, using the file descriptor. */ |
|
|
|
__LA_DECL int archive_read_open_fd(struct archive *, int _fd, |
|
|
@@ -405,12 +561,41 @@ __LA_DECL int archive_read_next_header2(struct archive *, |
|
|
|
* Retrieve the byte offset in UNCOMPRESSED data where last-read |
|
|
|
* header started. |
|
|
|
*/ |
|
|
|
__LA_DECL __LA_INT64_T archive_read_header_position(struct archive *); |
|
|
|
__LA_DECL la_int64_t archive_read_header_position(struct archive *); |
|
|
|
|
|
|
|
/* |
|
|
|
* Returns 1 if the archive contains at least one encrypted entry. |
|
|
|
* If the archive format not support encryption at all |
|
|
|
* ARCHIVE_READ_FORMAT_ENCRYPTION_UNSUPPORTED is returned. |
|
|
|
* If for any other reason (e.g. not enough data read so far) |
|
|
|
* we cannot say whether there are encrypted entries, then |
|
|
|
* ARCHIVE_READ_FORMAT_ENCRYPTION_DONT_KNOW is returned. |
|
|
|
* In general, this function will return values below zero when the |
|
|
|
* reader is uncertain or totally incapable of encryption support. |
|
|
|
* When this function returns 0 you can be sure that the reader |
|
|
|
* supports encryption detection but no encrypted entries have |
|
|
|
* been found yet. |
|
|
|
* |
|
|
|
* NOTE: If the metadata/header of an archive is also encrypted, you |
|
|
|
* cannot rely on the number of encrypted entries. That is why this |
|
|
|
* function does not return the number of encrypted entries but# |
|
|
|
* just shows that there are some. |
|
|
|
*/ |
|
|
|
__LA_DECL int archive_read_has_encrypted_entries(struct archive *); |
|
|
|
|
|
|
|
/* |
|
|
|
* Returns a bitmask of capabilities that are supported by the archive format reader. |
|
|
|
* If the reader has no special capabilities, ARCHIVE_READ_FORMAT_CAPS_NONE is returned. |
|
|
|
*/ |
|
|
|
__LA_DECL int archive_read_format_capabilities(struct archive *); |
|
|
|
|
|
|
|
/* Read data from the body of an entry. Similar to read(2). */ |
|
|
|
__LA_DECL __LA_SSIZE_T archive_read_data(struct archive *, |
|
|
|
__LA_DECL la_ssize_t archive_read_data(struct archive *, |
|
|
|
void *, size_t); |
|
|
|
|
|
|
|
/* Seek within the body of an entry. Similar to lseek(2). */ |
|
|
|
__LA_DECL la_int64_t archive_seek_data(struct archive *, la_int64_t, int); |
|
|
|
|
|
|
|
/* |
|
|
|
* A zero-copy version of archive_read_data that also exposes the file offset |
|
|
|
* of each returned block. Note that the client has no way to specify |
|
|
@@ -418,7 +603,7 @@ __LA_DECL __LA_SSIZE_T archive_read_data(struct archive *, |
|
|
|
* be strictly increasing and that returned blocks will not overlap. |
|
|
|
*/ |
|
|
|
__LA_DECL int archive_read_data_block(struct archive *a, |
|
|
|
const void **buff, size_t *size, __LA_INT64_T *offset); |
|
|
|
const void **buff, size_t *size, la_int64_t *offset); |
|
|
|
|
|
|
|
/*- |
|
|
|
* Some convenience functions that are built on archive_read_data: |
|
|
@@ -448,6 +633,14 @@ __LA_DECL int archive_read_set_option(struct archive *_a, |
|
|
|
__LA_DECL int archive_read_set_options(struct archive *_a, |
|
|
|
const char *opts); |
|
|
|
|
|
|
|
/* |
|
|
|
* Add a decryption passphrase. |
|
|
|
*/ |
|
|
|
__LA_DECL int archive_read_add_passphrase(struct archive *, const char *); |
|
|
|
__LA_DECL int archive_read_set_passphrase_callback(struct archive *, |
|
|
|
void *client_data, archive_passphrase_callback *); |
|
|
|
|
|
|
|
|
|
|
|
/*- |
|
|
|
* Convenience function to recreate the current entry (whose header |
|
|
|
* has just been read) on disk. |
|
|
@@ -494,6 +687,18 @@ __LA_DECL int archive_read_set_options(struct archive *_a, |
|
|
|
/* Default: Do not restore Mac extended metadata. */ |
|
|
|
/* This has no effect except on Mac OS. */ |
|
|
|
#define ARCHIVE_EXTRACT_MAC_METADATA (0x2000) |
|
|
|
/* Default: Use HFS+ compression if it was compressed. */ |
|
|
|
/* This has no effect except on Mac OS v10.6 or later. */ |
|
|
|
#define ARCHIVE_EXTRACT_NO_HFS_COMPRESSION (0x4000) |
|
|
|
/* Default: Do not use HFS+ compression if it was not compressed. */ |
|
|
|
/* This has no effect except on Mac OS v10.6 or later. */ |
|
|
|
#define ARCHIVE_EXTRACT_HFS_COMPRESSION_FORCED (0x8000) |
|
|
|
/* Default: Do not reject entries with absolute paths */ |
|
|
|
#define ARCHIVE_EXTRACT_SECURE_NOABSOLUTEPATHS (0x10000) |
|
|
|
/* Default: Do not clear no-change flags when unlinking object */ |
|
|
|
#define ARCHIVE_EXTRACT_CLEAR_NOCHANGE_FFLAGS (0x20000) |
|
|
|
/* Default: Do not extract atomically (using rename) */ |
|
|
|
#define ARCHIVE_EXTRACT_SAFE_WRITES (0x40000) |
|
|
|
|
|
|
|
__LA_DECL int archive_read_extract(struct archive *, struct archive_entry *, |
|
|
|
int flags); |
|
|
@@ -505,7 +710,7 @@ __LA_DECL void archive_read_extract_set_progress_callback(struct archive *, |
|
|
|
/* Record the dev/ino of a file that will not be written. This is |
|
|
|
* generally set to the dev/ino of the archive being read. */ |
|
|
|
__LA_DECL void archive_read_extract_set_skip_file(struct archive *, |
|
|
|
__LA_INT64_T, __LA_INT64_T); |
|
|
|
la_int64_t, la_int64_t); |
|
|
|
|
|
|
|
/* Close the file and release most resources. */ |
|
|
|
__LA_DECL int archive_read_close(struct archive *); |
|
|
@@ -514,7 +719,7 @@ __LA_DECL int archive_read_close(struct archive *); |
|
|
|
__LA_DECL int archive_read_free(struct archive *); |
|
|
|
#if ARCHIVE_VERSION_NUMBER < 4000000 |
|
|
|
/* Synonym for archive_read_free() for backwards compatibility. */ |
|
|
|
__LA_DECL int archive_read_finish(struct archive *); |
|
|
|
__LA_DECL int archive_read_finish(struct archive *) __LA_DEPRECATED; |
|
|
|
#endif |
|
|
|
|
|
|
|
/*- |
|
|
@@ -544,31 +749,47 @@ __LA_DECL int archive_write_get_bytes_in_last_block(struct archive *); |
|
|
|
/* The dev/ino of a file that won't be archived. This is used |
|
|
|
* to avoid recursively adding an archive to itself. */ |
|
|
|
__LA_DECL int archive_write_set_skip_file(struct archive *, |
|
|
|
__LA_INT64_T, __LA_INT64_T); |
|
|
|
la_int64_t, la_int64_t); |
|
|
|
|
|
|
|
#if ARCHIVE_VERSION_NUMBER < 4000000 |
|
|
|
__LA_DECL int archive_write_set_compression_bzip2(struct archive *); |
|
|
|
__LA_DECL int archive_write_set_compression_compress(struct archive *); |
|
|
|
__LA_DECL int archive_write_set_compression_gzip(struct archive *); |
|
|
|
__LA_DECL int archive_write_set_compression_lzip(struct archive *); |
|
|
|
__LA_DECL int archive_write_set_compression_lzma(struct archive *); |
|
|
|
__LA_DECL int archive_write_set_compression_none(struct archive *); |
|
|
|
__LA_DECL int archive_write_set_compression_bzip2(struct archive *) |
|
|
|
__LA_DEPRECATED; |
|
|
|
__LA_DECL int archive_write_set_compression_compress(struct archive *) |
|
|
|
__LA_DEPRECATED; |
|
|
|
__LA_DECL int archive_write_set_compression_gzip(struct archive *) |
|
|
|
__LA_DEPRECATED; |
|
|
|
__LA_DECL int archive_write_set_compression_lzip(struct archive *) |
|
|
|
__LA_DEPRECATED; |
|
|
|
__LA_DECL int archive_write_set_compression_lzma(struct archive *) |
|
|
|
__LA_DEPRECATED; |
|
|
|
__LA_DECL int archive_write_set_compression_none(struct archive *) |
|
|
|
__LA_DEPRECATED; |
|
|
|
__LA_DECL int archive_write_set_compression_program(struct archive *, |
|
|
|
const char *cmd); |
|
|
|
__LA_DECL int archive_write_set_compression_xz(struct archive *); |
|
|
|
const char *cmd) __LA_DEPRECATED; |
|
|
|
__LA_DECL int archive_write_set_compression_xz(struct archive *) |
|
|
|
__LA_DEPRECATED; |
|
|
|
#endif |
|
|
|
|
|
|
|
/* A convenience function to set the filter based on the code. */ |
|
|
|
__LA_DECL int archive_write_add_filter(struct archive *, int filter_code); |
|
|
|
__LA_DECL int archive_write_add_filter_by_name(struct archive *, |
|
|
|
const char *name); |
|
|
|
__LA_DECL int archive_write_add_filter_b64encode(struct archive *); |
|
|
|
__LA_DECL int archive_write_add_filter_bzip2(struct archive *); |
|
|
|
__LA_DECL int archive_write_add_filter_compress(struct archive *); |
|
|
|
__LA_DECL int archive_write_add_filter_grzip(struct archive *); |
|
|
|
__LA_DECL int archive_write_add_filter_gzip(struct archive *); |
|
|
|
__LA_DECL int archive_write_add_filter_lrzip(struct archive *); |
|
|
|
__LA_DECL int archive_write_add_filter_lz4(struct archive *); |
|
|
|
__LA_DECL int archive_write_add_filter_lzip(struct archive *); |
|
|
|
__LA_DECL int archive_write_add_filter_lzma(struct archive *); |
|
|
|
__LA_DECL int archive_write_add_filter_lzop(struct archive *); |
|
|
|
__LA_DECL int archive_write_add_filter_none(struct archive *); |
|
|
|
__LA_DECL int archive_write_add_filter_program(struct archive *, |
|
|
|
const char *cmd); |
|
|
|
__LA_DECL int archive_write_add_filter_uuencode(struct archive *); |
|
|
|
__LA_DECL int archive_write_add_filter_xz(struct archive *); |
|
|
|
__LA_DECL int archive_write_add_filter_zstd(struct archive *); |
|
|
|
|
|
|
|
|
|
|
|
/* A convenience function to set the format based on the code or name. */ |
|
|
@@ -580,27 +801,43 @@ __LA_DECL int archive_write_set_format_7zip(struct archive *); |
|
|
|
__LA_DECL int archive_write_set_format_ar_bsd(struct archive *); |
|
|
|
__LA_DECL int archive_write_set_format_ar_svr4(struct archive *); |
|
|
|
__LA_DECL int archive_write_set_format_cpio(struct archive *); |
|
|
|
__LA_DECL int archive_write_set_format_cpio_bin(struct archive *); |
|
|
|
__LA_DECL int archive_write_set_format_cpio_newc(struct archive *); |
|
|
|
__LA_DECL int archive_write_set_format_cpio_odc(struct archive *); |
|
|
|
__LA_DECL int archive_write_set_format_cpio_pwb(struct archive *); |
|
|
|
__LA_DECL int archive_write_set_format_gnutar(struct archive *); |
|
|
|
__LA_DECL int archive_write_set_format_iso9660(struct archive *); |
|
|
|
__LA_DECL int archive_write_set_format_mtree(struct archive *); |
|
|
|
__LA_DECL int archive_write_set_format_mtree_classic(struct archive *); |
|
|
|
/* TODO: int archive_write_set_format_old_tar(struct archive *); */ |
|
|
|
__LA_DECL int archive_write_set_format_pax(struct archive *); |
|
|
|
__LA_DECL int archive_write_set_format_pax_restricted(struct archive *); |
|
|
|
__LA_DECL int archive_write_set_format_raw(struct archive *); |
|
|
|
__LA_DECL int archive_write_set_format_shar(struct archive *); |
|
|
|
__LA_DECL int archive_write_set_format_shar_dump(struct archive *); |
|
|
|
__LA_DECL int archive_write_set_format_ustar(struct archive *); |
|
|
|
__LA_DECL int archive_write_set_format_v7tar(struct archive *); |
|
|
|
__LA_DECL int archive_write_set_format_warc(struct archive *); |
|
|
|
__LA_DECL int archive_write_set_format_xar(struct archive *); |
|
|
|
__LA_DECL int archive_write_set_format_zip(struct archive *); |
|
|
|
__LA_DECL int archive_write_set_format_filter_by_ext(struct archive *a, const char *filename); |
|
|
|
__LA_DECL int archive_write_set_format_filter_by_ext_def(struct archive *a, const char *filename, const char * def_ext); |
|
|
|
__LA_DECL int archive_write_zip_set_compression_deflate(struct archive *); |
|
|
|
__LA_DECL int archive_write_zip_set_compression_store(struct archive *); |
|
|
|
/* Deprecated; use archive_write_open2 instead */ |
|
|
|
__LA_DECL int archive_write_open(struct archive *, void *, |
|
|
|
archive_open_callback *, archive_write_callback *, |
|
|
|
archive_close_callback *); |
|
|
|
__LA_DECL int archive_write_open2(struct archive *, void *, |
|
|
|
archive_open_callback *, archive_write_callback *, |
|
|
|
archive_close_callback *, archive_free_callback *); |
|
|
|
__LA_DECL int archive_write_open_fd(struct archive *, int _fd); |
|
|
|
__LA_DECL int archive_write_open_filename(struct archive *, const char *_file); |
|
|
|
__LA_DECL int archive_write_open_filename_w(struct archive *, |
|
|
|
const wchar_t *_file); |
|
|
|
/* A deprecated synonym for archive_write_open_filename() */ |
|
|
|
__LA_DECL int archive_write_open_file(struct archive *, const char *_file); |
|
|
|
__LA_DECL int archive_write_open_file(struct archive *, const char *_file) |
|
|
|
__LA_DEPRECATED; |
|
|
|
__LA_DECL int archive_write_open_FILE(struct archive *, FILE *); |
|
|
|
/* _buffSize is the size of the buffer, _used refers to a variable that |
|
|
|
* will be updated after each write into the buffer. */ |
|
|
@@ -613,21 +850,25 @@ __LA_DECL int archive_write_open_memory(struct archive *, |
|
|
|
*/ |
|
|
|
__LA_DECL int archive_write_header(struct archive *, |
|
|
|
struct archive_entry *); |
|
|
|
__LA_DECL __LA_SSIZE_T archive_write_data(struct archive *, |
|
|
|
__LA_DECL la_ssize_t archive_write_data(struct archive *, |
|
|
|
const void *, size_t); |
|
|
|
|
|
|
|
/* This interface is currently only available for archive_write_disk handles. */ |
|
|
|
__LA_DECL __LA_SSIZE_T archive_write_data_block(struct archive *, |
|
|
|
const void *, size_t, __LA_INT64_T); |
|
|
|
__LA_DECL la_ssize_t archive_write_data_block(struct archive *, |
|
|
|
const void *, size_t, la_int64_t); |
|
|
|
|
|
|
|
__LA_DECL int archive_write_finish_entry(struct archive *); |
|
|
|
__LA_DECL int archive_write_close(struct archive *); |
|
|
|
/* Marks the archive as FATAL so that a subsequent free() operation |
|
|
|
* won't try to close() cleanly. Provides a fast abort capability |
|
|
|
* when the client discovers that things have gone wrong. */ |
|
|
|
__LA_DECL int archive_write_fail(struct archive *); |
|
|
|
/* This can fail if the archive wasn't already closed, in which case |
|
|
|
* archive_write_free() will implicitly call archive_write_close(). */ |
|
|
|
__LA_DECL int archive_write_free(struct archive *); |
|
|
|
#if ARCHIVE_VERSION_NUMBER < 4000000 |
|
|
|
/* Synonym for archive_write_free() for backwards compatibility. */ |
|
|
|
__LA_DECL int archive_write_finish(struct archive *); |
|
|
|
__LA_DECL int archive_write_finish(struct archive *) __LA_DEPRECATED; |
|
|
|
#endif |
|
|
|
|
|
|
|
/* |
|
|
@@ -649,6 +890,13 @@ __LA_DECL int archive_write_set_option(struct archive *_a, |
|
|
|
__LA_DECL int archive_write_set_options(struct archive *_a, |
|
|
|
const char *opts); |
|
|
|
|
|
|
|
/* |
|
|
|
* Set a encryption passphrase. |
|
|
|
*/ |
|
|
|
__LA_DECL int archive_write_set_passphrase(struct archive *_a, const char *p); |
|
|
|
__LA_DECL int archive_write_set_passphrase_callback(struct archive *, |
|
|
|
void *client_data, archive_passphrase_callback *); |
|
|
|
|
|
|
|
/*- |
|
|
|
* ARCHIVE_WRITE_DISK API |
|
|
|
* |
|
|
@@ -668,7 +916,7 @@ __LA_DECL int archive_write_set_options(struct archive *_a, |
|
|
|
__LA_DECL struct archive *archive_write_disk_new(void); |
|
|
|
/* This file will not be overwritten. */ |
|
|
|
__LA_DECL int archive_write_disk_set_skip_file(struct archive *, |
|
|
|
__LA_INT64_T, __LA_INT64_T); |
|
|
|
la_int64_t, la_int64_t); |
|
|
|
/* Set flags to control how the next item gets created. |
|
|
|
* This accepts a bitmask of ARCHIVE_EXTRACT_XXX flags defined above. */ |
|
|
|
__LA_DECL int archive_write_disk_set_options(struct archive *, |
|
|
@@ -698,14 +946,14 @@ __LA_DECL int archive_write_disk_set_standard_lookup(struct archive *); |
|
|
|
*/ |
|
|
|
__LA_DECL int archive_write_disk_set_group_lookup(struct archive *, |
|
|
|
void * /* private_data */, |
|
|
|
__LA_INT64_T (*)(void *, const char *, __LA_INT64_T), |
|
|
|
la_int64_t (*)(void *, const char *, la_int64_t), |
|
|
|
void (* /* cleanup */)(void *)); |
|
|
|
__LA_DECL int archive_write_disk_set_user_lookup(struct archive *, |
|
|
|
void * /* private_data */, |
|
|
|
__LA_INT64_T (*)(void *, const char *, __LA_INT64_T), |
|
|
|
la_int64_t (*)(void *, const char *, la_int64_t), |
|
|
|
void (* /* cleanup */)(void *)); |
|
|
|
__LA_DECL __LA_INT64_T archive_write_disk_gid(struct archive *, const char *, __LA_INT64_T); |
|
|
|
__LA_DECL __LA_INT64_T archive_write_disk_uid(struct archive *, const char *, __LA_INT64_T); |
|
|
|
__LA_DECL la_int64_t archive_write_disk_gid(struct archive *, const char *, la_int64_t); |
|
|
|
__LA_DECL la_int64_t archive_write_disk_uid(struct archive *, const char *, la_int64_t); |
|
|
|
|
|
|
|
/* |
|
|
|
* ARCHIVE_READ_DISK API |
|
|
@@ -726,19 +974,19 @@ __LA_DECL int archive_read_disk_entry_from_file(struct archive *, |
|
|
|
struct archive_entry *, int /* fd */, const struct stat *); |
|
|
|
/* Look up gname for gid or uname for uid. */ |
|
|
|
/* Default implementations are very, very stupid. */ |
|
|
|
__LA_DECL const char *archive_read_disk_gname(struct archive *, __LA_INT64_T); |
|
|
|
__LA_DECL const char *archive_read_disk_uname(struct archive *, __LA_INT64_T); |
|
|
|
__LA_DECL const char *archive_read_disk_gname(struct archive *, la_int64_t); |
|
|
|
__LA_DECL const char *archive_read_disk_uname(struct archive *, la_int64_t); |
|
|
|
/* "Standard" implementation uses getpwuid_r, getgrgid_r and caches the |
|
|
|
* results for performance. */ |
|
|
|
__LA_DECL int archive_read_disk_set_standard_lookup(struct archive *); |
|
|
|
/* You can install your own lookups if you like. */ |
|
|
|
__LA_DECL int archive_read_disk_set_gname_lookup(struct archive *, |
|
|
|
void * /* private_data */, |
|
|
|
const char *(* /* lookup_fn */)(void *, __LA_INT64_T), |
|
|
|
const char *(* /* lookup_fn */)(void *, la_int64_t), |
|
|
|
void (* /* cleanup_fn */)(void *)); |
|
|
|
__LA_DECL int archive_read_disk_set_uname_lookup(struct archive *, |
|
|
|
void * /* private_data */, |
|
|
|
const char *(* /* lookup_fn */)(void *, __LA_INT64_T), |
|
|
|
const char *(* /* lookup_fn */)(void *, la_int64_t), |
|
|
|
void (* /* cleanup_fn */)(void *)); |
|
|
|
/* Start traversal. */ |
|
|
|
__LA_DECL int archive_read_disk_open(struct archive *, const char *); |
|
|
@@ -755,12 +1003,12 @@ __LA_DECL int archive_read_disk_can_descend(struct archive *); |
|
|
|
__LA_DECL int archive_read_disk_current_filesystem(struct archive *); |
|
|
|
__LA_DECL int archive_read_disk_current_filesystem_is_synthetic(struct archive *); |
|
|
|
__LA_DECL int archive_read_disk_current_filesystem_is_remote(struct archive *); |
|
|
|
/* Request that the access time of the entry visited by travesal be restored. */ |
|
|
|
/* Request that the access time of the entry visited by traversal be restored. */ |
|
|
|
__LA_DECL int archive_read_disk_set_atime_restored(struct archive *); |
|
|
|
/* |
|
|
|
* Set behavior. The "flags" argument selects optional behavior. |
|
|
|
*/ |
|
|
|
/* Request that the access time of the entry visited by travesal be restored. |
|
|
|
/* Request that the access time of the entry visited by traversal be restored. |
|
|
|
* This is the same as archive_read_disk_set_atime_restored. */ |
|
|
|
#define ARCHIVE_READDISK_RESTORE_ATIME (0x0001) |
|
|
|
/* Default: Do not skip an entry which has nodump flags. */ |
|
|
@@ -768,8 +1016,14 @@ __LA_DECL int archive_read_disk_set_atime_restored(struct archive *); |
|
|
|
/* Default: Skip a mac resource fork file whose prefix is "._" because of |
|
|
|
* using copyfile. */ |
|
|
|
#define ARCHIVE_READDISK_MAC_COPYFILE (0x0004) |
|
|
|
/* Default: Do not traverse mount points. */ |
|
|
|
/* Default: Traverse mount points. */ |
|
|
|
#define ARCHIVE_READDISK_NO_TRAVERSE_MOUNTS (0x0008) |
|
|
|
/* Default: Xattrs are read from disk. */ |
|
|
|
#define ARCHIVE_READDISK_NO_XATTR (0x0010) |
|
|
|
/* Default: ACLs are read from disk. */ |
|
|
|
#define ARCHIVE_READDISK_NO_ACL (0x0020) |
|
|
|
/* Default: File flags are read from disk. */ |
|
|
|
#define ARCHIVE_READDISK_NO_FFLAGS (0x0040) |
|
|
|
|
|
|
|
__LA_DECL int archive_read_disk_set_behavior(struct archive *, |
|
|
|
int flags); |
|
|
@@ -788,6 +1042,10 @@ __LA_DECL int archive_read_disk_set_metadata_filter_callback(struct archive *, |
|
|
|
int (*_metadata_filter_func)(struct archive *, void *, |
|
|
|
struct archive_entry *), void *_client_data); |
|
|
|
|
|
|
|
/* Simplified cleanup interface; |
|
|
|
* This calls archive_read_free() or archive_write_free() as needed. */ |
|
|
|
__LA_DECL int archive_free(struct archive *); |
|
|
|
|
|
|
|
/* |
|
|
|
* Accessor functions to read/set various information in |
|
|
|
* the struct archive object: |
|
|
@@ -798,7 +1056,7 @@ __LA_DECL int archive_read_disk_set_metadata_filter_callback(struct archive *, |
|
|
|
* last filter, which is always the pseudo-filter that wraps the |
|
|
|
* client callbacks. */ |
|
|
|
__LA_DECL int archive_filter_count(struct archive *); |
|
|
|
__LA_DECL __LA_INT64_T archive_filter_bytes(struct archive *, int); |
|
|
|
__LA_DECL la_int64_t archive_filter_bytes(struct archive *, int); |
|
|
|
__LA_DECL int archive_filter_code(struct archive *, int); |
|
|
|
__LA_DECL const char * archive_filter_name(struct archive *, int); |
|
|
|
|
|
|
@@ -806,13 +1064,17 @@ __LA_DECL const char * archive_filter_name(struct archive *, int); |
|
|
|
/* These don't properly handle multiple filters, so are deprecated and |
|
|
|
* will eventually be removed. */ |
|
|
|
/* As of libarchive 3.0, this is an alias for archive_filter_bytes(a, -1); */ |
|
|
|
__LA_DECL __LA_INT64_T archive_position_compressed(struct archive *); |
|
|
|
__LA_DECL la_int64_t archive_position_compressed(struct archive *) |
|
|
|
__LA_DEPRECATED; |
|
|
|
/* As of libarchive 3.0, this is an alias for archive_filter_bytes(a, 0); */ |
|
|
|
__LA_DECL __LA_INT64_T archive_position_uncompressed(struct archive *); |
|
|
|
__LA_DECL la_int64_t archive_position_uncompressed(struct archive *) |
|
|
|
__LA_DEPRECATED; |
|
|
|
/* As of libarchive 3.0, this is an alias for archive_filter_name(a, 0); */ |
|
|
|
__LA_DECL const char *archive_compression_name(struct archive *); |
|
|
|
__LA_DECL const char *archive_compression_name(struct archive *) |
|
|
|
__LA_DEPRECATED; |
|
|
|
/* As of libarchive 3.0, this is an alias for archive_filter_code(a, 0); */ |
|
|
|
__LA_DECL int archive_compression(struct archive *); |
|
|
|
__LA_DECL int archive_compression(struct archive *) |
|
|
|
__LA_DEPRECATED; |
|
|
|
#endif |
|
|
|
|
|
|
|
__LA_DECL int archive_errno(struct archive *); |
|
|
@@ -846,6 +1108,8 @@ __LA_DECL int archive_match_excluded(struct archive *, |
|
|
|
*/ |
|
|
|
__LA_DECL int archive_match_path_excluded(struct archive *, |
|
|
|
struct archive_entry *); |
|
|
|
/* Control recursive inclusion of directory content when directory is included. Default on. */ |
|
|
|
__LA_DECL int archive_match_set_inclusion_recursion(struct archive *, int); |
|
|
|
/* Add exclusion pathname pattern. */ |
|
|
|
__LA_DECL int archive_match_exclude_pattern(struct archive *, const char *); |
|
|
|
__LA_DECL int archive_match_exclude_pattern_w(struct archive *, |
|
|
@@ -885,7 +1149,7 @@ __LA_DECL int archive_match_time_excluded(struct archive *, |
|
|
|
|
|
|
|
/* |
|
|
|
* Flags to tell a matching type of time stamps. These are used for |
|
|
|
* following functinos. |
|
|
|
* following functions. |
|
|
|
*/ |
|
|
|
/* Time flag: mtime to be tested. */ |
|
|
|
#define ARCHIVE_MATCH_MTIME (0x0100) |
|
|
@@ -905,7 +1169,7 @@ __LA_DECL int archive_match_include_date(struct archive *, int _flag, |
|
|
|
const char *_datestr); |
|
|
|
__LA_DECL int archive_match_include_date_w(struct archive *, int _flag, |
|
|
|
const wchar_t *_datestr); |
|
|
|
/* Set inclusion time by a particluar file. */ |
|
|
|
/* Set inclusion time by a particular file. */ |
|
|
|
__LA_DECL int archive_match_include_file_time(struct archive *, |
|
|
|
int _flag, const char *_pathname); |
|
|
|
__LA_DECL int archive_match_include_file_time_w(struct archive *, |
|
|
@@ -921,8 +1185,8 @@ __LA_DECL int archive_match_exclude_entry(struct archive *, |
|
|
|
__LA_DECL int archive_match_owner_excluded(struct archive *, |
|
|
|
struct archive_entry *); |
|
|
|
/* Add inclusion uid, gid, uname and gname. */ |
|
|
|
__LA_DECL int archive_match_include_uid(struct archive *, __LA_INT64_T); |
|
|
|
__LA_DECL int archive_match_include_gid(struct archive *, __LA_INT64_T); |
|
|
|
__LA_DECL int archive_match_include_uid(struct archive *, la_int64_t); |
|
|
|
__LA_DECL int archive_match_include_gid(struct archive *, la_int64_t); |
|
|
|
__LA_DECL int archive_match_include_uname(struct archive *, const char *); |
|
|
|
__LA_DECL int archive_match_include_uname_w(struct archive *, |
|
|
|
const wchar_t *); |
|
|
@@ -930,6 +1194,10 @@ __LA_DECL int archive_match_include_gname(struct archive *, const char *); |
|
|
|
__LA_DECL int archive_match_include_gname_w(struct archive *, |
|
|
|
const wchar_t *); |
|
|
|
|
|
|
|
/* Utility functions */ |
|
|
|
/* Convenience function to sort a NULL terminated list of strings */ |
|
|
|
__LA_DECL int archive_utility_string_sort(char **); |
|
|
|
|
|
|
|
#ifdef __cplusplus |
|
|
|
} |
|
|
|
#endif |
|
|
@@ -937,9 +1205,4 @@ __LA_DECL int archive_match_include_gname_w(struct archive *, |
|
|
|
/* These are meaningless outside of this header. */ |
|
|
|
#undef __LA_DECL |
|
|
|
|
|
|
|
/* These need to remain defined because they're used in the |
|
|
|
* callback type definitions. XXX Fix this. This is ugly. XXX */ |
|
|
|
/* #undef __LA_INT64_T */ |
|
|
|
/* #undef __LA_SSIZE_T */ |
|
|
|
|
|
|
|
#endif /* !ARCHIVE_H_INCLUDED */ |