function old new delta unpack_lzma_stream 2398 2251 -147 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-147) Total: -147 bytes --- archival/libunarchive/decompress_unlzma.c 2008-03-02 09:20:20.000000000 +0100 +++ archival/libunarchive/decompress_unlzma.c 2008-03-02 14:44:45.000000000 +0100 @@ -317,22 +317,16 @@ prob_lit = prob + mi; rc_get_bit(rc, prob_lit, &mi); } - previous_byte = (uint8_t) mi; - buffer[buffer_pos++] = previous_byte; - if (buffer_pos == header.dict_size) { - buffer_pos = 0; - global_pos += header.dict_size; - if (full_write(dst_fd, buffer, header.dict_size) != header.dict_size) - goto bad; - USE_DESKTOP(total_written += header.dict_size;) - } - if (state < 4) + state -= 3; + if (state < 4-3) state = 0; - else if (state < 10) - state -= 3; - else - state -= 6; + if (state >= 10-3) + state -= 6-3; + + previous_byte = (uint8_t) mi; + len = 1; + goto one_byte; } else { int offset; uint16_t *prob_len; @@ -357,19 +351,8 @@ rc_update_bit_0(rc, prob); state = state < LZMA_NUM_LIT_STATES ? 9 : 11; - pos = buffer_pos - rep0; - while (pos >= header.dict_size) - pos += header.dict_size; - previous_byte = buffer[pos]; - buffer[buffer_pos++] = previous_byte; - if (buffer_pos == header.dict_size) { - buffer_pos = 0; - global_pos += header.dict_size; - if (full_write(dst_fd, buffer, header.dict_size) != header.dict_size) - goto bad; - USE_DESKTOP(total_written += header.dict_size;) - } - continue; + len = 1; + goto string; } else { rc_update_bit_1(rc, prob); } @@ -469,11 +452,13 @@ len += LZMA_MATCH_MIN_LEN; + string: do { pos = buffer_pos - rep0; while (pos >= header.dict_size) pos += header.dict_size; previous_byte = buffer[pos]; + one_byte: buffer[buffer_pos++] = previous_byte; if (buffer_pos == header.dict_size) { buffer_pos = 0;