libarchive-static 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (157) hide show
  1. data/ext/Makefile +6 -0
  2. data/ext/extconf.rb +61 -0
  3. data/ext/libarchive-0.1.1/COPYING.libarchive +60 -0
  4. data/ext/libarchive-0.1.1/LICENSE.libbzip2 +42 -0
  5. data/ext/libarchive-0.1.1/README.txt +143 -0
  6. data/ext/libarchive-0.1.1/ext/Makefile.in +0 -0
  7. data/ext/libarchive-0.1.1/ext/archive_read_support_compression.c +31 -0
  8. data/ext/libarchive-0.1.1/ext/archive_read_support_compression.h +6 -0
  9. data/ext/libarchive-0.1.1/ext/archive_read_support_format.c +32 -0
  10. data/ext/libarchive-0.1.1/ext/archive_read_support_format.h +6 -0
  11. data/ext/libarchive-0.1.1/ext/archive_write_open_rb_str.c +29 -0
  12. data/ext/libarchive-0.1.1/ext/archive_write_open_rb_str.h +6 -0
  13. data/ext/libarchive-0.1.1/ext/archive_write_set_compression.c +32 -0
  14. data/ext/libarchive-0.1.1/ext/archive_write_set_compression.h +6 -0
  15. data/ext/libarchive-0.1.1/ext/config.h.in +22 -0
  16. data/ext/libarchive-0.1.1/ext/configure +3904 -0
  17. data/ext/libarchive-0.1.1/ext/configure.in +11 -0
  18. data/ext/libarchive-0.1.1/ext/depend +19 -0
  19. data/ext/libarchive-0.1.1/ext/extconf.rb +6 -0
  20. data/ext/libarchive-0.1.1/ext/install-sh +250 -0
  21. data/ext/libarchive-0.1.1/ext/libarchive.c +89 -0
  22. data/ext/libarchive-0.1.1/ext/libarchive_archive.c +84 -0
  23. data/ext/libarchive-0.1.1/ext/libarchive_entry.c +1015 -0
  24. data/ext/libarchive-0.1.1/ext/libarchive_internal.h +155 -0
  25. data/ext/libarchive-0.1.1/ext/libarchive_reader.c +328 -0
  26. data/ext/libarchive-0.1.1/ext/libarchive_win32.h +52 -0
  27. data/ext/libarchive-0.1.1/ext/libarchive_writer.c +246 -0
  28. data/ext/libarchive-0.1.1/libarchive.c +1762 -0
  29. data/ext/libarchive-2.8.4/Makefile.in +7076 -0
  30. data/ext/libarchive-2.8.4/build/autoconf/check_stdcall_func.m4 +51 -0
  31. data/ext/libarchive-2.8.4/build/autoconf/compile +143 -0
  32. data/ext/libarchive-2.8.4/build/autoconf/config.guess +1502 -0
  33. data/ext/libarchive-2.8.4/build/autoconf/config.sub +1708 -0
  34. data/ext/libarchive-2.8.4/build/autoconf/depcomp +630 -0
  35. data/ext/libarchive-2.8.4/build/autoconf/install-sh +291 -0
  36. data/ext/libarchive-2.8.4/build/autoconf/la_uid_t.m4 +20 -0
  37. data/ext/libarchive-2.8.4/build/autoconf/ltmain.sh +8406 -0
  38. data/ext/libarchive-2.8.4/build/autoconf/missing +376 -0
  39. data/ext/libarchive-2.8.4/build/pkgconfig/libarchive.pc.in +10 -0
  40. data/ext/libarchive-2.8.4/config.h.in +772 -0
  41. data/ext/libarchive-2.8.4/configure +17916 -0
  42. data/ext/libarchive-2.8.4/libarchive/archive.h +741 -0
  43. data/ext/libarchive-2.8.4/libarchive/archive_check_magic.c +134 -0
  44. data/ext/libarchive-2.8.4/libarchive/archive_crc32.h +66 -0
  45. data/ext/libarchive-2.8.4/libarchive/archive_endian.h +162 -0
  46. data/ext/libarchive-2.8.4/libarchive/archive_entry.c +2202 -0
  47. data/ext/libarchive-2.8.4/libarchive/archive_entry.h +524 -0
  48. data/ext/libarchive-2.8.4/libarchive/archive_entry_copy_bhfi.c +74 -0
  49. data/ext/libarchive-2.8.4/libarchive/archive_entry_copy_stat.c +77 -0
  50. data/ext/libarchive-2.8.4/libarchive/archive_entry_link_resolver.c +405 -0
  51. data/ext/libarchive-2.8.4/libarchive/archive_entry_private.h +184 -0
  52. data/ext/libarchive-2.8.4/libarchive/archive_entry_stat.c +118 -0
  53. data/ext/libarchive-2.8.4/libarchive/archive_entry_strmode.c +87 -0
  54. data/ext/libarchive-2.8.4/libarchive/archive_entry_xattr.c +158 -0
  55. data/ext/libarchive-2.8.4/libarchive/archive_hash.h +281 -0
  56. data/ext/libarchive-2.8.4/libarchive/archive_platform.h +165 -0
  57. data/ext/libarchive-2.8.4/libarchive/archive_private.h +124 -0
  58. data/ext/libarchive-2.8.4/libarchive/archive_read.c +1249 -0
  59. data/ext/libarchive-2.8.4/libarchive/archive_read_data_into_fd.c +93 -0
  60. data/ext/libarchive-2.8.4/libarchive/archive_read_disk.c +198 -0
  61. data/ext/libarchive-2.8.4/libarchive/archive_read_disk_entry_from_file.c +570 -0
  62. data/ext/libarchive-2.8.4/libarchive/archive_read_disk_private.h +62 -0
  63. data/ext/libarchive-2.8.4/libarchive/archive_read_disk_set_standard_lookup.c +303 -0
  64. data/ext/libarchive-2.8.4/libarchive/archive_read_extract.c +182 -0
  65. data/ext/libarchive-2.8.4/libarchive/archive_read_open_fd.c +190 -0
  66. data/ext/libarchive-2.8.4/libarchive/archive_read_open_file.c +165 -0
  67. data/ext/libarchive-2.8.4/libarchive/archive_read_open_filename.c +272 -0
  68. data/ext/libarchive-2.8.4/libarchive/archive_read_open_memory.c +156 -0
  69. data/ext/libarchive-2.8.4/libarchive/archive_read_private.h +199 -0
  70. data/ext/libarchive-2.8.4/libarchive/archive_read_support_compression_all.c +60 -0
  71. data/ext/libarchive-2.8.4/libarchive/archive_read_support_compression_bzip2.c +353 -0
  72. data/ext/libarchive-2.8.4/libarchive/archive_read_support_compression_compress.c +444 -0
  73. data/ext/libarchive-2.8.4/libarchive/archive_read_support_compression_gzip.c +465 -0
  74. data/ext/libarchive-2.8.4/libarchive/archive_read_support_compression_none.c +40 -0
  75. data/ext/libarchive-2.8.4/libarchive/archive_read_support_compression_program.c +459 -0
  76. data/ext/libarchive-2.8.4/libarchive/archive_read_support_compression_rpm.c +287 -0
  77. data/ext/libarchive-2.8.4/libarchive/archive_read_support_compression_uu.c +627 -0
  78. data/ext/libarchive-2.8.4/libarchive/archive_read_support_compression_xz.c +708 -0
  79. data/ext/libarchive-2.8.4/libarchive/archive_read_support_format_all.c +43 -0
  80. data/ext/libarchive-2.8.4/libarchive/archive_read_support_format_ar.c +584 -0
  81. data/ext/libarchive-2.8.4/libarchive/archive_read_support_format_cpio.c +777 -0
  82. data/ext/libarchive-2.8.4/libarchive/archive_read_support_format_empty.c +93 -0
  83. data/ext/libarchive-2.8.4/libarchive/archive_read_support_format_iso9660.c +2830 -0
  84. data/ext/libarchive-2.8.4/libarchive/archive_read_support_format_mtree.c +1304 -0
  85. data/ext/libarchive-2.8.4/libarchive/archive_read_support_format_raw.c +185 -0
  86. data/ext/libarchive-2.8.4/libarchive/archive_read_support_format_tar.c +2418 -0
  87. data/ext/libarchive-2.8.4/libarchive/archive_read_support_format_xar.c +3151 -0
  88. data/ext/libarchive-2.8.4/libarchive/archive_read_support_format_zip.c +903 -0
  89. data/ext/libarchive-2.8.4/libarchive/archive_string.c +453 -0
  90. data/ext/libarchive-2.8.4/libarchive/archive_string.h +148 -0
  91. data/ext/libarchive-2.8.4/libarchive/archive_string_sprintf.c +164 -0
  92. data/ext/libarchive-2.8.4/libarchive/archive_util.c +391 -0
  93. data/ext/libarchive-2.8.4/libarchive/archive_virtual.c +94 -0
  94. data/ext/libarchive-2.8.4/libarchive/archive_windows.c +1236 -0
  95. data/ext/libarchive-2.8.4/libarchive/archive_windows.h +347 -0
  96. data/ext/libarchive-2.8.4/libarchive/archive_write.c +466 -0
  97. data/ext/libarchive-2.8.4/libarchive/archive_write_disk.c +2628 -0
  98. data/ext/libarchive-2.8.4/libarchive/archive_write_disk_private.h +38 -0
  99. data/ext/libarchive-2.8.4/libarchive/archive_write_disk_set_standard_lookup.c +262 -0
  100. data/ext/libarchive-2.8.4/libarchive/archive_write_open_fd.c +141 -0
  101. data/ext/libarchive-2.8.4/libarchive/archive_write_open_file.c +105 -0
  102. data/ext/libarchive-2.8.4/libarchive/archive_write_open_filename.c +162 -0
  103. data/ext/libarchive-2.8.4/libarchive/archive_write_open_memory.c +126 -0
  104. data/ext/libarchive-2.8.4/libarchive/archive_write_private.h +122 -0
  105. data/ext/libarchive-2.8.4/libarchive/archive_write_set_compression_bzip2.c +408 -0
  106. data/ext/libarchive-2.8.4/libarchive/archive_write_set_compression_compress.c +492 -0
  107. data/ext/libarchive-2.8.4/libarchive/archive_write_set_compression_gzip.c +477 -0
  108. data/ext/libarchive-2.8.4/libarchive/archive_write_set_compression_none.c +257 -0
  109. data/ext/libarchive-2.8.4/libarchive/archive_write_set_compression_program.c +347 -0
  110. data/ext/libarchive-2.8.4/libarchive/archive_write_set_compression_xz.c +438 -0
  111. data/ext/libarchive-2.8.4/libarchive/archive_write_set_format.c +72 -0
  112. data/ext/libarchive-2.8.4/libarchive/archive_write_set_format_ar.c +550 -0
  113. data/ext/libarchive-2.8.4/libarchive/archive_write_set_format_by_name.c +76 -0
  114. data/ext/libarchive-2.8.4/libarchive/archive_write_set_format_cpio.c +344 -0
  115. data/ext/libarchive-2.8.4/libarchive/archive_write_set_format_cpio_newc.c +295 -0
  116. data/ext/libarchive-2.8.4/libarchive/archive_write_set_format_mtree.c +1050 -0
  117. data/ext/libarchive-2.8.4/libarchive/archive_write_set_format_pax.c +1386 -0
  118. data/ext/libarchive-2.8.4/libarchive/archive_write_set_format_shar.c +626 -0
  119. data/ext/libarchive-2.8.4/libarchive/archive_write_set_format_ustar.c +587 -0
  120. data/ext/libarchive-2.8.4/libarchive/archive_write_set_format_zip.c +667 -0
  121. data/ext/libarchive-2.8.4/libarchive/config_freebsd.h +154 -0
  122. data/ext/libarchive-2.8.4/libarchive/filter_fork.c +161 -0
  123. data/ext/libarchive-2.8.4/libarchive/filter_fork.h +41 -0
  124. data/ext/libarchive-2.8.4/libarchive/filter_fork_windows.c +113 -0
  125. data/ext/libarchive-static-makefile +80 -0
  126. data/ext/libarchive-static-wrapper-makefile +22 -0
  127. data/ext/zlib-1.2.5/Makefile.in +257 -0
  128. data/ext/zlib-1.2.5/adler32.c +169 -0
  129. data/ext/zlib-1.2.5/compress.c +80 -0
  130. data/ext/zlib-1.2.5/configure +596 -0
  131. data/ext/zlib-1.2.5/crc32.c +442 -0
  132. data/ext/zlib-1.2.5/crc32.h +441 -0
  133. data/ext/zlib-1.2.5/deflate.c +1834 -0
  134. data/ext/zlib-1.2.5/deflate.h +342 -0
  135. data/ext/zlib-1.2.5/example.c +565 -0
  136. data/ext/zlib-1.2.5/gzclose.c +25 -0
  137. data/ext/zlib-1.2.5/gzguts.h +132 -0
  138. data/ext/zlib-1.2.5/gzlib.c +537 -0
  139. data/ext/zlib-1.2.5/gzread.c +653 -0
  140. data/ext/zlib-1.2.5/gzwrite.c +531 -0
  141. data/ext/zlib-1.2.5/infback.c +632 -0
  142. data/ext/zlib-1.2.5/inffast.c +340 -0
  143. data/ext/zlib-1.2.5/inffast.h +11 -0
  144. data/ext/zlib-1.2.5/inffixed.h +94 -0
  145. data/ext/zlib-1.2.5/inflate.c +1480 -0
  146. data/ext/zlib-1.2.5/inflate.h +122 -0
  147. data/ext/zlib-1.2.5/inftrees.c +330 -0
  148. data/ext/zlib-1.2.5/inftrees.h +62 -0
  149. data/ext/zlib-1.2.5/minigzip.c +440 -0
  150. data/ext/zlib-1.2.5/trees.c +1244 -0
  151. data/ext/zlib-1.2.5/trees.h +128 -0
  152. data/ext/zlib-1.2.5/uncompr.c +59 -0
  153. data/ext/zlib-1.2.5/zconf.h +428 -0
  154. data/ext/zlib-1.2.5/zlib.h +1613 -0
  155. data/ext/zlib-1.2.5/zutil.c +318 -0
  156. data/ext/zlib-1.2.5/zutil.h +274 -0
  157. metadata +211 -0
