summaryrefslogtreecommitdiff
path: root/archival
diff options
context:
space:
mode:
authorGlenn L McGrath <bug1@ihug.co.nz>2003-02-09 04:46:34 +0000
committerGlenn L McGrath <bug1@ihug.co.nz>2003-02-09 04:46:34 +0000
commitcc616928d5e719c2f0ab301132f2651cc4f4419c (patch)
tree6d92cbaccaf81271d82e9a834d104c721078d222 /archival
parenta88cb5025c3ffd9dc4e7bde58aa58b63afcf65bd (diff)
downloadbusybox-w32-cc616928d5e719c2f0ab301132f2651cc4f4419c.tar.gz
busybox-w32-cc616928d5e719c2f0ab301132f2651cc4f4419c.tar.bz2
busybox-w32-cc616928d5e719c2f0ab301132f2651cc4f4419c.zip
Fix endian probelm on PPC, i had different types for an extern variable.
Diffstat (limited to 'archival')
-rw-r--r--archival/libunarchive/Makefile.in1
-rw-r--r--archival/libunarchive/decompress_unzip.c53
-rw-r--r--archival/libunarchive/unzip.c53
3 files changed, 80 insertions, 27 deletions
diff --git a/archival/libunarchive/Makefile.in b/archival/libunarchive/Makefile.in
index b59048612..fc277d1c4 100644
--- a/archival/libunarchive/Makefile.in
+++ b/archival/libunarchive/Makefile.in
@@ -55,7 +55,6 @@ LIBUNARCHIVE-y:= \
55 archive_copy_file.o \ 55 archive_copy_file.o \
56\ 56\
57 check_header_gzip.o \ 57 check_header_gzip.o \
58 check_trailer_gzip.o \
59 data_align.o \ 58 data_align.o \
60 decompress_bunzip2.o \ 59 decompress_bunzip2.o \
61 find_list_entry.o \ 60 find_list_entry.o \
diff --git a/archival/libunarchive/decompress_unzip.c b/archival/libunarchive/decompress_unzip.c
index 1b2d587d6..8da9b5cb9 100644
--- a/archival/libunarchive/decompress_unzip.c
+++ b/archival/libunarchive/decompress_unzip.c
@@ -83,29 +83,31 @@ typedef struct huft_s {
83} huft_t; 83} huft_t;
84 84
85static int gunzip_src_fd; 85static int gunzip_src_fd;
86unsigned int gunzip_bytes_out; /* number of output bytes */ 86static unsigned int gunzip_bytes_out; /* number of output bytes */
87static unsigned int gunzip_outbuf_count; /* bytes in output buffer */ 87static unsigned int gunzip_outbuf_count; /* bytes in output buffer */
88 88
89/* This is used to sanify any unused bits from the bitbuffer
90 * so they arent skipped when reading trailers (trailing headers) */
91//unsigned char gunzip_in_buffer_count;
92//unsigned char *gunzip_in_buffer;
93
94/* gunzip_window size--must be a power of two, and 89/* gunzip_window size--must be a power of two, and
95 * at least 32K for zip's deflate method */ 90 * at least 32K for zip's deflate method */
96static const int gunzip_wsize = 0x8000; 91static const int gunzip_wsize = 0x8000;
97
98static unsigned char *gunzip_window; 92static unsigned char *gunzip_window;
93
99static unsigned int *gunzip_crc_table; 94static unsigned int *gunzip_crc_table;
100unsigned int gunzip_crc; 95static unsigned int gunzip_crc;
101 96
102/* If BMAX needs to be larger than 16, then h and x[] should be ulg. */ 97/* If BMAX needs to be larger than 16, then h and x[] should be ulg. */
103#define BMAX 16 /* maximum bit length of any code (16 for explode) */ 98#define BMAX 16 /* maximum bit length of any code (16 for explode) */
104#define N_MAX 288 /* maximum number of codes in any set */ 99#define N_MAX 288 /* maximum number of codes in any set */
105 100
101/* bitbuffer */
106static unsigned int gunzip_bb; /* bit buffer */ 102static unsigned int gunzip_bb; /* bit buffer */
107static unsigned char gunzip_bk; /* bits in bit buffer */ 103static unsigned char gunzip_bk; /* bits in bit buffer */
108 104
105/* These control the size of the bytebuffer */
106#define BYTEBUFFER_MAX 0x8000
107static unsigned char *bytebuffer = NULL;
108static unsigned int bytebuffer_offset = 0;
109static unsigned int bytebuffer_size = 0;
110
109static const unsigned short mask_bits[] = { 111static const unsigned short mask_bits[] = {
110 0x0000, 0x0001, 0x0003, 0x0007, 0x000f, 0x001f, 0x003f, 0x007f, 0x00ff, 112 0x0000, 0x0001, 0x0003, 0x0007, 0x000f, 0x001f, 0x003f, 0x007f, 0x00ff,
111 0x01ff, 0x03ff, 0x07ff, 0x0fff, 0x1fff, 0x3fff, 0x7fff, 0xffff 113 0x01ff, 0x03ff, 0x07ff, 0x0fff, 0x1fff, 0x3fff, 0x7fff, 0xffff
@@ -142,11 +144,6 @@ static const unsigned char border[] = {
142 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 144 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15
143}; 145};
144 146
145#define BYTEBUFFER_MAX 0x8000
146unsigned char *bytebuffer = NULL;
147unsigned int bytebuffer_offset = 0;
148unsigned int bytebuffer_size = 0;
149
150static void fill_bytebuffer(void) 147static void fill_bytebuffer(void)
151{ 148{
152 if (bytebuffer_offset >= bytebuffer_size) { 149 if (bytebuffer_offset >= bytebuffer_size) {
@@ -1011,3 +1008,33 @@ extern int inflate(int in, int out)
1011 GZ_gzReadClose(); 1008 GZ_gzReadClose();
1012 return 0; 1009 return 0;
1013} 1010}
1011
1012extern void check_trailer_gzip(int src_fd)
1013{
1014 unsigned int stored_crc = 0;
1015 unsigned char count;
1016
1017 /* top up the input buffer with the rest of the trailer */
1018 count = bytebuffer_size - bytebuffer_offset;
1019 if (count < 8) {
1020 xread_all(src_fd, &bytebuffer[bytebuffer_size], 8 - count);
1021 bytebuffer_size += 8 - count;
1022 }
1023 for (count = 0; count != 4; count++) {
1024 stored_crc |= (bytebuffer[bytebuffer_offset] << (count * 8));
1025 bytebuffer_offset++;
1026 }
1027
1028 /* Validate decompression - crc */
1029 if (stored_crc != (gunzip_crc ^ 0xffffffffL)) {
1030 error_msg_and_die("crc error");
1031 }
1032
1033 /* Validate decompression - size */
1034 if (gunzip_bytes_out !=
1035 (bytebuffer[bytebuffer_offset] | (bytebuffer[bytebuffer_offset+1] << 8) |
1036 (bytebuffer[bytebuffer_offset+2] << 16) | (bytebuffer[bytebuffer_offset+3] << 24))) {
1037 error_msg_and_die("Incorrect length, but crc is correct");
1038 }
1039
1040}
diff --git a/archival/libunarchive/unzip.c b/archival/libunarchive/unzip.c
index 1b2d587d6..8da9b5cb9 100644
--- a/archival/libunarchive/unzip.c
+++ b/archival/libunarchive/unzip.c
@@ -83,29 +83,31 @@ typedef struct huft_s {
83} huft_t; 83} huft_t;
84 84
85static int gunzip_src_fd; 85static int gunzip_src_fd;
86unsigned int gunzip_bytes_out; /* number of output bytes */ 86static unsigned int gunzip_bytes_out; /* number of output bytes */
87static unsigned int gunzip_outbuf_count; /* bytes in output buffer */ 87static unsigned int gunzip_outbuf_count; /* bytes in output buffer */
88 88
89/* This is used to sanify any unused bits from the bitbuffer
90 * so they arent skipped when reading trailers (trailing headers) */
91//unsigned char gunzip_in_buffer_count;
92//unsigned char *gunzip_in_buffer;
93
94/* gunzip_window size--must be a power of two, and 89/* gunzip_window size--must be a power of two, and
95 * at least 32K for zip's deflate method */ 90 * at least 32K for zip's deflate method */
96static const int gunzip_wsize = 0x8000; 91static const int gunzip_wsize = 0x8000;
97
98static unsigned char *gunzip_window; 92static unsigned char *gunzip_window;
93
99static unsigned int *gunzip_crc_table; 94static unsigned int *gunzip_crc_table;
100unsigned int gunzip_crc; 95static unsigned int gunzip_crc;
101 96
102/* If BMAX needs to be larger than 16, then h and x[] should be ulg. */ 97/* If BMAX needs to be larger than 16, then h and x[] should be ulg. */
103#define BMAX 16 /* maximum bit length of any code (16 for explode) */ 98#define BMAX 16 /* maximum bit length of any code (16 for explode) */
104#define N_MAX 288 /* maximum number of codes in any set */ 99#define N_MAX 288 /* maximum number of codes in any set */
105 100
101/* bitbuffer */
106static unsigned int gunzip_bb; /* bit buffer */ 102static unsigned int gunzip_bb; /* bit buffer */
107static unsigned char gunzip_bk; /* bits in bit buffer */ 103static unsigned char gunzip_bk; /* bits in bit buffer */
108 104
105/* These control the size of the bytebuffer */
106#define BYTEBUFFER_MAX 0x8000
107static unsigned char *bytebuffer = NULL;
108static unsigned int bytebuffer_offset = 0;
109static unsigned int bytebuffer_size = 0;
110
109static const unsigned short mask_bits[] = { 111static const unsigned short mask_bits[] = {
110 0x0000, 0x0001, 0x0003, 0x0007, 0x000f, 0x001f, 0x003f, 0x007f, 0x00ff, 112 0x0000, 0x0001, 0x0003, 0x0007, 0x000f, 0x001f, 0x003f, 0x007f, 0x00ff,
111 0x01ff, 0x03ff, 0x07ff, 0x0fff, 0x1fff, 0x3fff, 0x7fff, 0xffff 113 0x01ff, 0x03ff, 0x07ff, 0x0fff, 0x1fff, 0x3fff, 0x7fff, 0xffff
@@ -142,11 +144,6 @@ static const unsigned char border[] = {
142 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 144 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15
143}; 145};
144 146
145#define BYTEBUFFER_MAX 0x8000
146unsigned char *bytebuffer = NULL;
147unsigned int bytebuffer_offset = 0;
148unsigned int bytebuffer_size = 0;
149
150static void fill_bytebuffer(void) 147static void fill_bytebuffer(void)
151{ 148{
152 if (bytebuffer_offset >= bytebuffer_size) { 149 if (bytebuffer_offset >= bytebuffer_size) {
@@ -1011,3 +1008,33 @@ extern int inflate(int in, int out)
1011 GZ_gzReadClose(); 1008 GZ_gzReadClose();
1012 return 0; 1009 return 0;
1013} 1010}
1011
1012extern void check_trailer_gzip(int src_fd)
1013{
1014 unsigned int stored_crc = 0;
1015 unsigned char count;
1016
1017 /* top up the input buffer with the rest of the trailer */
1018 count = bytebuffer_size - bytebuffer_offset;
1019 if (count < 8) {
1020 xread_all(src_fd, &bytebuffer[bytebuffer_size], 8 - count);
1021 bytebuffer_size += 8 - count;
1022 }
1023 for (count = 0; count != 4; count++) {
1024 stored_crc |= (bytebuffer[bytebuffer_offset] << (count * 8));
1025 bytebuffer_offset++;
1026 }
1027
1028 /* Validate decompression - crc */
1029 if (stored_crc != (gunzip_crc ^ 0xffffffffL)) {
1030 error_msg_and_die("crc error");
1031 }
1032
1033 /* Validate decompression - size */
1034 if (gunzip_bytes_out !=
1035 (bytebuffer[bytebuffer_offset] | (bytebuffer[bytebuffer_offset+1] << 8) |
1036 (bytebuffer[bytebuffer_offset+2] << 16) | (bytebuffer[bytebuffer_offset+3] << 24))) {
1037 error_msg_and_die("Incorrect length, but crc is correct");
1038 }
1039
1040}