Merge change 4424
* changes: fix decompression bug in fastboot
This commit is contained in:
commit
d7166ede3b
|
@ -13,7 +13,7 @@ enum {
|
|||
// central directory entries
|
||||
ENTRY_SIGNATURE = 0x02014b50,
|
||||
ENTRY_LEN = 46, // CentralDirEnt len, excl. var fields
|
||||
|
||||
|
||||
// local file header
|
||||
LFH_SIZE = 30,
|
||||
};
|
||||
|
@ -73,8 +73,6 @@ read_central_directory_entry(Zipfile* file, Zipentry* entry,
|
|||
unsigned short lastModFileTime;
|
||||
unsigned short lastModFileDate;
|
||||
unsigned long crc32;
|
||||
unsigned long compressedSize;
|
||||
unsigned long uncompressedSize;
|
||||
unsigned short extraFieldLength;
|
||||
unsigned short fileCommentLength;
|
||||
unsigned short diskNumberStart;
|
||||
|
@ -85,7 +83,7 @@ read_central_directory_entry(Zipfile* file, Zipentry* entry,
|
|||
const unsigned char* fileComment;
|
||||
unsigned int dataOffset;
|
||||
unsigned short lfhExtraFieldSize;
|
||||
|
||||
|
||||
|
||||
p = *buf;
|
||||
|
||||
|
@ -106,7 +104,7 @@ read_central_directory_entry(Zipfile* file, Zipentry* entry,
|
|||
lastModFileTime = read_le_short(&p[0x0c]);
|
||||
lastModFileDate = read_le_short(&p[0x0e]);
|
||||
crc32 = read_le_int(&p[0x10]);
|
||||
compressedSize = read_le_int(&p[0x14]);
|
||||
entry->compressedSize = read_le_int(&p[0x14]);
|
||||
entry->uncompressedSize = read_le_int(&p[0x18]);
|
||||
entry->fileNameLength = read_le_short(&p[0x1c]);
|
||||
extraFieldLength = read_le_short(&p[0x1e]);
|
||||
|
@ -141,14 +139,14 @@ read_central_directory_entry(Zipfile* file, Zipentry* entry,
|
|||
fileComment = NULL;
|
||||
}
|
||||
p += fileCommentLength;
|
||||
|
||||
|
||||
*buf = p;
|
||||
|
||||
// the size of the extraField in the central dir is how much data there is,
|
||||
// but the one in the local file header also contains some padding.
|
||||
p = file->buf + localHeaderRelOffset;
|
||||
extraFieldLength = read_le_short(&p[0x1c]);
|
||||
|
||||
|
||||
dataOffset = localHeaderRelOffset + LFH_SIZE
|
||||
+ entry->fileNameLength + extraFieldLength;
|
||||
entry->data = file->buf + dataOffset;
|
||||
|
@ -243,7 +241,7 @@ read_central_dir(Zipfile *file)
|
|||
free(entry);
|
||||
goto bail;
|
||||
}
|
||||
|
||||
|
||||
// add it to our list
|
||||
entry->next = file->entries;
|
||||
file->entries = entry;
|
||||
|
@ -253,4 +251,3 @@ read_central_dir(Zipfile *file)
|
|||
bail:
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
|
|
@ -82,13 +82,13 @@ uninflate(unsigned char* out, int unlen, const unsigned char* in, int clen)
|
|||
unsigned long crc;
|
||||
int err = 0;
|
||||
int zerr;
|
||||
|
||||
|
||||
memset(&zstream, 0, sizeof(zstream));
|
||||
zstream.zalloc = Z_NULL;
|
||||
zstream.zfree = Z_NULL;
|
||||
zstream.opaque = Z_NULL;
|
||||
zstream.next_in = (void*)in;
|
||||
zstream.avail_in = unlen;
|
||||
zstream.avail_in = clen;
|
||||
zstream.next_out = (Bytef*) out;
|
||||
zstream.avail_out = unlen;
|
||||
zstream.data_type = Z_UNKNOWN;
|
||||
|
@ -99,7 +99,7 @@ uninflate(unsigned char* out, int unlen, const unsigned char* in, int clen)
|
|||
if (zerr != Z_OK) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
// uncompress the data
|
||||
zerr = inflate(&zstream, Z_FINISH);
|
||||
if (zerr != Z_STREAM_END) {
|
||||
|
@ -107,7 +107,7 @@ uninflate(unsigned char* out, int unlen, const unsigned char* in, int clen)
|
|||
zstream.total_out);
|
||||
err = -1;
|
||||
}
|
||||
|
||||
|
||||
inflateEnd(&zstream);
|
||||
return err;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue