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.
- data/ext/Makefile +6 -0
- data/ext/extconf.rb +61 -0
- data/ext/libarchive-0.1.1/COPYING.libarchive +60 -0
- data/ext/libarchive-0.1.1/LICENSE.libbzip2 +42 -0
- data/ext/libarchive-0.1.1/README.txt +143 -0
- data/ext/libarchive-0.1.1/ext/Makefile.in +0 -0
- data/ext/libarchive-0.1.1/ext/archive_read_support_compression.c +31 -0
- data/ext/libarchive-0.1.1/ext/archive_read_support_compression.h +6 -0
- data/ext/libarchive-0.1.1/ext/archive_read_support_format.c +32 -0
- data/ext/libarchive-0.1.1/ext/archive_read_support_format.h +6 -0
- data/ext/libarchive-0.1.1/ext/archive_write_open_rb_str.c +29 -0
- data/ext/libarchive-0.1.1/ext/archive_write_open_rb_str.h +6 -0
- data/ext/libarchive-0.1.1/ext/archive_write_set_compression.c +32 -0
- data/ext/libarchive-0.1.1/ext/archive_write_set_compression.h +6 -0
- data/ext/libarchive-0.1.1/ext/config.h.in +22 -0
- data/ext/libarchive-0.1.1/ext/configure +3904 -0
- data/ext/libarchive-0.1.1/ext/configure.in +11 -0
- data/ext/libarchive-0.1.1/ext/depend +19 -0
- data/ext/libarchive-0.1.1/ext/extconf.rb +6 -0
- data/ext/libarchive-0.1.1/ext/install-sh +250 -0
- data/ext/libarchive-0.1.1/ext/libarchive.c +89 -0
- data/ext/libarchive-0.1.1/ext/libarchive_archive.c +84 -0
- data/ext/libarchive-0.1.1/ext/libarchive_entry.c +1015 -0
- data/ext/libarchive-0.1.1/ext/libarchive_internal.h +155 -0
- data/ext/libarchive-0.1.1/ext/libarchive_reader.c +328 -0
- data/ext/libarchive-0.1.1/ext/libarchive_win32.h +52 -0
- data/ext/libarchive-0.1.1/ext/libarchive_writer.c +246 -0
- data/ext/libarchive-0.1.1/libarchive.c +1762 -0
- data/ext/libarchive-2.8.4/Makefile.in +7076 -0
- data/ext/libarchive-2.8.4/build/autoconf/check_stdcall_func.m4 +51 -0
- data/ext/libarchive-2.8.4/build/autoconf/compile +143 -0
- data/ext/libarchive-2.8.4/build/autoconf/config.guess +1502 -0
- data/ext/libarchive-2.8.4/build/autoconf/config.sub +1708 -0
- data/ext/libarchive-2.8.4/build/autoconf/depcomp +630 -0
- data/ext/libarchive-2.8.4/build/autoconf/install-sh +291 -0
- data/ext/libarchive-2.8.4/build/autoconf/la_uid_t.m4 +20 -0
- data/ext/libarchive-2.8.4/build/autoconf/ltmain.sh +8406 -0
- data/ext/libarchive-2.8.4/build/autoconf/missing +376 -0
- data/ext/libarchive-2.8.4/build/pkgconfig/libarchive.pc.in +10 -0
- data/ext/libarchive-2.8.4/config.h.in +772 -0
- data/ext/libarchive-2.8.4/configure +17916 -0
- data/ext/libarchive-2.8.4/libarchive/archive.h +741 -0
- data/ext/libarchive-2.8.4/libarchive/archive_check_magic.c +134 -0
- data/ext/libarchive-2.8.4/libarchive/archive_crc32.h +66 -0
- data/ext/libarchive-2.8.4/libarchive/archive_endian.h +162 -0
- data/ext/libarchive-2.8.4/libarchive/archive_entry.c +2202 -0
- data/ext/libarchive-2.8.4/libarchive/archive_entry.h +524 -0
- data/ext/libarchive-2.8.4/libarchive/archive_entry_copy_bhfi.c +74 -0
- data/ext/libarchive-2.8.4/libarchive/archive_entry_copy_stat.c +77 -0
- data/ext/libarchive-2.8.4/libarchive/archive_entry_link_resolver.c +405 -0
- data/ext/libarchive-2.8.4/libarchive/archive_entry_private.h +184 -0
- data/ext/libarchive-2.8.4/libarchive/archive_entry_stat.c +118 -0
- data/ext/libarchive-2.8.4/libarchive/archive_entry_strmode.c +87 -0
- data/ext/libarchive-2.8.4/libarchive/archive_entry_xattr.c +158 -0
- data/ext/libarchive-2.8.4/libarchive/archive_hash.h +281 -0
- data/ext/libarchive-2.8.4/libarchive/archive_platform.h +165 -0
- data/ext/libarchive-2.8.4/libarchive/archive_private.h +124 -0
- data/ext/libarchive-2.8.4/libarchive/archive_read.c +1249 -0
- data/ext/libarchive-2.8.4/libarchive/archive_read_data_into_fd.c +93 -0
- data/ext/libarchive-2.8.4/libarchive/archive_read_disk.c +198 -0
- data/ext/libarchive-2.8.4/libarchive/archive_read_disk_entry_from_file.c +570 -0
- data/ext/libarchive-2.8.4/libarchive/archive_read_disk_private.h +62 -0
- data/ext/libarchive-2.8.4/libarchive/archive_read_disk_set_standard_lookup.c +303 -0
- data/ext/libarchive-2.8.4/libarchive/archive_read_extract.c +182 -0
- data/ext/libarchive-2.8.4/libarchive/archive_read_open_fd.c +190 -0
- data/ext/libarchive-2.8.4/libarchive/archive_read_open_file.c +165 -0
- data/ext/libarchive-2.8.4/libarchive/archive_read_open_filename.c +272 -0
- data/ext/libarchive-2.8.4/libarchive/archive_read_open_memory.c +156 -0
- data/ext/libarchive-2.8.4/libarchive/archive_read_private.h +199 -0
- data/ext/libarchive-2.8.4/libarchive/archive_read_support_compression_all.c +60 -0
- data/ext/libarchive-2.8.4/libarchive/archive_read_support_compression_bzip2.c +353 -0
- data/ext/libarchive-2.8.4/libarchive/archive_read_support_compression_compress.c +444 -0
- data/ext/libarchive-2.8.4/libarchive/archive_read_support_compression_gzip.c +465 -0
- data/ext/libarchive-2.8.4/libarchive/archive_read_support_compression_none.c +40 -0
- data/ext/libarchive-2.8.4/libarchive/archive_read_support_compression_program.c +459 -0
- data/ext/libarchive-2.8.4/libarchive/archive_read_support_compression_rpm.c +287 -0
- data/ext/libarchive-2.8.4/libarchive/archive_read_support_compression_uu.c +627 -0
- data/ext/libarchive-2.8.4/libarchive/archive_read_support_compression_xz.c +708 -0
- data/ext/libarchive-2.8.4/libarchive/archive_read_support_format_all.c +43 -0
- data/ext/libarchive-2.8.4/libarchive/archive_read_support_format_ar.c +584 -0
- data/ext/libarchive-2.8.4/libarchive/archive_read_support_format_cpio.c +777 -0
- data/ext/libarchive-2.8.4/libarchive/archive_read_support_format_empty.c +93 -0
- data/ext/libarchive-2.8.4/libarchive/archive_read_support_format_iso9660.c +2830 -0
- data/ext/libarchive-2.8.4/libarchive/archive_read_support_format_mtree.c +1304 -0
- data/ext/libarchive-2.8.4/libarchive/archive_read_support_format_raw.c +185 -0
- data/ext/libarchive-2.8.4/libarchive/archive_read_support_format_tar.c +2418 -0
- data/ext/libarchive-2.8.4/libarchive/archive_read_support_format_xar.c +3151 -0
- data/ext/libarchive-2.8.4/libarchive/archive_read_support_format_zip.c +903 -0
- data/ext/libarchive-2.8.4/libarchive/archive_string.c +453 -0
- data/ext/libarchive-2.8.4/libarchive/archive_string.h +148 -0
- data/ext/libarchive-2.8.4/libarchive/archive_string_sprintf.c +164 -0
- data/ext/libarchive-2.8.4/libarchive/archive_util.c +391 -0
- data/ext/libarchive-2.8.4/libarchive/archive_virtual.c +94 -0
- data/ext/libarchive-2.8.4/libarchive/archive_windows.c +1236 -0
- data/ext/libarchive-2.8.4/libarchive/archive_windows.h +347 -0
- data/ext/libarchive-2.8.4/libarchive/archive_write.c +466 -0
- data/ext/libarchive-2.8.4/libarchive/archive_write_disk.c +2628 -0
- data/ext/libarchive-2.8.4/libarchive/archive_write_disk_private.h +38 -0
- data/ext/libarchive-2.8.4/libarchive/archive_write_disk_set_standard_lookup.c +262 -0
- data/ext/libarchive-2.8.4/libarchive/archive_write_open_fd.c +141 -0
- data/ext/libarchive-2.8.4/libarchive/archive_write_open_file.c +105 -0
- data/ext/libarchive-2.8.4/libarchive/archive_write_open_filename.c +162 -0
- data/ext/libarchive-2.8.4/libarchive/archive_write_open_memory.c +126 -0
- data/ext/libarchive-2.8.4/libarchive/archive_write_private.h +122 -0
- data/ext/libarchive-2.8.4/libarchive/archive_write_set_compression_bzip2.c +408 -0
- data/ext/libarchive-2.8.4/libarchive/archive_write_set_compression_compress.c +492 -0
- data/ext/libarchive-2.8.4/libarchive/archive_write_set_compression_gzip.c +477 -0
- data/ext/libarchive-2.8.4/libarchive/archive_write_set_compression_none.c +257 -0
- data/ext/libarchive-2.8.4/libarchive/archive_write_set_compression_program.c +347 -0
- data/ext/libarchive-2.8.4/libarchive/archive_write_set_compression_xz.c +438 -0
- data/ext/libarchive-2.8.4/libarchive/archive_write_set_format.c +72 -0
- data/ext/libarchive-2.8.4/libarchive/archive_write_set_format_ar.c +550 -0
- data/ext/libarchive-2.8.4/libarchive/archive_write_set_format_by_name.c +76 -0
- data/ext/libarchive-2.8.4/libarchive/archive_write_set_format_cpio.c +344 -0
- data/ext/libarchive-2.8.4/libarchive/archive_write_set_format_cpio_newc.c +295 -0
- data/ext/libarchive-2.8.4/libarchive/archive_write_set_format_mtree.c +1050 -0
- data/ext/libarchive-2.8.4/libarchive/archive_write_set_format_pax.c +1386 -0
- data/ext/libarchive-2.8.4/libarchive/archive_write_set_format_shar.c +626 -0
- data/ext/libarchive-2.8.4/libarchive/archive_write_set_format_ustar.c +587 -0
- data/ext/libarchive-2.8.4/libarchive/archive_write_set_format_zip.c +667 -0
- data/ext/libarchive-2.8.4/libarchive/config_freebsd.h +154 -0
- data/ext/libarchive-2.8.4/libarchive/filter_fork.c +161 -0
- data/ext/libarchive-2.8.4/libarchive/filter_fork.h +41 -0
- data/ext/libarchive-2.8.4/libarchive/filter_fork_windows.c +113 -0
- data/ext/libarchive-static-makefile +80 -0
- data/ext/libarchive-static-wrapper-makefile +22 -0
- data/ext/zlib-1.2.5/Makefile.in +257 -0
- data/ext/zlib-1.2.5/adler32.c +169 -0
- data/ext/zlib-1.2.5/compress.c +80 -0
- data/ext/zlib-1.2.5/configure +596 -0
- data/ext/zlib-1.2.5/crc32.c +442 -0
- data/ext/zlib-1.2.5/crc32.h +441 -0
- data/ext/zlib-1.2.5/deflate.c +1834 -0
- data/ext/zlib-1.2.5/deflate.h +342 -0
- data/ext/zlib-1.2.5/example.c +565 -0
- data/ext/zlib-1.2.5/gzclose.c +25 -0
- data/ext/zlib-1.2.5/gzguts.h +132 -0
- data/ext/zlib-1.2.5/gzlib.c +537 -0
- data/ext/zlib-1.2.5/gzread.c +653 -0
- data/ext/zlib-1.2.5/gzwrite.c +531 -0
- data/ext/zlib-1.2.5/infback.c +632 -0
- data/ext/zlib-1.2.5/inffast.c +340 -0
- data/ext/zlib-1.2.5/inffast.h +11 -0
- data/ext/zlib-1.2.5/inffixed.h +94 -0
- data/ext/zlib-1.2.5/inflate.c +1480 -0
- data/ext/zlib-1.2.5/inflate.h +122 -0
- data/ext/zlib-1.2.5/inftrees.c +330 -0
- data/ext/zlib-1.2.5/inftrees.h +62 -0
- data/ext/zlib-1.2.5/minigzip.c +440 -0
- data/ext/zlib-1.2.5/trees.c +1244 -0
- data/ext/zlib-1.2.5/trees.h +128 -0
- data/ext/zlib-1.2.5/uncompr.c +59 -0
- data/ext/zlib-1.2.5/zconf.h +428 -0
- data/ext/zlib-1.2.5/zlib.h +1613 -0
- data/ext/zlib-1.2.5/zutil.c +318 -0
- data/ext/zlib-1.2.5/zutil.h +274 -0
- metadata +211 -0
|
@@ -0,0 +1,164 @@
|
|
|
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
|
+
|
|
26
|
+
#include "archive_platform.h"
|
|
27
|
+
__FBSDID("$FreeBSD: head/lib/libarchive/archive_string_sprintf.c 189435 2009-03-06 05:14:55Z kientzle $");
|
|
28
|
+
|
|
29
|
+
/*
|
|
30
|
+
* The use of printf()-family functions can be troublesome
|
|
31
|
+
* for space-constrained applications. In addition, correctly
|
|
32
|
+
* implementing this function in terms of vsnprintf() requires
|
|
33
|
+
* two calls (one to determine the size, another to format the
|
|
34
|
+
* result), which in turn requires duplicating the argument list
|
|
35
|
+
* using va_copy, which isn't yet universally available. <sigh>
|
|
36
|
+
*
|
|
37
|
+
* So, I've implemented a bare minimum of printf()-like capability
|
|
38
|
+
* here. This is only used to format error messages, so doesn't
|
|
39
|
+
* require any floating-point support or field-width handling.
|
|
40
|
+
*/
|
|
41
|
+
|
|
42
|
+
#include <stdio.h>
|
|
43
|
+
|
|
44
|
+
#include "archive_string.h"
|
|
45
|
+
#include "archive_private.h"
|
|
46
|
+
|
|
47
|
+
/*
|
|
48
|
+
* Utility functions to format signed/unsigned integers and append
|
|
49
|
+
* them to an archive_string.
|
|
50
|
+
*/
|
|
51
|
+
static void
|
|
52
|
+
append_uint(struct archive_string *as, uintmax_t d, unsigned base)
|
|
53
|
+
{
|
|
54
|
+
static const char *digits = "0123456789abcdef";
|
|
55
|
+
if (d >= base)
|
|
56
|
+
append_uint(as, d/base, base);
|
|
57
|
+
archive_strappend_char(as, digits[d % base]);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
static void
|
|
61
|
+
append_int(struct archive_string *as, intmax_t d, unsigned base)
|
|
62
|
+
{
|
|
63
|
+
if (d < 0) {
|
|
64
|
+
archive_strappend_char(as, '-');
|
|
65
|
+
d = -d;
|
|
66
|
+
}
|
|
67
|
+
append_uint(as, d, base);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
void
|
|
72
|
+
__archive_string_sprintf(struct archive_string *as, const char *fmt, ...)
|
|
73
|
+
{
|
|
74
|
+
va_list ap;
|
|
75
|
+
|
|
76
|
+
va_start(ap, fmt);
|
|
77
|
+
archive_string_vsprintf(as, fmt, ap);
|
|
78
|
+
va_end(ap);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/*
|
|
82
|
+
* Like 'vsprintf', but ensures the target is big enough, resizing if
|
|
83
|
+
* necessary.
|
|
84
|
+
*/
|
|
85
|
+
void
|
|
86
|
+
__archive_string_vsprintf(struct archive_string *as, const char *fmt,
|
|
87
|
+
va_list ap)
|
|
88
|
+
{
|
|
89
|
+
char long_flag;
|
|
90
|
+
intmax_t s; /* Signed integer temp. */
|
|
91
|
+
uintmax_t u; /* Unsigned integer temp. */
|
|
92
|
+
const char *p, *p2;
|
|
93
|
+
|
|
94
|
+
if (__archive_string_ensure(as, 64) == NULL)
|
|
95
|
+
__archive_errx(1, "Out of memory");
|
|
96
|
+
|
|
97
|
+
if (fmt == NULL) {
|
|
98
|
+
as->s[0] = 0;
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
for (p = fmt; *p != '\0'; p++) {
|
|
103
|
+
const char *saved_p = p;
|
|
104
|
+
|
|
105
|
+
if (*p != '%') {
|
|
106
|
+
archive_strappend_char(as, *p);
|
|
107
|
+
continue;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
p++;
|
|
111
|
+
|
|
112
|
+
long_flag = '\0';
|
|
113
|
+
switch(*p) {
|
|
114
|
+
case 'j':
|
|
115
|
+
long_flag = 'j';
|
|
116
|
+
p++;
|
|
117
|
+
break;
|
|
118
|
+
case 'l':
|
|
119
|
+
long_flag = 'l';
|
|
120
|
+
p++;
|
|
121
|
+
break;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
switch (*p) {
|
|
125
|
+
case '%':
|
|
126
|
+
__archive_strappend_char(as, '%');
|
|
127
|
+
break;
|
|
128
|
+
case 'c':
|
|
129
|
+
s = va_arg(ap, int);
|
|
130
|
+
__archive_strappend_char(as, s);
|
|
131
|
+
break;
|
|
132
|
+
case 'd':
|
|
133
|
+
switch(long_flag) {
|
|
134
|
+
case 'j': s = va_arg(ap, intmax_t); break;
|
|
135
|
+
case 'l': s = va_arg(ap, long); break;
|
|
136
|
+
default: s = va_arg(ap, int); break;
|
|
137
|
+
}
|
|
138
|
+
append_int(as, s, 10);
|
|
139
|
+
break;
|
|
140
|
+
case 's':
|
|
141
|
+
p2 = va_arg(ap, char *);
|
|
142
|
+
archive_strcat(as, p2);
|
|
143
|
+
break;
|
|
144
|
+
case 'o': case 'u': case 'x': case 'X':
|
|
145
|
+
/* Common handling for unsigned integer formats. */
|
|
146
|
+
switch(long_flag) {
|
|
147
|
+
case 'j': u = va_arg(ap, uintmax_t); break;
|
|
148
|
+
case 'l': u = va_arg(ap, unsigned long); break;
|
|
149
|
+
default: u = va_arg(ap, unsigned int); break;
|
|
150
|
+
}
|
|
151
|
+
/* Format it in the correct base. */
|
|
152
|
+
switch (*p) {
|
|
153
|
+
case 'o': append_uint(as, u, 8); break;
|
|
154
|
+
case 'u': append_uint(as, u, 10); break;
|
|
155
|
+
default: append_uint(as, u, 16); break;
|
|
156
|
+
}
|
|
157
|
+
break;
|
|
158
|
+
default:
|
|
159
|
+
/* Rewind and print the initial '%' literally. */
|
|
160
|
+
p = saved_p;
|
|
161
|
+
archive_strappend_char(as, *p);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
@@ -0,0 +1,391 @@
|
|
|
1
|
+
/*-
|
|
2
|
+
* Copyright (c) 2009 Michihiro NAKAJIMA
|
|
3
|
+
* Copyright (c) 2003-2007 Tim Kientzle
|
|
4
|
+
* All rights reserved.
|
|
5
|
+
*
|
|
6
|
+
* Redistribution and use in source and binary forms, with or without
|
|
7
|
+
* modification, are permitted provided that the following conditions
|
|
8
|
+
* are met:
|
|
9
|
+
* 1. Redistributions of source code must retain the above copyright
|
|
10
|
+
* notice, this list of conditions and the following disclaimer.
|
|
11
|
+
* 2. Redistributions in binary form must reproduce the above copyright
|
|
12
|
+
* notice, this list of conditions and the following disclaimer in the
|
|
13
|
+
* documentation and/or other materials provided with the distribution.
|
|
14
|
+
*
|
|
15
|
+
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
|
|
16
|
+
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
|
17
|
+
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
|
18
|
+
* IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
19
|
+
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
20
|
+
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
21
|
+
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
22
|
+
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
23
|
+
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
24
|
+
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
25
|
+
*/
|
|
26
|
+
|
|
27
|
+
#include "archive_platform.h"
|
|
28
|
+
__FBSDID("$FreeBSD: head/lib/libarchive/archive_util.c 201098 2009-12-28 02:58:14Z kientzle $");
|
|
29
|
+
|
|
30
|
+
#ifdef HAVE_SYS_TYPES_H
|
|
31
|
+
#include <sys/types.h>
|
|
32
|
+
#endif
|
|
33
|
+
#ifdef HAVE_STDLIB_H
|
|
34
|
+
#include <stdlib.h>
|
|
35
|
+
#endif
|
|
36
|
+
#ifdef HAVE_STRING_H
|
|
37
|
+
#include <string.h>
|
|
38
|
+
#endif
|
|
39
|
+
|
|
40
|
+
#include "archive.h"
|
|
41
|
+
#include "archive_private.h"
|
|
42
|
+
#include "archive_string.h"
|
|
43
|
+
|
|
44
|
+
#if ARCHIVE_VERSION_NUMBER < 3000000
|
|
45
|
+
/* These disappear in libarchive 3.0 */
|
|
46
|
+
/* Deprecated. */
|
|
47
|
+
int
|
|
48
|
+
archive_api_feature(void)
|
|
49
|
+
{
|
|
50
|
+
return (ARCHIVE_API_FEATURE);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/* Deprecated. */
|
|
54
|
+
int
|
|
55
|
+
archive_api_version(void)
|
|
56
|
+
{
|
|
57
|
+
return (ARCHIVE_API_VERSION);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/* Deprecated synonym for archive_version_number() */
|
|
61
|
+
int
|
|
62
|
+
archive_version_stamp(void)
|
|
63
|
+
{
|
|
64
|
+
return (archive_version_number());
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/* Deprecated synonym for archive_version_string() */
|
|
68
|
+
const char *
|
|
69
|
+
archive_version(void)
|
|
70
|
+
{
|
|
71
|
+
return (archive_version_string());
|
|
72
|
+
}
|
|
73
|
+
#endif
|
|
74
|
+
|
|
75
|
+
int
|
|
76
|
+
archive_version_number(void)
|
|
77
|
+
{
|
|
78
|
+
return (ARCHIVE_VERSION_NUMBER);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
const char *
|
|
82
|
+
archive_version_string(void)
|
|
83
|
+
{
|
|
84
|
+
return (ARCHIVE_VERSION_STRING);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
int
|
|
88
|
+
archive_errno(struct archive *a)
|
|
89
|
+
{
|
|
90
|
+
return (a->archive_error_number);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
const char *
|
|
94
|
+
archive_error_string(struct archive *a)
|
|
95
|
+
{
|
|
96
|
+
|
|
97
|
+
if (a->error != NULL && *a->error != '\0')
|
|
98
|
+
return (a->error);
|
|
99
|
+
else
|
|
100
|
+
return ("(Empty error message)");
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
int
|
|
104
|
+
archive_file_count(struct archive *a)
|
|
105
|
+
{
|
|
106
|
+
return (a->file_count);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
int
|
|
110
|
+
archive_format(struct archive *a)
|
|
111
|
+
{
|
|
112
|
+
return (a->archive_format);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
const char *
|
|
116
|
+
archive_format_name(struct archive *a)
|
|
117
|
+
{
|
|
118
|
+
return (a->archive_format_name);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
int
|
|
123
|
+
archive_compression(struct archive *a)
|
|
124
|
+
{
|
|
125
|
+
return (a->compression_code);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
const char *
|
|
129
|
+
archive_compression_name(struct archive *a)
|
|
130
|
+
{
|
|
131
|
+
return (a->compression_name);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
/*
|
|
136
|
+
* Return a count of the number of compressed bytes processed.
|
|
137
|
+
*/
|
|
138
|
+
int64_t
|
|
139
|
+
archive_position_compressed(struct archive *a)
|
|
140
|
+
{
|
|
141
|
+
return (a->raw_position);
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/*
|
|
145
|
+
* Return a count of the number of uncompressed bytes processed.
|
|
146
|
+
*/
|
|
147
|
+
int64_t
|
|
148
|
+
archive_position_uncompressed(struct archive *a)
|
|
149
|
+
{
|
|
150
|
+
return (a->file_position);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
void
|
|
154
|
+
archive_clear_error(struct archive *a)
|
|
155
|
+
{
|
|
156
|
+
archive_string_empty(&a->error_string);
|
|
157
|
+
a->error = NULL;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
void
|
|
161
|
+
archive_set_error(struct archive *a, int error_number, const char *fmt, ...)
|
|
162
|
+
{
|
|
163
|
+
va_list ap;
|
|
164
|
+
|
|
165
|
+
a->archive_error_number = error_number;
|
|
166
|
+
if (fmt == NULL) {
|
|
167
|
+
a->error = NULL;
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
va_start(ap, fmt);
|
|
172
|
+
archive_string_vsprintf(&(a->error_string), fmt, ap);
|
|
173
|
+
va_end(ap);
|
|
174
|
+
a->error = a->error_string.s;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
void
|
|
178
|
+
archive_copy_error(struct archive *dest, struct archive *src)
|
|
179
|
+
{
|
|
180
|
+
dest->archive_error_number = src->archive_error_number;
|
|
181
|
+
|
|
182
|
+
archive_string_copy(&dest->error_string, &src->error_string);
|
|
183
|
+
dest->error = dest->error_string.s;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
void
|
|
187
|
+
__archive_errx(int retvalue, const char *msg)
|
|
188
|
+
{
|
|
189
|
+
static const char *msg1 = "Fatal Internal Error in libarchive: ";
|
|
190
|
+
size_t s;
|
|
191
|
+
|
|
192
|
+
s = write(2, msg1, strlen(msg1));
|
|
193
|
+
(void)s; /* UNUSED */
|
|
194
|
+
s = write(2, msg, strlen(msg));
|
|
195
|
+
(void)s; /* UNUSED */
|
|
196
|
+
s = write(2, "\n", 1);
|
|
197
|
+
(void)s; /* UNUSED */
|
|
198
|
+
exit(retvalue);
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
/*
|
|
202
|
+
* Parse option strings
|
|
203
|
+
* Detail of option format.
|
|
204
|
+
* - The option can accept:
|
|
205
|
+
* "opt-name", "!opt-name", "opt-name=value".
|
|
206
|
+
*
|
|
207
|
+
* - The option entries are separated by comma.
|
|
208
|
+
* e.g "compression=9,opt=XXX,opt-b=ZZZ"
|
|
209
|
+
*
|
|
210
|
+
* - The name of option string consist of '-' and alphabet
|
|
211
|
+
* but character '-' cannot be used for the first character.
|
|
212
|
+
* (Regular expression is [a-z][-a-z]+)
|
|
213
|
+
*
|
|
214
|
+
* - For a specfic format/filter, using the format name with ':'.
|
|
215
|
+
* e.g "zip:compression=9"
|
|
216
|
+
* (This "compression=9" option entry is for "zip" format only)
|
|
217
|
+
*
|
|
218
|
+
* If another entries follow it, those are not for
|
|
219
|
+
* the specfic format/filter.
|
|
220
|
+
* e.g handle "zip:compression=9,opt=XXX,opt-b=ZZZ"
|
|
221
|
+
* "zip" format/filter handler will get "compression=9"
|
|
222
|
+
* all format/filter handler will get "opt=XXX"
|
|
223
|
+
* all format/filter handler will get "opt-b=ZZZ"
|
|
224
|
+
*
|
|
225
|
+
* - Whitespace and tab are bypassed.
|
|
226
|
+
*
|
|
227
|
+
*/
|
|
228
|
+
int
|
|
229
|
+
__archive_parse_options(const char *p, const char *fn, int keysize, char *key,
|
|
230
|
+
int valsize, char *val)
|
|
231
|
+
{
|
|
232
|
+
const char *p_org;
|
|
233
|
+
int apply;
|
|
234
|
+
int kidx, vidx;
|
|
235
|
+
int negative;
|
|
236
|
+
enum {
|
|
237
|
+
/* Requested for initialization. */
|
|
238
|
+
INIT,
|
|
239
|
+
/* Finding format/filter-name and option-name. */
|
|
240
|
+
F_BOTH,
|
|
241
|
+
/* Finding option-name only.
|
|
242
|
+
* (already detected format/filter-name) */
|
|
243
|
+
F_NAME,
|
|
244
|
+
/* Getting option-value. */
|
|
245
|
+
G_VALUE,
|
|
246
|
+
} state;
|
|
247
|
+
|
|
248
|
+
p_org = p;
|
|
249
|
+
state = INIT;
|
|
250
|
+
kidx = vidx = negative = 0;
|
|
251
|
+
apply = 1;
|
|
252
|
+
while (*p) {
|
|
253
|
+
switch (state) {
|
|
254
|
+
case INIT:
|
|
255
|
+
kidx = vidx = 0;
|
|
256
|
+
negative = 0;
|
|
257
|
+
apply = 1;
|
|
258
|
+
state = F_BOTH;
|
|
259
|
+
break;
|
|
260
|
+
case F_BOTH:
|
|
261
|
+
case F_NAME:
|
|
262
|
+
if ((*p >= 'a' && *p <= 'z') ||
|
|
263
|
+
(*p >= '0' && *p <= '9') || *p == '-') {
|
|
264
|
+
if (kidx == 0 && !(*p >= 'a' && *p <= 'z'))
|
|
265
|
+
/* Illegal sequence. */
|
|
266
|
+
return (-1);
|
|
267
|
+
if (kidx >= keysize -1)
|
|
268
|
+
/* Too many characters. */
|
|
269
|
+
return (-1);
|
|
270
|
+
key[kidx++] = *p++;
|
|
271
|
+
} else if (*p == '!') {
|
|
272
|
+
if (kidx != 0)
|
|
273
|
+
/* Illegal sequence. */
|
|
274
|
+
return (-1);
|
|
275
|
+
negative = 1;
|
|
276
|
+
++p;
|
|
277
|
+
} else if (*p == ',') {
|
|
278
|
+
if (kidx == 0)
|
|
279
|
+
/* Illegal sequence. */
|
|
280
|
+
return (-1);
|
|
281
|
+
if (!negative)
|
|
282
|
+
val[vidx++] = '1';
|
|
283
|
+
/* We have got boolean option data. */
|
|
284
|
+
++p;
|
|
285
|
+
if (apply)
|
|
286
|
+
goto complete;
|
|
287
|
+
else
|
|
288
|
+
/* This option does not apply to the
|
|
289
|
+
* format which the fn variable
|
|
290
|
+
* indicate. */
|
|
291
|
+
state = INIT;
|
|
292
|
+
} else if (*p == ':') {
|
|
293
|
+
/* obuf data is format name */
|
|
294
|
+
if (state == F_NAME)
|
|
295
|
+
/* We already found it. */
|
|
296
|
+
return (-1);
|
|
297
|
+
if (kidx == 0)
|
|
298
|
+
/* Illegal sequence. */
|
|
299
|
+
return (-1);
|
|
300
|
+
if (negative)
|
|
301
|
+
/* We cannot accept "!format-name:". */
|
|
302
|
+
return (-1);
|
|
303
|
+
key[kidx] = '\0';
|
|
304
|
+
if (strcmp(fn, key) != 0)
|
|
305
|
+
/* This option does not apply to the
|
|
306
|
+
* format which the fn variable
|
|
307
|
+
* indicate. */
|
|
308
|
+
apply = 0;
|
|
309
|
+
kidx = 0;
|
|
310
|
+
++p;
|
|
311
|
+
state = F_NAME;
|
|
312
|
+
} else if (*p == '=') {
|
|
313
|
+
if (kidx == 0)
|
|
314
|
+
/* Illegal sequence. */
|
|
315
|
+
return (-1);
|
|
316
|
+
if (negative)
|
|
317
|
+
/* We cannot accept "!opt-name=value". */
|
|
318
|
+
return (-1);
|
|
319
|
+
++p;
|
|
320
|
+
state = G_VALUE;
|
|
321
|
+
} else if (*p == ' ') {
|
|
322
|
+
/* Pass the space character */
|
|
323
|
+
++p;
|
|
324
|
+
} else {
|
|
325
|
+
/* Illegal character. */
|
|
326
|
+
return (-1);
|
|
327
|
+
}
|
|
328
|
+
break;
|
|
329
|
+
case G_VALUE:
|
|
330
|
+
if (*p == ',') {
|
|
331
|
+
if (vidx == 0)
|
|
332
|
+
/* Illegal sequence. */
|
|
333
|
+
return (-1);
|
|
334
|
+
/* We have got option data. */
|
|
335
|
+
++p;
|
|
336
|
+
if (apply)
|
|
337
|
+
goto complete;
|
|
338
|
+
else
|
|
339
|
+
/* This option does not apply to the
|
|
340
|
+
* format which the fn variable
|
|
341
|
+
* indicate. */
|
|
342
|
+
state = INIT;
|
|
343
|
+
} else if (*p == ' ') {
|
|
344
|
+
/* Pass the space character */
|
|
345
|
+
++p;
|
|
346
|
+
} else {
|
|
347
|
+
if (vidx >= valsize -1)
|
|
348
|
+
/* Too many characters. */
|
|
349
|
+
return (-1);
|
|
350
|
+
val[vidx++] = *p++;
|
|
351
|
+
}
|
|
352
|
+
break;
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
switch (state) {
|
|
357
|
+
case F_BOTH:
|
|
358
|
+
case F_NAME:
|
|
359
|
+
if (kidx != 0) {
|
|
360
|
+
if (!negative)
|
|
361
|
+
val[vidx++] = '1';
|
|
362
|
+
/* We have got boolean option. */
|
|
363
|
+
if (apply)
|
|
364
|
+
/* This option apply to the format which the
|
|
365
|
+
* fn variable indicate. */
|
|
366
|
+
goto complete;
|
|
367
|
+
}
|
|
368
|
+
break;
|
|
369
|
+
case G_VALUE:
|
|
370
|
+
if (vidx == 0)
|
|
371
|
+
/* Illegal sequence. */
|
|
372
|
+
return (-1);
|
|
373
|
+
/* We have got option value. */
|
|
374
|
+
if (apply)
|
|
375
|
+
/* This option apply to the format which the fn
|
|
376
|
+
* variable indicate. */
|
|
377
|
+
goto complete;
|
|
378
|
+
break;
|
|
379
|
+
case INIT:/* nothing */
|
|
380
|
+
break;
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
/* End of Option string. */
|
|
384
|
+
return (0);
|
|
385
|
+
|
|
386
|
+
complete:
|
|
387
|
+
key[kidx] = '\0';
|
|
388
|
+
val[vidx] = '\0';
|
|
389
|
+
/* Return a size which we've consumed for detecting option */
|
|
390
|
+
return ((int)(p - p_org));
|
|
391
|
+
}
|
|
@@ -0,0 +1,94 @@
|
|
|
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
|
+
|
|
26
|
+
#include "archive_platform.h"
|
|
27
|
+
__FBSDID("$FreeBSD: head/lib/libarchive/archive_virtual.c 201098 2009-12-28 02:58:14Z kientzle $");
|
|
28
|
+
|
|
29
|
+
#include "archive.h"
|
|
30
|
+
#include "archive_entry.h"
|
|
31
|
+
#include "archive_private.h"
|
|
32
|
+
|
|
33
|
+
int
|
|
34
|
+
archive_write_close(struct archive *a)
|
|
35
|
+
{
|
|
36
|
+
return ((a->vtable->archive_close)(a));
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
int
|
|
40
|
+
archive_read_close(struct archive *a)
|
|
41
|
+
{
|
|
42
|
+
return ((a->vtable->archive_close)(a));
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
#if ARCHIVE_API_VERSION > 1
|
|
46
|
+
int
|
|
47
|
+
archive_write_finish(struct archive *a)
|
|
48
|
+
{
|
|
49
|
+
return ((a->vtable->archive_finish)(a));
|
|
50
|
+
}
|
|
51
|
+
#else
|
|
52
|
+
/* Temporarily allow library to compile with either 1.x or 2.0 API. */
|
|
53
|
+
void
|
|
54
|
+
archive_write_finish(struct archive *a)
|
|
55
|
+
{
|
|
56
|
+
(void)(a->vtable->archive_finish)(a);
|
|
57
|
+
}
|
|
58
|
+
#endif
|
|
59
|
+
|
|
60
|
+
int
|
|
61
|
+
archive_read_finish(struct archive *a)
|
|
62
|
+
{
|
|
63
|
+
return ((a->vtable->archive_finish)(a));
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
int
|
|
67
|
+
archive_write_header(struct archive *a, struct archive_entry *entry)
|
|
68
|
+
{
|
|
69
|
+
++a->file_count;
|
|
70
|
+
return ((a->vtable->archive_write_header)(a, entry));
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
int
|
|
74
|
+
archive_write_finish_entry(struct archive *a)
|
|
75
|
+
{
|
|
76
|
+
return ((a->vtable->archive_write_finish_entry)(a));
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
#if ARCHIVE_API_VERSION > 1
|
|
80
|
+
ssize_t
|
|
81
|
+
#else
|
|
82
|
+
/* Temporarily allow library to compile with either 1.x or 2.0 API. */
|
|
83
|
+
int
|
|
84
|
+
#endif
|
|
85
|
+
archive_write_data(struct archive *a, const void *buff, size_t s)
|
|
86
|
+
{
|
|
87
|
+
return ((a->vtable->archive_write_data)(a, buff, s));
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
ssize_t
|
|
91
|
+
archive_write_data_block(struct archive *a, const void *buff, size_t s, off_t o)
|
|
92
|
+
{
|
|
93
|
+
return ((a->vtable->archive_write_data_block)(a, buff, s, o));
|
|
94
|
+
}
|