1
0
Fork 0
mirror of https://git.tukaani.org/xz.git synced 2024-04-04 12:36:23 +02:00

xz: Do not include block splitting if encoders are disabled.

The block splitting logic and split_block() function are not needed if
encoders are disabled. This will help slightly reduce the binary size
when built without encoders and allow split_block() to use functions
that require encoders being enabled.
This commit is contained in:
Jia Tan 2023-05-10 21:50:33 +08:00
parent f86ede2250
commit 479fd58d60

View file

@ -829,6 +829,7 @@ coder_init(file_pair *pair)
} }
#ifdef HAVE_ENCODERS
/// Resolve conflicts between opt_block_size and opt_block_list in single /// Resolve conflicts between opt_block_size and opt_block_list in single
/// threaded mode. We want to default to opt_block_list, except when it is /// threaded mode. We want to default to opt_block_list, except when it is
/// larger than opt_block_size. If this is the case for the current Block /// larger than opt_block_size. If this is the case for the current Block
@ -904,6 +905,7 @@ split_block(uint64_t *block_remaining,
} }
} }
} }
#endif
static bool static bool
@ -936,6 +938,7 @@ coder_normal(file_pair *pair)
// Assume that something goes wrong. // Assume that something goes wrong.
bool success = false; bool success = false;
#ifdef HAVE_ENCODERS
// block_remaining indicates how many input bytes to encode before // block_remaining indicates how many input bytes to encode before
// finishing the current .xz Block. The Block size is set with // finishing the current .xz Block. The Block size is set with
// --block-size=SIZE and --block-list. They have an effect only when // --block-size=SIZE and --block-list. They have an effect only when
@ -980,6 +983,7 @@ coder_normal(file_pair *pair)
} }
} }
} }
#endif
strm.next_out = out_buf.u8; strm.next_out = out_buf.u8;
strm.avail_out = IO_BUFFER_SIZE; strm.avail_out = IO_BUFFER_SIZE;
@ -989,17 +993,22 @@ coder_normal(file_pair *pair)
// flushing or finishing. // flushing or finishing.
if (strm.avail_in == 0 && action == LZMA_RUN) { if (strm.avail_in == 0 && action == LZMA_RUN) {
strm.next_in = in_buf.u8; strm.next_in = in_buf.u8;
strm.avail_in = io_read(pair, &in_buf, #ifdef HAVE_ENCODERS
my_min(block_remaining, const size_t read_size = my_min(block_remaining,
IO_BUFFER_SIZE)); IO_BUFFER_SIZE);
#else
const size_t read_size = IO_BUFFER_SIZE;
#endif
strm.avail_in = io_read(pair, &in_buf, read_size);
if (strm.avail_in == SIZE_MAX) if (strm.avail_in == SIZE_MAX)
break; break;
if (pair->src_eof) { if (pair->src_eof) {
action = LZMA_FINISH; action = LZMA_FINISH;
}
} else if (block_remaining != UINT64_MAX) { #ifdef HAVE_ENCODERS
else if (block_remaining != UINT64_MAX) {
// Start a new Block after every // Start a new Block after every
// opt_block_size bytes of input. // opt_block_size bytes of input.
block_remaining -= strm.avail_in; block_remaining -= strm.avail_in;
@ -1009,17 +1018,18 @@ coder_normal(file_pair *pair)
if (action == LZMA_RUN && pair->flush_needed) if (action == LZMA_RUN && pair->flush_needed)
action = LZMA_SYNC_FLUSH; action = LZMA_SYNC_FLUSH;
#endif
} }
// Let liblzma do the actual work. // Let liblzma do the actual work.
ret = lzma_code(&strm, action); ret = lzma_code(&strm, action);
// Write out if the output buffer became full. // Write out if the output buffer became full.
if (strm.avail_out == 0) { if (strm.avail_out == 0)
if (coder_write_output(pair)) if (coder_write_output(pair))
break; break;
}
#ifdef HAVE_ENCODERS
if (ret == LZMA_STREAM_END && (action == LZMA_SYNC_FLUSH if (ret == LZMA_STREAM_END && (action == LZMA_SYNC_FLUSH
|| action == LZMA_FULL_BARRIER)) { || action == LZMA_FULL_BARRIER)) {
if (action == LZMA_SYNC_FLUSH) { if (action == LZMA_SYNC_FLUSH) {
@ -1049,8 +1059,9 @@ coder_normal(file_pair *pair)
// Start a new Block after LZMA_FULL_FLUSH or continue // Start a new Block after LZMA_FULL_FLUSH or continue
// the same block after LZMA_SYNC_FLUSH. // the same block after LZMA_SYNC_FLUSH.
action = LZMA_RUN; action = LZMA_RUN;
} else
} else if (ret != LZMA_OK) { #endif
if (ret != LZMA_OK) {
// Determine if the return value indicates that we // Determine if the return value indicates that we
// won't continue coding. LZMA_NO_CHECK would be // won't continue coding. LZMA_NO_CHECK would be
// here too if LZMA_TELL_ANY_CHECK was used. // here too if LZMA_TELL_ANY_CHECK was used.