@@ -0,0 +1,741 @@
1
+ /*-
2
+ * Copyright (c) 2003-2007 Tim Kientzle
3
+ * All rights reserved.
4
+ *
5
+ * Redistribution and use in source and binary forms, with or without
6
+ * modification, are permitted provided that the following conditions
7
+ * are met:
8
+ * 1. Redistributions of source code must retain the above copyright
9
+ * notice, this list of conditions and the following disclaimer.
10
+ * 2. Redistributions in binary form must reproduce the above copyright
11
+ * notice, this list of conditions and the following disclaimer in the
12
+ * documentation and/or other materials provided with the distribution.
13
+ *
14
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
15
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
16
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
17
+ * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
18
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
19
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
20
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
21
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
23
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24
+ *
25
+ * $FreeBSD: src/lib/libarchive/archive.h.in,v 1.50 2008/05/26 17:00:22 kientzle Exp $
26
+ */
27
+
28
+ #ifndef ARCHIVE_H_INCLUDED
29
+ #define ARCHIVE_H_INCLUDED
30
+
31
+ /*
32
+ * Note: archive.h is for use outside of libarchive; the configuration
33
+ * headers (config.h, archive_platform.h, etc.) are purely internal.
34
+ * Do NOT use HAVE_XXX configuration macros to control the behavior of
35
+ * this header! If you must conditionalize, use predefined compiler and/or
36
+ * platform macros.
37
+ */
38
+ #if defined(__BORLANDC__) && __BORLANDC__ >= 0x560
39
+ # define __LA_STDINT_H <stdint.h>
40
+ #elif !defined(__WATCOMC__) && !defined(_MSC_VER) && !defined(__INTERIX) && !defined(__BORLANDC__)
41
+ # define __LA_STDINT_H <inttypes.h>
42
+ #endif
43
+
44
+ #include <sys/stat.h>
45
+ #include <sys/types.h> /* Linux requires this for off_t */
46
+ #ifdef __LA_STDINT_H
47
+ # include __LA_STDINT_H /* int64_t, etc. */
48
+ #endif
49
+ #include <stdio.h> /* For FILE * */
50
+
51
+ /* Get appropriate definitions of standard POSIX-style types. */
52
+ /* These should match the types used in 'struct stat' */
53
+ #if defined(_WIN32) && !defined(__CYGWIN__)
54
+ #define __LA_INT64_T __int64
55
+ # if defined(_SSIZE_T_DEFINED)
56
+ # define __LA_SSIZE_T ssize_t
57
+ # elif defined(_WIN64)
58
+ # define __LA_SSIZE_T __int64
59
+ # else
60
+ # define __LA_SSIZE_T long
61
+ # endif
62
+ # if defined(__BORLANDC__)
63
+ # define __LA_UID_T uid_t
64
+ # define __LA_GID_T gid_t
65
+ # else
66
+ # define __LA_UID_T short
67
+ # define __LA_GID_T short
68
+ # endif
69
+ #else
70
+ #include <unistd.h> /* ssize_t, uid_t, and gid_t */
71
+ #define __LA_INT64_T int64_t
72
+ #define __LA_SSIZE_T ssize_t
73
+ #define __LA_UID_T uid_t
74
+ #define __LA_GID_T gid_t
75
+ #endif
76
+
77
+ /*
78
+ * On Windows, define LIBARCHIVE_STATIC if you're building or using a
79
+ * .lib. The default here assumes you're building a DLL. Only
80
+ * libarchive source should ever define __LIBARCHIVE_BUILD.
81
+ */
82
+ #if ((defined __WIN32__) || (defined _WIN32) || defined(__CYGWIN__)) && (!defined LIBARCHIVE_STATIC)
83
+ # ifdef __LIBARCHIVE_BUILD
84
+ # ifdef __GNUC__
85
+ # define __LA_DECL __attribute__((dllexport)) extern
86
+ # else
87
+ # define __LA_DECL __declspec(dllexport)
88
+ # endif
89
+ # else
90
+ # ifdef __GNUC__
91
+ # define __LA_DECL __attribute__((dllimport)) extern
92
+ # else
93
+ # define __LA_DECL __declspec(dllimport)
94
+ # endif
95
+ # endif
96
+ #else
97
+ /* Static libraries or non-Windows needs no special declaration. */
98
+ # define __LA_DECL
99
+ #endif
100
+
101
+ #ifdef __cplusplus
102
+ extern "C" {
103
+ #endif
104
+
105
+ /*
106
+ * The version number is provided as both a macro and a function.
107
+ * The macro identifies the installed header; the function identifies
108
+ * the library version (which may not be the same if you're using a
109
+ * dynamically-linked version of the library). Of course, if the
110
+ * header and library are very different, you should expect some
111
+ * strangeness. Don't do that.
112
+ */
113
+
114
+ /*
115
+ * The version number is expressed as a single integer that makes it
116
+ * easy to compare versions at build time: for version a.b.c, the
117
+ * version number is printf("%d%03d%03d",a,b,c). For example, if you
118
+ * know your application requires version 2.12.108 or later, you can
119
+ * assert that ARCHIVE_VERSION >= 2012108.
120
+ *
121
+ * This single-number format was introduced with libarchive 1.9.0 in
122
+ * the libarchive 1.x family and libarchive 2.2.4 in the libarchive
123
+ * 2.x family. The following may be useful if you really want to do
124
+ * feature detection for earlier libarchive versions (which defined
125
+ * ARCHIVE_API_VERSION and ARCHIVE_API_FEATURE instead):
126
+ *
127
+ * #ifndef ARCHIVE_VERSION_NUMBER
128
+ * #define ARCHIVE_VERSION_NUMBER \
129
+ * (ARCHIVE_API_VERSION * 1000000 + ARCHIVE_API_FEATURE * 1000)
130
+ * #endif
131
+ */
132
+ #define ARCHIVE_VERSION_NUMBER 2008004
133
+ __LA_DECL int archive_version_number(void);
134
+
135
+ /*
136
+ * Textual name/version of the library, useful for version displays.
137
+ */
138
+ #define ARCHIVE_VERSION_STRING "libarchive 2.8.4"
139
+ __LA_DECL const char * archive_version_string(void);
140
+
141
+ #if ARCHIVE_VERSION_NUMBER < 3000000
142
+ /*
143
+ * Deprecated; these are older names that will be removed in favor of
144
+ * the simpler definitions above.
145
+ */
146
+ #define ARCHIVE_VERSION_STAMP ARCHIVE_VERSION_NUMBER
147
+ __LA_DECL int archive_version_stamp(void);
148
+ #define ARCHIVE_LIBRARY_VERSION ARCHIVE_VERSION_STRING
149
+ __LA_DECL const char * archive_version(void);
150
+ #define ARCHIVE_API_VERSION (ARCHIVE_VERSION_NUMBER / 1000000)
151
+ __LA_DECL int archive_api_version(void);
152
+ #define ARCHIVE_API_FEATURE ((ARCHIVE_VERSION_NUMBER / 1000) % 1000)
153
+ __LA_DECL int archive_api_feature(void);
154
+ #endif
155
+
156
+ #if ARCHIVE_VERSION_NUMBER < 3000000
157
+ /* This should never have been here in the first place. */
158
+ /* Legacy of old tar assumptions, will be removed in libarchive 3.0. */
159
+ #define ARCHIVE_BYTES_PER_RECORD 512
160
+ #define ARCHIVE_DEFAULT_BYTES_PER_BLOCK 10240
161
+ #endif
162
+
163
+ /* Declare our basic types. */
164
+ struct archive;
165
+ struct archive_entry;
166
+
167
+ /*
168
+ * Error codes: Use archive_errno() and archive_error_string()
169
+ * to retrieve details. Unless specified otherwise, all functions
170
+ * that return 'int' use these codes.
171
+ */
172
+ #define ARCHIVE_EOF 1 /* Found end of archive. */
173
+ #define ARCHIVE_OK 0 /* Operation was successful. */
174
+ #define ARCHIVE_RETRY (-10) /* Retry might succeed. */
175
+ #define ARCHIVE_WARN (-20) /* Partial success. */
176
+ /* For example, if write_header "fails", then you can't push data. */
177
+ #define ARCHIVE_FAILED (-25) /* Current operation cannot complete. */
178
+ /* But if write_header is "fatal," then this archive is dead and useless. */
179
+ #define ARCHIVE_FATAL (-30) /* No more operations are possible. */
180
+
181
+ /*
182
+ * As far as possible, archive_errno returns standard platform errno codes.
183
+ * Of course, the details vary by platform, so the actual definitions
184
+ * here are stored in "archive_platform.h". The symbols are listed here
185
+ * for reference; as a rule, clients should not need to know the exact
186
+ * platform-dependent error code.
187
+ */
188
+ /* Unrecognized or invalid file format. */
189
+ /* #define ARCHIVE_ERRNO_FILE_FORMAT */
190
+ /* Illegal usage of the library. */
191
+ /* #define ARCHIVE_ERRNO_PROGRAMMER_ERROR */
192
+ /* Unknown or unclassified error. */
193
+ /* #define ARCHIVE_ERRNO_MISC */
194
+
195
+ /*
196
+ * Callbacks are invoked to automatically read/skip/write/open/close the
197
+ * archive. You can provide your own for complex tasks (like breaking
198
+ * archives across multiple tapes) or use standard ones built into the
199
+ * library.
200
+ */
201
+
202
+ /* Returns pointer and size of next block of data from archive. */
203
+ typedef __LA_SSIZE_T archive_read_callback(struct archive *,
204
+ void *_client_data, const void **_buffer);
205
+
206
+ /* Skips at most request bytes from archive and returns the skipped amount */
207
+ #if ARCHIVE_VERSION_NUMBER < 2000000
208
+ /* Libarchive 1.0 used ssize_t for the return, which is only 32 bits
209
+ * on most 32-bit platforms; not large enough. */
210
+ typedef __LA_SSIZE_T archive_skip_callback(struct archive *,
211
+ void *_client_data, size_t request);
212
+ #elif ARCHIVE_VERSION_NUMBER < 3000000
213
+ /* Libarchive 2.0 used off_t here, but that is a bad idea on Linux and a
214
+ * few other platforms where off_t varies with build settings. */
215
+ typedef off_t archive_skip_callback(struct archive *,
216
+ void *_client_data, off_t request);
217
+ #else
218
+ /* Libarchive 3.0 uses int64_t here, which is actually guaranteed to be
219
+ * 64 bits on every platform. */
220
+ typedef __LA_INT64_T archive_skip_callback(struct archive *,
221
+ void *_client_data, __LA_INT64_T request);
222
+ #endif
223
+
224
+ /* Returns size actually written, zero on EOF, -1 on error. */
225
+ typedef __LA_SSIZE_T archive_write_callback(struct archive *,
226
+ void *_client_data,
227
+ const void *_buffer, size_t _length);
228
+
229
+ #if ARCHIVE_VERSION_NUMBER < 3000000
230
+ /* Open callback is actually never needed; remove it in libarchive 3.0. */
231
+ typedef int archive_open_callback(struct archive *, void *_client_data);
232
+ #endif
233
+
234
+ typedef int archive_close_callback(struct archive *, void *_client_data);
235
+
236
+ /*
237
+ * Codes for archive_compression.
238
+ */
239
+ #define ARCHIVE_COMPRESSION_NONE 0
240
+ #define ARCHIVE_COMPRESSION_GZIP 1
241
+ #define ARCHIVE_COMPRESSION_BZIP2 2
242
+ #define ARCHIVE_COMPRESSION_COMPRESS 3
243
+ #define ARCHIVE_COMPRESSION_PROGRAM 4
244
+ #define ARCHIVE_COMPRESSION_LZMA 5
245
+ #define ARCHIVE_COMPRESSION_XZ 6
246
+ #define ARCHIVE_COMPRESSION_UU 7
247
+ #define ARCHIVE_COMPRESSION_RPM 8
248
+
249
+ /*
250
+ * Codes returned by archive_format.
251
+ *
252
+ * Top 16 bits identifies the format family (e.g., "tar"); lower
253
+ * 16 bits indicate the variant. This is updated by read_next_header.
254
+ * Note that the lower 16 bits will often vary from entry to entry.
255
+ * In some cases, this variation occurs as libarchive learns more about
256
+ * the archive (for example, later entries might utilize extensions that
257
+ * weren't necessary earlier in the archive; in this case, libarchive
258
+ * will change the format code to indicate the extended format that
259
+ * was used). In other cases, it's because different tools have
260
+ * modified the archive and so different parts of the archive
261
+ * actually have slightly different formts. (Both tar and cpio store
262
+ * format codes in each entry, so it is quite possible for each
263
+ * entry to be in a different format.)
264
+ */
265
+ #define ARCHIVE_FORMAT_BASE_MASK 0xff0000
266
+ #define ARCHIVE_FORMAT_CPIO 0x10000
267
+ #define ARCHIVE_FORMAT_CPIO_POSIX (ARCHIVE_FORMAT_CPIO | 1)
268
+ #define ARCHIVE_FORMAT_CPIO_BIN_LE (ARCHIVE_FORMAT_CPIO | 2)
269
+ #define ARCHIVE_FORMAT_CPIO_BIN_BE (ARCHIVE_FORMAT_CPIO | 3)
270
+ #define ARCHIVE_FORMAT_CPIO_SVR4_NOCRC (ARCHIVE_FORMAT_CPIO | 4)
271
+ #define ARCHIVE_FORMAT_CPIO_SVR4_CRC (ARCHIVE_FORMAT_CPIO | 5)
272
+ #define ARCHIVE_FORMAT_SHAR 0x20000
273
+ #define ARCHIVE_FORMAT_SHAR_BASE (ARCHIVE_FORMAT_SHAR | 1)
274
+ #define ARCHIVE_FORMAT_SHAR_DUMP (ARCHIVE_FORMAT_SHAR | 2)
275
+ #define ARCHIVE_FORMAT_TAR 0x30000
276
+ #define ARCHIVE_FORMAT_TAR_USTAR (ARCHIVE_FORMAT_TAR | 1)
277
+ #define ARCHIVE_FORMAT_TAR_PAX_INTERCHANGE (ARCHIVE_FORMAT_TAR | 2)
278
+ #define ARCHIVE_FORMAT_TAR_PAX_RESTRICTED (ARCHIVE_FORMAT_TAR | 3)
279
+ #define ARCHIVE_FORMAT_TAR_GNUTAR (ARCHIVE_FORMAT_TAR | 4)
280
+ #define ARCHIVE_FORMAT_ISO9660 0x40000
281
+ #define ARCHIVE_FORMAT_ISO9660_ROCKRIDGE (ARCHIVE_FORMAT_ISO9660 | 1)
282
+ #define ARCHIVE_FORMAT_ZIP 0x50000
283
+ #define ARCHIVE_FORMAT_EMPTY 0x60000
284
+ #define ARCHIVE_FORMAT_AR 0x70000
285
+ #define ARCHIVE_FORMAT_AR_GNU (ARCHIVE_FORMAT_AR | 1)
286
+ #define ARCHIVE_FORMAT_AR_BSD (ARCHIVE_FORMAT_AR | 2)
287
+ #define ARCHIVE_FORMAT_MTREE 0x80000
288
+ #define ARCHIVE_FORMAT_RAW 0x90000
289
+ #define ARCHIVE_FORMAT_XAR 0xA0000
290
+
291
+ /*-
292
+ * Basic outline for reading an archive:
293
+ * 1) Ask archive_read_new for an archive reader object.
294
+ * 2) Update any global properties as appropriate.
295
+ * In particular, you'll certainly want to call appropriate
296
+ * archive_read_support_XXX functions.
297
+ * 3) Call archive_read_open_XXX to open the archive
298
+ * 4) Repeatedly call archive_read_next_header to get information about
299
+ * successive archive entries. Call archive_read_data to extract
300
+ * data for entries of interest.
301
+ * 5) Call archive_read_finish to end processing.
302
+ */
303
+ __LA_DECL struct archive *archive_read_new(void);
304
+
305
+ /*
306
+ * The archive_read_support_XXX calls enable auto-detect for this
307
+ * archive handle. They also link in the necessary support code.
308
+ * For example, if you don't want bzlib linked in, don't invoke
309
+ * support_compression_bzip2(). The "all" functions provide the
310
+ * obvious shorthand.
311
+ */
312
+ __LA_DECL int archive_read_support_compression_all(struct archive *);
313
+ __LA_DECL int archive_read_support_compression_bzip2(struct archive *);
314
+ __LA_DECL int archive_read_support_compression_compress(struct archive *);
315
+ __LA_DECL int archive_read_support_compression_gzip(struct archive *);
316
+ __LA_DECL int archive_read_support_compression_lzma(struct archive *);
317
+ __LA_DECL int archive_read_support_compression_none(struct archive *);
318
+ __LA_DECL int archive_read_support_compression_program(struct archive *,
319
+ const char *command);
320
+ __LA_DECL int archive_read_support_compression_program_signature
321
+ (struct archive *, const char *,
322
+ const void * /* match */, size_t);
323
+
324
+ __LA_DECL int archive_read_support_compression_rpm(struct archive *);
325
+ __LA_DECL int archive_read_support_compression_uu(struct archive *);
326
+ __LA_DECL int archive_read_support_compression_xz(struct archive *);
327
+
328
+ __LA_DECL int archive_read_support_format_all(struct archive *);
329
+ __LA_DECL int archive_read_support_format_ar(struct archive *);
330
+ __LA_DECL int archive_read_support_format_cpio(struct archive *);
331
+ __LA_DECL int archive_read_support_format_empty(struct archive *);
332
+ __LA_DECL int archive_read_support_format_gnutar(struct archive *);
333
+ __LA_DECL int archive_read_support_format_iso9660(struct archive *);
334
+ __LA_DECL int archive_read_support_format_mtree(struct archive *);
335
+ __LA_DECL int archive_read_support_format_raw(struct archive *);
336
+ __LA_DECL int archive_read_support_format_tar(struct archive *);
337
+ __LA_DECL int archive_read_support_format_xar(struct archive *);
338
+ __LA_DECL int archive_read_support_format_zip(struct archive *);
339
+
340
+
341
+ /* Open the archive using callbacks for archive I/O. */
342
+ __LA_DECL int archive_read_open(struct archive *, void *_client_data,
343
+ archive_open_callback *, archive_read_callback *,
344
+ archive_close_callback *);
345
+ __LA_DECL int archive_read_open2(struct archive *, void *_client_data,
346
+ archive_open_callback *, archive_read_callback *,
347
+ archive_skip_callback *, archive_close_callback *);
348
+
349
+ /*
350
+ * A variety of shortcuts that invoke archive_read_open() with
351
+ * canned callbacks suitable for common situations. The ones that
352
+ * accept a block size handle tape blocking correctly.
353
+ */
354
+ /* Use this if you know the filename. Note: NULL indicates stdin. */
355
+ __LA_DECL int archive_read_open_filename(struct archive *,
356
+ const char *_filename, size_t _block_size);
357
+ /* archive_read_open_file() is a deprecated synonym for ..._open_filename(). */
358
+ __LA_DECL int archive_read_open_file(struct archive *,
359
+ const char *_filename, size_t _block_size);
360
+ /* Read an archive that's stored in memory. */
361
+ __LA_DECL int archive_read_open_memory(struct archive *,
362
+ void * buff, size_t size);
363
+ /* A more involved version that is only used for internal testing. */
364
+ __LA_DECL int archive_read_open_memory2(struct archive *a, void *buff,
365
+ size_t size, size_t read_size);
366
+ /* Read an archive that's already open, using the file descriptor. */
367
+ __LA_DECL int archive_read_open_fd(struct archive *, int _fd,
368
+ size_t _block_size);
369
+ /* Read an archive that's already open, using a FILE *. */
370
+ /* Note: DO NOT use this with tape drives. */
371
+ __LA_DECL int archive_read_open_FILE(struct archive *, FILE *_file);
372
+
373
+ /* Parses and returns next entry header. */
374
+ __LA_DECL int archive_read_next_header(struct archive *,
375
+ struct archive_entry **);
376
+
377
+ /* Parses and returns next entry header using the archive_entry passed in */
378
+ __LA_DECL int archive_read_next_header2(struct archive *,
379
+ struct archive_entry *);
380
+
381
+ /*
382
+ * Retrieve the byte offset in UNCOMPRESSED data where last-read
383
+ * header started.
384
+ */
385
+ __LA_DECL __LA_INT64_T archive_read_header_position(struct archive *);
386
+
387
+ /* Read data from the body of an entry. Similar to read(2). */
388
+ __LA_DECL __LA_SSIZE_T archive_read_data(struct archive *,
389
+ void *, size_t);
390
+
391
+ /*
392
+ * A zero-copy version of archive_read_data that also exposes the file offset
393
+ * of each returned block. Note that the client has no way to specify
394
+ * the desired size of the block. The API does guarantee that offsets will
395
+ * be strictly increasing and that returned blocks will not overlap.
396
+ */
397
+ #if ARCHIVE_VERSION_NUMBER < 3000000
398
+ __LA_DECL int archive_read_data_block(struct archive *a,
399
+ const void **buff, size_t *size, off_t *offset);
400
+ #else
401
+ __LA_DECL int archive_read_data_block(struct archive *a,
402
+ const void **buff, size_t *size,
403
+ __LA_INT64_T *offset);
404
+ #endif
405
+
406
+ /*-
407
+ * Some convenience functions that are built on archive_read_data:
408
+ * 'skip': skips entire entry
409
+ * 'into_buffer': writes data into memory buffer that you provide
410
+ * 'into_fd': writes data to specified filedes
411
+ */
412
+ __LA_DECL int archive_read_data_skip(struct archive *);
413
+ __LA_DECL int archive_read_data_into_buffer(struct archive *,
414
+ void *buffer, __LA_SSIZE_T len);
415
+ __LA_DECL int archive_read_data_into_fd(struct archive *, int fd);
416
+
417
+ /*
418
+ * Set read options.
419
+ */
420
+ /* Apply option string to the format only. */
421
+ __LA_DECL int archive_read_set_format_options(struct archive *_a,
422
+ const char *s);
423
+ /* Apply option string to the filter only. */
424
+ __LA_DECL int archive_read_set_filter_options(struct archive *_a,
425
+ const char *s);
426
+ /* Apply option string to both the format and the filter. */
427
+ __LA_DECL int archive_read_set_options(struct archive *_a,
428
+ const char *s);
429
+
430
+ /*-
431
+ * Convenience function to recreate the current entry (whose header
432
+ * has just been read) on disk.
433
+ *
434
+ * This does quite a bit more than just copy data to disk. It also:
435
+ * - Creates intermediate directories as required.
436
+ * - Manages directory permissions: non-writable directories will
437
+ * be initially created with write permission enabled; when the
438
+ * archive is closed, dir permissions are edited to the values specified
439
+ * in the archive.
440
+ * - Checks hardlinks: hardlinks will not be extracted unless the
441
+ * linked-to file was also extracted within the same session. (TODO)
442
+ */
443
+
444
+ /* The "flags" argument selects optional behavior, 'OR' the flags you want. */
445
+
446
+ /* Default: Do not try to set owner/group. */
447
+ #define ARCHIVE_EXTRACT_OWNER (0x0001)
448
+ /* Default: Do obey umask, do not restore SUID/SGID/SVTX bits. */
449
+ #define ARCHIVE_EXTRACT_PERM (0x0002)
450
+ /* Default: Do not restore mtime/atime. */
451
+ #define ARCHIVE_EXTRACT_TIME (0x0004)
452
+ /* Default: Replace existing files. */
453
+ #define ARCHIVE_EXTRACT_NO_OVERWRITE (0x0008)
454
+ /* Default: Try create first, unlink only if create fails with EEXIST. */
455
+ #define ARCHIVE_EXTRACT_UNLINK (0x0010)
456
+ /* Default: Do not restore ACLs. */
457
+ #define ARCHIVE_EXTRACT_ACL (0x0020)
458
+ /* Default: Do not restore fflags. */
459
+ #define ARCHIVE_EXTRACT_FFLAGS (0x0040)
460
+ /* Default: Do not restore xattrs. */
461
+ #define ARCHIVE_EXTRACT_XATTR (0x0080)
462
+ /* Default: Do not try to guard against extracts redirected by symlinks. */
463
+ /* Note: With ARCHIVE_EXTRACT_UNLINK, will remove any intermediate symlink. */
464
+ #define ARCHIVE_EXTRACT_SECURE_SYMLINKS (0x0100)
465
+ /* Default: Do not reject entries with '..' as path elements. */
466
+ #define ARCHIVE_EXTRACT_SECURE_NODOTDOT (0x0200)
467
+ /* Default: Create parent directories as needed. */
468
+ #define ARCHIVE_EXTRACT_NO_AUTODIR (0x0400)
469
+ /* Default: Overwrite files, even if one on disk is newer. */
470
+ #define ARCHIVE_EXTRACT_NO_OVERWRITE_NEWER (0x0800)
471
+ /* Detect blocks of 0 and write holes instead. */
472
+ #define ARCHIVE_EXTRACT_SPARSE (0x1000)
473
+
474
+ __LA_DECL int archive_read_extract(struct archive *, struct archive_entry *,
475
+ int flags);
476
+ __LA_DECL int archive_read_extract2(struct archive *, struct archive_entry *,
477
+ struct archive * /* dest */);
478
+ __LA_DECL void archive_read_extract_set_progress_callback(struct archive *,
479
+ void (*_progress_func)(void *), void *_user_data);
480
+
481
+ /* Record the dev/ino of a file that will not be written. This is
482
+ * generally set to the dev/ino of the archive being read. */
483
+ __LA_DECL void archive_read_extract_set_skip_file(struct archive *,
484
+ dev_t, ino_t);
485
+
486
+ /* Close the file and release most resources. */
487
+ __LA_DECL int archive_read_close(struct archive *);
488
+ /* Release all resources and destroy the object. */
489
+ /* Note that archive_read_finish will call archive_read_close for you. */
490
+ #if ARCHIVE_VERSION_NUMBER < 2000000
491
+ /* Erroneously declared to return void in libarchive 1.x */
492
+ __LA_DECL void archive_read_finish(struct archive *);
493
+ #else
494
+ __LA_DECL int archive_read_finish(struct archive *);
495
+ #endif
496
+
497
+ /*-
498
+ * To create an archive:
499
+ * 1) Ask archive_write_new for a archive writer object.
500
+ * 2) Set any global properties. In particular, you should set
501
+ * the compression and format to use.
502
+ * 3) Call archive_write_open to open the file (most people
503
+ * will use archive_write_open_file or archive_write_open_fd,
504
+ * which provide convenient canned I/O callbacks for you).
505
+ * 4) For each entry:
506
+ * - construct an appropriate struct archive_entry structure
507
+ * - archive_write_header to write the header
508
+ * - archive_write_data to write the entry data
509
+ * 5) archive_write_close to close the output
510
+ * 6) archive_write_finish to cleanup the writer and release resources
511
+ */
512
+ __LA_DECL struct archive *archive_write_new(void);
513
+ __LA_DECL int archive_write_set_bytes_per_block(struct archive *,
514
+ int bytes_per_block);
515
+ __LA_DECL int archive_write_get_bytes_per_block(struct archive *);
516
+ /* XXX This is badly misnamed; suggestions appreciated. XXX */
517
+ __LA_DECL int archive_write_set_bytes_in_last_block(struct archive *,
518
+ int bytes_in_last_block);
519
+ __LA_DECL int archive_write_get_bytes_in_last_block(struct archive *);
520
+
521
+ /* The dev/ino of a file that won't be archived. This is used
522
+ * to avoid recursively adding an archive to itself. */
523
+ __LA_DECL int archive_write_set_skip_file(struct archive *, dev_t, ino_t);
524
+
525
+ __LA_DECL int archive_write_set_compression_bzip2(struct archive *);
526
+ __LA_DECL int archive_write_set_compression_compress(struct archive *);
527
+ __LA_DECL int archive_write_set_compression_gzip(struct archive *);
528
+ __LA_DECL int archive_write_set_compression_lzma(struct archive *);
529
+ __LA_DECL int archive_write_set_compression_none(struct archive *);
530
+ __LA_DECL int archive_write_set_compression_program(struct archive *,
531
+ const char *cmd);
532
+ __LA_DECL int archive_write_set_compression_xz(struct archive *);
533
+ /* A convenience function to set the format based on the code or name. */
534
+ __LA_DECL int archive_write_set_format(struct archive *, int format_code);
535
+ __LA_DECL int archive_write_set_format_by_name(struct archive *,
536
+ const char *name);
537
+ /* To minimize link pollution, use one or more of the following. */
538
+ __LA_DECL int archive_write_set_format_ar_bsd(struct archive *);
539
+ __LA_DECL int archive_write_set_format_ar_svr4(struct archive *);
540
+ __LA_DECL int archive_write_set_format_cpio(struct archive *);
541
+ __LA_DECL int archive_write_set_format_cpio_newc(struct archive *);
542
+ __LA_DECL int archive_write_set_format_mtree(struct archive *);
543
+ /* TODO: int archive_write_set_format_old_tar(struct archive *); */
544
+ __LA_DECL int archive_write_set_format_pax(struct archive *);
545
+ __LA_DECL int archive_write_set_format_pax_restricted(struct archive *);
546
+ __LA_DECL int archive_write_set_format_shar(struct archive *);
547
+ __LA_DECL int archive_write_set_format_shar_dump(struct archive *);
548
+ __LA_DECL int archive_write_set_format_ustar(struct archive *);
549
+ __LA_DECL int archive_write_set_format_zip(struct archive *);
550
+ __LA_DECL int archive_write_open(struct archive *, void *,
551
+ archive_open_callback *, archive_write_callback *,
552
+ archive_close_callback *);
553
+ __LA_DECL int archive_write_open_fd(struct archive *, int _fd);
554
+ __LA_DECL int archive_write_open_filename(struct archive *, const char *_file);
555
+ /* A deprecated synonym for archive_write_open_filename() */
556
+ __LA_DECL int archive_write_open_file(struct archive *, const char *_file);
557
+ __LA_DECL int archive_write_open_FILE(struct archive *, FILE *);
558
+ /* _buffSize is the size of the buffer, _used refers to a variable that
559
+ * will be updated after each write into the buffer. */
560
+ __LA_DECL int archive_write_open_memory(struct archive *,
561
+ void *_buffer, size_t _buffSize, size_t *_used);
562
+
563
+ /*
564
+ * Note that the library will truncate writes beyond the size provided
565
+ * to archive_write_header or pad if the provided data is short.
566
+ */
567
+ __LA_DECL int archive_write_header(struct archive *,
568
+ struct archive_entry *);
569
+ #if ARCHIVE_VERSION_NUMBER < 2000000
570
+ /* This was erroneously declared to return "int" in libarchive 1.x. */
571
+ __LA_DECL int archive_write_data(struct archive *,
572
+ const void *, size_t);
573
+ #else
574
+ /* Libarchive 2.0 and later return ssize_t here. */
575
+ __LA_DECL __LA_SSIZE_T archive_write_data(struct archive *,
576
+ const void *, size_t);
577
+ #endif
578
+
579
+ #if ARCHIVE_VERSION_NUMBER < 3000000
580
+ /* Libarchive 1.x and 2.x use off_t for the argument, but that's not
581
+ * stable on Linux. */
582
+ __LA_DECL __LA_SSIZE_T archive_write_data_block(struct archive *,
583
+ const void *, size_t, off_t);
584
+ #else
585
+ /* Libarchive 3.0 uses explicit int64_t to ensure consistent 64-bit support. */
586
+ __LA_DECL __LA_SSIZE_T archive_write_data_block(struct archive *,
587
+ const void *, size_t, __LA_INT64_T);
588
+ #endif
589
+ __LA_DECL int archive_write_finish_entry(struct archive *);
590
+ __LA_DECL int archive_write_close(struct archive *);
591
+ #if ARCHIVE_VERSION_NUMBER < 2000000
592
+ /* Return value was incorrect in libarchive 1.x. */
593
+ __LA_DECL void archive_write_finish(struct archive *);
594
+ #else
595
+ /* Libarchive 2.x and later returns an error if this fails. */
596
+ /* It can fail if the archive wasn't already closed, in which case
597
+ * archive_write_finish() will implicitly call archive_write_close(). */
598
+ __LA_DECL int archive_write_finish(struct archive *);
599
+ #endif
600
+
601
+ /*
602
+ * Set write options.
603
+ */
604
+ /* Apply option string to the format only. */
605
+ __LA_DECL int archive_write_set_format_options(struct archive *_a,
606
+ const char *s);
607
+ /* Apply option string to the compressor only. */
608
+ __LA_DECL int archive_write_set_compressor_options(struct archive *_a,
609
+ const char *s);
610
+ /* Apply option string to both the format and the compressor. */
611
+ __LA_DECL int archive_write_set_options(struct archive *_a,
612
+ const char *s);
613
+
614
+
615
+ /*-
616
+ * ARCHIVE_WRITE_DISK API
617
+ *
618
+ * To create objects on disk:
619
+ * 1) Ask archive_write_disk_new for a new archive_write_disk object.
620
+ * 2) Set any global properties. In particular, you probably
621
+ * want to set the options.
622
+ * 3) For each entry:
623
+ * - construct an appropriate struct archive_entry structure
624
+ * - archive_write_header to create the file/dir/etc on disk
625
+ * - archive_write_data to write the entry data
626
+ * 4) archive_write_finish to cleanup the writer and release resources
627
+ *
628
+ * In particular, you can use this in conjunction with archive_read()
629
+ * to pull entries out of an archive and create them on disk.
630
+ */
631
+ __LA_DECL struct archive *archive_write_disk_new(void);
632
+ /* This file will not be overwritten. */
633
+ __LA_DECL int archive_write_disk_set_skip_file(struct archive *,
634
+ dev_t, ino_t);
635
+ /* Set flags to control how the next item gets created.
636
+ * This accepts a bitmask of ARCHIVE_EXTRACT_XXX flags defined above. */
637
+ __LA_DECL int archive_write_disk_set_options(struct archive *,
638
+ int flags);
639
+ /*
640
+ * The lookup functions are given uname/uid (or gname/gid) pairs and
641
+ * return a uid (gid) suitable for this system. These are used for
642
+ * restoring ownership and for setting ACLs. The default functions
643
+ * are naive, they just return the uid/gid. These are small, so reasonable
644
+ * for applications that don't need to preserve ownership; they
645
+ * are probably also appropriate for applications that are doing
646
+ * same-system backup and restore.
647
+ */
648
+ /*
649
+ * The "standard" lookup functions use common system calls to lookup
650
+ * the uname/gname, falling back to the uid/gid if the names can't be
651
+ * found. They cache lookups and are reasonably fast, but can be very
652
+ * large, so they are not used unless you ask for them. In
653
+ * particular, these match the specifications of POSIX "pax" and old
654
+ * POSIX "tar".
655
+ */
656
+ __LA_DECL int archive_write_disk_set_standard_lookup(struct archive *);
657
+ /*
658
+ * If neither the default (naive) nor the standard (big) functions suit
659
+ * your needs, you can write your own and register them. Be sure to
660
+ * include a cleanup function if you have allocated private data.
661
+ */
662
+ __LA_DECL int archive_write_disk_set_group_lookup(struct archive *,
663
+ void * /* private_data */,
664
+ __LA_GID_T (*)(void *, const char *, __LA_GID_T),
665
+ void (* /* cleanup */)(void *));
666
+ __LA_DECL int archive_write_disk_set_user_lookup(struct archive *,
667
+ void * /* private_data */,
668
+ __LA_UID_T (*)(void *, const char *, __LA_UID_T),
669
+ void (* /* cleanup */)(void *));
670
+
671
+ /*
672
+ * ARCHIVE_READ_DISK API
673
+ *
674
+ * This is still evolving and somewhat experimental.
675
+ */
676
+ __LA_DECL struct archive *archive_read_disk_new(void);
677
+ /* The names for symlink modes here correspond to an old BSD
678
+ * command-line argument convention: -L, -P, -H */
679
+ /* Follow all symlinks. */
680
+ __LA_DECL int archive_read_disk_set_symlink_logical(struct archive *);
681
+ /* Follow no symlinks. */
682
+ __LA_DECL int archive_read_disk_set_symlink_physical(struct archive *);
683
+ /* Follow symlink initially, then not. */
684
+ __LA_DECL int archive_read_disk_set_symlink_hybrid(struct archive *);
685
+ /* TODO: Handle Linux stat32/stat64 ugliness. <sigh> */
686
+ __LA_DECL int archive_read_disk_entry_from_file(struct archive *,
687
+ struct archive_entry *, int /* fd */, const struct stat *);
688
+ /* Look up gname for gid or uname for uid. */
689
+ /* Default implementations are very, very stupid. */
690
+ __LA_DECL const char *archive_read_disk_gname(struct archive *, __LA_GID_T);
691
+ __LA_DECL const char *archive_read_disk_uname(struct archive *, __LA_UID_T);
692
+ /* "Standard" implementation uses getpwuid_r, getgrgid_r and caches the
693
+ * results for performance. */
694
+ __LA_DECL int archive_read_disk_set_standard_lookup(struct archive *);
695
+ /* You can install your own lookups if you like. */
696
+ __LA_DECL int archive_read_disk_set_gname_lookup(struct archive *,
697
+ void * /* private_data */,
698
+ const char *(* /* lookup_fn */)(void *, __LA_GID_T),
699
+ void (* /* cleanup_fn */)(void *));
700
+ __LA_DECL int archive_read_disk_set_uname_lookup(struct archive *,
701
+ void * /* private_data */,
702
+ const char *(* /* lookup_fn */)(void *, __LA_UID_T),
703
+ void (* /* cleanup_fn */)(void *));
704
+
705
+ /*
706
+ * Accessor functions to read/set various information in
707
+ * the struct archive object:
708
+ */
709
+ /* Bytes written after compression or read before decompression. */
710
+ __LA_DECL __LA_INT64_T archive_position_compressed(struct archive *);
711
+ /* Bytes written to compressor or read from decompressor. */
712
+ __LA_DECL __LA_INT64_T archive_position_uncompressed(struct archive *);
713
+
714
+ __LA_DECL const char *archive_compression_name(struct archive *);
715
+ __LA_DECL int archive_compression(struct archive *);
716
+ __LA_DECL int archive_errno(struct archive *);
717
+ __LA_DECL const char *archive_error_string(struct archive *);
718
+ __LA_DECL const char *archive_format_name(struct archive *);
719
+ __LA_DECL int archive_format(struct archive *);
720
+ __LA_DECL void archive_clear_error(struct archive *);
721
+ __LA_DECL void archive_set_error(struct archive *, int _err,
722
+ const char *fmt, ...);
723
+ __LA_DECL void archive_copy_error(struct archive *dest,
724
+ struct archive *src);
725
+ __LA_DECL int archive_file_count(struct archive *);
726
+
727
+ #ifdef __cplusplus
728
+ }
729
+ #endif
730
+
731
+ /* These are meaningless outside of this header. */
732
+ #undef __LA_DECL
733
+ #undef __LA_GID_T
734
+ #undef __LA_UID_T
735
+
736
+ /* These need to remain defined because they're used in the
737
+ * callback type definitions. XXX Fix this. This is ugly. XXX */
738
+ /* #undef __LA_INT64_T */
739
+ /* #undef __LA_SSIZE_T */
740
+
741
+ #endif /* !ARCHIVE_H_INCLUDED */