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,627 @@
1
+ /*-
2
+ * Copyright (c) 2009 Michihiro NAKAJIMA
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_read_support_compression_uu.c 201248 2009-12-30 06:12:03Z kientzle $");
28
+
29
+ #ifdef HAVE_ERRNO_H
30
+ #include <errno.h>
31
+ #endif
32
+ #ifdef HAVE_STDLIB_H
33
+ #include <stdlib.h>
34
+ #endif
35
+ #ifdef HAVE_STRING_H
36
+ #include <string.h>
37
+ #endif
38
+
39
+ #include "archive.h"
40
+ #include "archive_private.h"
41
+ #include "archive_read_private.h"
42
+
43
+ struct uudecode {
44
+ int64_t total;
45
+ unsigned char *in_buff;
46
+ #define IN_BUFF_SIZE (1024)
47
+ int in_cnt;
48
+ size_t in_allocated;
49
+ unsigned char *out_buff;
50
+ #define OUT_BUFF_SIZE (64 * 1024)
51
+ int state;
52
+ #define ST_FIND_HEAD 0
53
+ #define ST_READ_UU 1
54
+ #define ST_UUEND 2
55
+ #define ST_READ_BASE64 3
56
+ };
57
+
58
+ static int uudecode_bidder_bid(struct archive_read_filter_bidder *,
59
+ struct archive_read_filter *filter);
60
+ static int uudecode_bidder_init(struct archive_read_filter *);
61
+
62
+ static ssize_t uudecode_filter_read(struct archive_read_filter *,
63
+ const void **);
64
+ static int uudecode_filter_close(struct archive_read_filter *);
65
+
66
+ int
67
+ archive_read_support_compression_uu(struct archive *_a)
68
+ {
69
+ struct archive_read *a = (struct archive_read *)_a;
70
+ struct archive_read_filter_bidder *bidder;
71
+
72
+ bidder = __archive_read_get_bidder(a);
73
+ archive_clear_error(_a);
74
+ if (bidder == NULL)
75
+ return (ARCHIVE_FATAL);
76
+
77
+ bidder->data = NULL;
78
+ bidder->bid = uudecode_bidder_bid;
79
+ bidder->init = uudecode_bidder_init;
80
+ bidder->options = NULL;
81
+ bidder->free = NULL;
82
+ return (ARCHIVE_OK);
83
+ }
84
+
85
+ static const unsigned char ascii[256] = {
86
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '\n', 0, 0, '\r', 0, 0, /* 00 - 0F */
87
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 10 - 1F */
88
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 20 - 2F */
89
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 30 - 3F */
90
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 40 - 4F */
91
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 50 - 5F */
92
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 60 - 6F */
93
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, /* 70 - 7F */
94
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 80 - 8F */
95
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 90 - 9F */
96
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* A0 - AF */
97
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* B0 - BF */
98
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* C0 - CF */
99
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* D0 - DF */
100
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* E0 - EF */
101
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* F0 - FF */
102
+ };
103
+
104
+ static const unsigned char uuchar[256] = {
105
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 00 - 0F */
106
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 10 - 1F */
107
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 20 - 2F */
108
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 30 - 3F */
109
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 40 - 4F */
110
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 50 - 5F */
111
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 60 - 6F */
112
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 70 - 7F */
113
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 80 - 8F */
114
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 90 - 9F */
115
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* A0 - AF */
116
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* B0 - BF */
117
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* C0 - CF */
118
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* D0 - DF */
119
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* E0 - EF */
120
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* F0 - FF */
121
+ };
122
+
123
+ static const unsigned char base64[256] = {
124
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 00 - 0F */
125
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 10 - 1F */
126
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, /* 20 - 2F */
127
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, /* 30 - 3F */
128
+ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 40 - 4F */
129
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, /* 50 - 5F */
130
+ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 60 - 6F */
131
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, /* 70 - 7F */
132
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 80 - 8F */
133
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 90 - 9F */
134
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* A0 - AF */
135
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* B0 - BF */
136
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* C0 - CF */
137
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* D0 - DF */
138
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* E0 - EF */
139
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* F0 - FF */
140
+ };
141
+
142
+ static const int base64num[128] = {
143
+ 0, 0, 0, 0, 0, 0, 0, 0,
144
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 00 - 0F */
145
+ 0, 0, 0, 0, 0, 0, 0, 0,
146
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 10 - 1F */
147
+ 0, 0, 0, 0, 0, 0, 0, 0,
148
+ 0, 0, 0, 62, 0, 0, 0, 63, /* 20 - 2F */
149
+ 52, 53, 54, 55, 56, 57, 58, 59,
150
+ 60, 61, 0, 0, 0, 0, 0, 0, /* 30 - 3F */
151
+ 0, 0, 1, 2, 3, 4, 5, 6,
152
+ 7, 8, 9, 10, 11, 12, 13, 14, /* 40 - 4F */
153
+ 15, 16, 17, 18, 19, 20, 21, 22,
154
+ 23, 24, 25, 0, 0, 0, 0, 0, /* 50 - 5F */
155
+ 0, 26, 27, 28, 29, 30, 31, 32,
156
+ 33, 34, 35, 36, 37, 38, 39, 40, /* 60 - 6F */
157
+ 41, 42, 43, 44, 45, 46, 47, 48,
158
+ 49, 50, 51, 0, 0, 0, 0, 0, /* 70 - 7F */
159
+ };
160
+
161
+ static ssize_t
162
+ get_line(const unsigned char *b, ssize_t avail, ssize_t *nlsize)
163
+ {
164
+ ssize_t len;
165
+
166
+ len = 0;
167
+ while (len < avail) {
168
+ switch (ascii[*b]) {
169
+ case 0: /* Non-ascii character or control character. */
170
+ if (nlsize != NULL)
171
+ *nlsize = 0;
172
+ return (-1);
173
+ case '\r':
174
+ if (avail-len > 1 && b[1] == '\n') {
175
+ if (nlsize != NULL)
176
+ *nlsize = 2;
177
+ return (len+2);
178
+ }
179
+ /* FALL THROUGH */
180
+ case '\n':
181
+ if (nlsize != NULL)
182
+ *nlsize = 1;
183
+ return (len+1);
184
+ case 1:
185
+ b++;
186
+ len++;
187
+ break;
188
+ }
189
+ }
190
+ if (nlsize != NULL)
191
+ *nlsize = 0;
192
+ return (avail);
193
+ }
194
+
195
+ static ssize_t
196
+ bid_get_line(struct archive_read_filter *filter,
197
+ const unsigned char **b, ssize_t *avail, ssize_t *ravail, ssize_t *nl)
198
+ {
199
+ ssize_t len;
200
+ int quit;
201
+
202
+ quit = 0;
203
+ if (*avail == 0) {
204
+ *nl = 0;
205
+ len = 0;
206
+ } else
207
+ len = get_line(*b, *avail, nl);
208
+ /*
209
+ * Read bytes more while it does not reach the end of line.
210
+ */
211
+ while (*nl == 0 && len == *avail && !quit) {
212
+ ssize_t diff = *ravail - *avail;
213
+
214
+ *b = __archive_read_filter_ahead(filter, 160 + *ravail, avail);
215
+ if (*b == NULL) {
216
+ if (*ravail >= *avail)
217
+ return (0);
218
+ /* Reading bytes reaches the end of file. */
219
+ *b = __archive_read_filter_ahead(filter, *avail, avail);
220
+ quit = 1;
221
+ }
222
+ *ravail = *avail;
223
+ *b += diff;
224
+ *avail -= diff;
225
+ len = get_line(*b, *avail, nl);
226
+ }
227
+ return (len);
228
+ }
229
+
230
+ #define UUDECODE(c) (((c) - 0x20) & 0x3f)
231
+
232
+ static int
233
+ uudecode_bidder_bid(struct archive_read_filter_bidder *self,
234
+ struct archive_read_filter *filter)
235
+ {
236
+ const unsigned char *b;
237
+ ssize_t avail, ravail;
238
+ ssize_t len, nl;
239
+ int l;
240
+ int firstline;
241
+
242
+ (void)self; /* UNUSED */
243
+
244
+ b = __archive_read_filter_ahead(filter, 1, &avail);
245
+ if (b == NULL)
246
+ return (0);
247
+
248
+ firstline = 20;
249
+ ravail = avail;
250
+ for (;;) {
251
+ len = bid_get_line(filter, &b, &avail, &ravail, &nl);
252
+ if (len < 0 || nl == 0)
253
+ return (0);/* Binary data. */
254
+ if (memcmp(b, "begin ", 6) == 0 && len - nl >= 11)
255
+ l = 6;
256
+ else if (memcmp(b, "begin-base64 ", 13) == 0 && len - nl >= 18)
257
+ l = 13;
258
+ else
259
+ l = 0;
260
+
261
+ if (l > 0 && (b[l] < '0' || b[l] > '7' ||
262
+ b[l+1] < '0' || b[l+1] > '7' ||
263
+ b[l+2] < '0' || b[l+2] > '7' || b[l+3] != ' '))
264
+ l = 0;
265
+
266
+ b += len;
267
+ avail -= len;
268
+ if (l)
269
+ break;
270
+ firstline = 0;
271
+ }
272
+ if (!avail)
273
+ return (0);
274
+ len = bid_get_line(filter, &b, &avail, &ravail, &nl);
275
+ if (len < 0 || nl == 0)
276
+ return (0);/* There are non-ascii characters. */
277
+ avail -= len;
278
+
279
+ if (l == 6) {
280
+ if (!uuchar[*b])
281
+ return (0);
282
+ /* Get a length of decoded bytes. */
283
+ l = UUDECODE(*b++); len--;
284
+ if (l > 45)
285
+ /* Normally, maximum length is 45(character 'M'). */
286
+ return (0);
287
+ while (l && len-nl > 0) {
288
+ if (l > 0) {
289
+ if (!uuchar[*b++])
290
+ return (0);
291
+ if (!uuchar[*b++])
292
+ return (0);
293
+ len -= 2;
294
+ --l;
295
+ }
296
+ if (l > 0) {
297
+ if (!uuchar[*b++])
298
+ return (0);
299
+ --len;
300
+ --l;
301
+ }
302
+ if (l > 0) {
303
+ if (!uuchar[*b++])
304
+ return (0);
305
+ --len;
306
+ --l;
307
+ }
308
+ }
309
+ if (len-nl < 0)
310
+ return (0);
311
+ if (len-nl == 1 &&
312
+ (uuchar[*b] || /* Check sum. */
313
+ (*b >= 'a' && *b <= 'z'))) {/* Padding data(MINIX). */
314
+ ++b;
315
+ --len;
316
+ }
317
+ b += nl;
318
+ if (avail && uuchar[*b])
319
+ return (firstline+30);
320
+ }
321
+ if (l == 13) {
322
+ while (len-nl > 0) {
323
+ if (!base64[*b++])
324
+ return (0);
325
+ --len;
326
+ }
327
+ b += nl;
328
+
329
+ if (avail >= 5 && memcmp(b, "====\n", 5) == 0)
330
+ return (firstline+40);
331
+ if (avail >= 6 && memcmp(b, "====\r\n", 6) == 0)
332
+ return (firstline+40);
333
+ if (avail > 0 && base64[*b])
334
+ return (firstline+30);
335
+ }
336
+
337
+ return (0);
338
+ }
339
+
340
+ static int
341
+ uudecode_bidder_init(struct archive_read_filter *self)
342
+ {
343
+ struct uudecode *uudecode;
344
+ void *out_buff;
345
+ void *in_buff;
346
+
347
+ self->code = ARCHIVE_COMPRESSION_UU;
348
+ self->name = "uu";
349
+ self->read = uudecode_filter_read;
350
+ self->skip = NULL; /* not supported */
351
+ self->close = uudecode_filter_close;
352
+
353
+ uudecode = (struct uudecode *)calloc(sizeof(*uudecode), 1);
354
+ out_buff = malloc(OUT_BUFF_SIZE);
355
+ in_buff = malloc(IN_BUFF_SIZE);
356
+ if (uudecode == NULL || out_buff == NULL || in_buff == NULL) {
357
+ archive_set_error(&self->archive->archive, ENOMEM,
358
+ "Can't allocate data for uudecode");
359
+ free(uudecode);
360
+ free(out_buff);
361
+ free(in_buff);
362
+ return (ARCHIVE_FATAL);
363
+ }
364
+
365
+ self->data = uudecode;
366
+ uudecode->in_buff = in_buff;
367
+ uudecode->in_cnt = 0;
368
+ uudecode->in_allocated = IN_BUFF_SIZE;
369
+ uudecode->out_buff = out_buff;
370
+ uudecode->state = ST_FIND_HEAD;
371
+
372
+ return (ARCHIVE_OK);
373
+ }
374
+
375
+ static int
376
+ ensure_in_buff_size(struct archive_read_filter *self,
377
+ struct uudecode *uudecode, size_t size)
378
+ {
379
+
380
+ if (size > uudecode->in_allocated) {
381
+ unsigned char *ptr;
382
+ size_t newsize;
383
+
384
+ newsize = uudecode->in_allocated << 1;
385
+ ptr = malloc(newsize);
386
+ if (ptr == NULL ||
387
+ newsize < uudecode->in_allocated) {
388
+ free(ptr);
389
+ archive_set_error(&self->archive->archive,
390
+ ENOMEM,
391
+ "Can't allocate data for uudecode");
392
+ return (ARCHIVE_FATAL);
393
+ }
394
+ if (uudecode->in_cnt)
395
+ memmove(ptr, uudecode->in_buff,
396
+ uudecode->in_cnt);
397
+ free(uudecode->in_buff);
398
+ uudecode->in_buff = ptr;
399
+ uudecode->in_allocated = newsize;
400
+ }
401
+ return (ARCHIVE_OK);
402
+ }
403
+
404
+ static ssize_t
405
+ uudecode_filter_read(struct archive_read_filter *self, const void **buff)
406
+ {
407
+ struct uudecode *uudecode;
408
+ const unsigned char *b, *d;
409
+ unsigned char *out;
410
+ ssize_t avail_in, ravail;
411
+ ssize_t used;
412
+ ssize_t total;
413
+ ssize_t len, llen, nl;
414
+
415
+ uudecode = (struct uudecode *)self->data;
416
+
417
+ read_more:
418
+ d = __archive_read_filter_ahead(self->upstream, 1, &avail_in);
419
+ if (d == NULL && avail_in < 0)
420
+ return (ARCHIVE_FATAL);
421
+ /* Quiet a code analyzer; make sure avail_in must be zero
422
+ * when d is NULL. */
423
+ if (d == NULL)
424
+ avail_in = 0;
425
+ used = 0;
426
+ total = 0;
427
+ out = uudecode->out_buff;
428
+ ravail = avail_in;
429
+ if (uudecode->in_cnt) {
430
+ /*
431
+ * If there is remaining data which is saved by
432
+ * previous calling, use it first.
433
+ */
434
+ if (ensure_in_buff_size(self, uudecode,
435
+ avail_in + uudecode->in_cnt) != ARCHIVE_OK)
436
+ return (ARCHIVE_FATAL);
437
+ memcpy(uudecode->in_buff + uudecode->in_cnt,
438
+ d, avail_in);
439
+ d = uudecode->in_buff;
440
+ avail_in += uudecode->in_cnt;
441
+ uudecode->in_cnt = 0;
442
+ }
443
+ for (;used < avail_in; d += llen, used += llen) {
444
+ int l, body;
445
+
446
+ b = d;
447
+ len = get_line(b, avail_in - used, &nl);
448
+ if (len < 0) {
449
+ /* Non-ascii character is found. */
450
+ archive_set_error(&self->archive->archive,
451
+ ARCHIVE_ERRNO_MISC,
452
+ "Insufficient compressed data");
453
+ return (ARCHIVE_FATAL);
454
+ }
455
+ llen = len;
456
+ if (nl == 0) {
457
+ /*
458
+ * Save remaining data which does not contain
459
+ * NL('\n','\r').
460
+ */
461
+ if (ensure_in_buff_size(self, uudecode, len)
462
+ != ARCHIVE_OK)
463
+ return (ARCHIVE_FATAL);
464
+ if (uudecode->in_buff != b)
465
+ memmove(uudecode->in_buff, b, len);
466
+ uudecode->in_cnt = len;
467
+ if (total == 0) {
468
+ /* Do not return 0; it means end-of-file.
469
+ * We should try to read bytes more. */
470
+ __archive_read_filter_consume(
471
+ self->upstream, ravail);
472
+ goto read_more;
473
+ }
474
+ break;
475
+ }
476
+ if (total + len * 2 > OUT_BUFF_SIZE)
477
+ break;
478
+ switch (uudecode->state) {
479
+ default:
480
+ case ST_FIND_HEAD:
481
+ if (len - nl > 13 && memcmp(b, "begin ", 6) == 0)
482
+ l = 6;
483
+ else if (len - nl > 18 &&
484
+ memcmp(b, "begin-base64 ", 13) == 0)
485
+ l = 13;
486
+ else
487
+ l = 0;
488
+ if (l != 0 && b[l] >= '0' && b[l] <= '7' &&
489
+ b[l+1] >= '0' && b[l+1] <= '7' &&
490
+ b[l+2] >= '0' && b[l+2] <= '7' && b[l+3] == ' ') {
491
+ if (l == 6)
492
+ uudecode->state = ST_READ_UU;
493
+ else
494
+ uudecode->state = ST_READ_BASE64;
495
+ }
496
+ break;
497
+ case ST_READ_UU:
498
+ body = len - nl;
499
+ if (!uuchar[*b] || body <= 0) {
500
+ archive_set_error(&self->archive->archive,
501
+ ARCHIVE_ERRNO_MISC,
502
+ "Insufficient compressed data");
503
+ return (ARCHIVE_FATAL);
504
+ }
505
+ /* Get length of undecoded bytes of curent line. */
506
+ l = UUDECODE(*b++);
507
+ body--;
508
+ if (l > body) {
509
+ archive_set_error(&self->archive->archive,
510
+ ARCHIVE_ERRNO_MISC,
511
+ "Insufficient compressed data");
512
+ return (ARCHIVE_FATAL);
513
+ }
514
+ if (l == 0) {
515
+ uudecode->state = ST_UUEND;
516
+ break;
517
+ }
518
+ while (l > 0) {
519
+ int n = 0;
520
+
521
+ if (l > 0) {
522
+ if (!uuchar[b[0]] || !uuchar[b[1]])
523
+ break;
524
+ n = UUDECODE(*b++) << 18;
525
+ n |= UUDECODE(*b++) << 12;
526
+ *out++ = n >> 16; total++;
527
+ --l;
528
+ }
529
+ if (l > 0) {
530
+ if (!uuchar[b[0]])
531
+ break;
532
+ n |= UUDECODE(*b++) << 6;
533
+ *out++ = (n >> 8) & 0xFF; total++;
534
+ --l;
535
+ }
536
+ if (l > 0) {
537
+ if (!uuchar[b[0]])
538
+ break;
539
+ n |= UUDECODE(*b++);
540
+ *out++ = n & 0xFF; total++;
541
+ --l;
542
+ }
543
+ }
544
+ if (l) {
545
+ archive_set_error(&self->archive->archive,
546
+ ARCHIVE_ERRNO_MISC,
547
+ "Insufficient compressed data");
548
+ return (ARCHIVE_FATAL);
549
+ }
550
+ break;
551
+ case ST_UUEND:
552
+ if (len - nl == 3 && memcmp(b, "end ", 3) == 0)
553
+ uudecode->state = ST_FIND_HEAD;
554
+ else {
555
+ archive_set_error(&self->archive->archive,
556
+ ARCHIVE_ERRNO_MISC,
557
+ "Insufficient compressed data");
558
+ return (ARCHIVE_FATAL);
559
+ }
560
+ break;
561
+ case ST_READ_BASE64:
562
+ l = len - nl;
563
+ if (l >= 3 && b[0] == '=' && b[1] == '=' &&
564
+ b[2] == '=') {
565
+ uudecode->state = ST_FIND_HEAD;
566
+ break;
567
+ }
568
+ while (l > 0) {
569
+ int n = 0;
570
+
571
+ if (l > 0) {
572
+ if (!base64[b[0]] || !base64[b[1]])
573
+ break;
574
+ n = base64num[*b++] << 18;
575
+ n |= base64num[*b++] << 12;
576
+ *out++ = n >> 16; total++;
577
+ l -= 2;
578
+ }
579
+ if (l > 0) {
580
+ if (*b == '=')
581
+ break;
582
+ if (!base64[*b])
583
+ break;
584
+ n |= base64num[*b++] << 6;
585
+ *out++ = (n >> 8) & 0xFF; total++;
586
+ --l;
587
+ }
588
+ if (l > 0) {
589
+ if (*b == '=')
590
+ break;
591
+ if (!base64[*b])
592
+ break;
593
+ n |= base64num[*b++];
594
+ *out++ = n & 0xFF; total++;
595
+ --l;
596
+ }
597
+ }
598
+ if (l && *b != '=') {
599
+ archive_set_error(&self->archive->archive,
600
+ ARCHIVE_ERRNO_MISC,
601
+ "Insufficient compressed data");
602
+ return (ARCHIVE_FATAL);
603
+ }
604
+ break;
605
+ }
606
+ }
607
+
608
+ __archive_read_filter_consume(self->upstream, ravail);
609
+
610
+ *buff = uudecode->out_buff;
611
+ uudecode->total += total;
612
+ return (total);
613
+ }
614
+
615
+ static int
616
+ uudecode_filter_close(struct archive_read_filter *self)
617
+ {
618
+ struct uudecode *uudecode;
619
+
620
+ uudecode = (struct uudecode *)self->data;
621
+ free(uudecode->in_buff);
622
+ free(uudecode->out_buff);
623
+ free(uudecode);
624
+
625
+ return (ARCHIVE_OK);
626
+ }
627
+