summaryrefslogtreecommitdiff
path: root/libarchive/archive_read_support_format_cab.c
diff options
context:
space:
mode:
authorMichihiro NAKAJIMA <ggcueroad@gmail.com>2011-08-07 04:07:26 -0400
committerMichihiro NAKAJIMA <ggcueroad@gmail.com>2011-08-07 04:07:26 -0400
commited83bacd7b5d8b2325573efef0bb46ffdba06f91 (patch)
treeef4ec9e8a03ebdc8e1e10b1ab96e27e5dd579809 /libarchive/archive_read_support_format_cab.c
parent9cadbdf232555f7abf4062b6aac7f56e0dab1da5 (diff)
downloadlibarchive-ed83bacd7b5d8b2325573efef0bb46ffdba06f91.tar.gz
Effectively read compressed data into a cache buffer of bit readers
without bytes-swap functions. A use of our byte-swap functions needed extra bit shifts at bit readers. SVN-Revision: 3550
Diffstat (limited to 'libarchive/archive_read_support_format_cab.c')
-rw-r--r--libarchive/archive_read_support_format_cab.c26
1 files changed, 14 insertions, 12 deletions
diff --git a/libarchive/archive_read_support_format_cab.c b/libarchive/archive_read_support_format_cab.c
index 975aca46..01da222c 100644
--- a/libarchive/archive_read_support_format_cab.c
+++ b/libarchive/archive_read_support_format_cab.c
@@ -2254,13 +2254,14 @@ lzx_br_fillup(struct lzx_stream *strm, struct lzx_br *br)
case 4:
if (strm->avail_in >= 8) {
br->cache_buffer =
- (((uint64_t)archive_le16dec(
- strm->next_in)) << 48) |
- (((uint64_t)archive_le16dec(
- strm->next_in+2)) << 32) |
- (((uint32_t)archive_le16dec(
- strm->next_in+4)) << 16) |
- archive_le16dec(strm->next_in+6);
+ ((uint64_t)strm->next_in[1]) << 56 |
+ ((uint64_t)strm->next_in[0]) << 48 |
+ ((uint64_t)strm->next_in[3]) << 40 |
+ ((uint64_t)strm->next_in[2]) << 32 |
+ ((uint32_t)strm->next_in[5]) << 24 |
+ ((uint32_t)strm->next_in[4]) << 16 |
+ ((uint32_t)strm->next_in[7]) << 8 |
+ (uint32_t)strm->next_in[6];
strm->next_in += 8;
strm->avail_in -= 8;
br->cache_avail += 8 * 8;
@@ -2271,11 +2272,12 @@ lzx_br_fillup(struct lzx_stream *strm, struct lzx_br *br)
if (strm->avail_in >= 6) {
br->cache_buffer =
(br->cache_buffer << 48) |
- (((uint64_t)archive_le16dec(
- strm->next_in)) << 32) |
- (((uint32_t)archive_le16dec(
- strm->next_in+2)) << 16) |
- archive_le16dec(strm->next_in+4);
+ ((uint64_t)strm->next_in[1]) << 40 |
+ ((uint64_t)strm->next_in[0]) << 32 |
+ ((uint32_t)strm->next_in[3]) << 24 |
+ ((uint32_t)strm->next_in[2]) << 16 |
+ ((uint32_t)strm->next_in[5]) << 8 |
+ (uint32_t)strm->next_in[4];
strm->next_in += 6;
strm->avail_in -= 6;
br->cache_avail += 6 * 8;