From 5c0b6e83664e390cb8542d2b9ba3fdd92318d959 Mon Sep 17 00:00:00 2001 From: Charles Mita Date: Fri, 17 Aug 2018 17:50:54 +0100 Subject: [PATCH] Check if the bitshuffle filter was applied before decompressing --- src/file.c | 40 +++++++++++++++++++++++----------------- 1 file changed, 23 insertions(+), 17 deletions(-) diff --git a/src/file.c b/src/file.c index 018061f..20ca72b 100644 --- a/src/file.c +++ b/src/file.c @@ -215,12 +215,16 @@ int get_frame_from_chunk(const struct ds_desc_t *desc, ERROR_JUMP(-1, done, message); } - c_buffer = malloc(c_bytes); - if (!c_buffer) { - char message[128]; - sprintf(message, "Unable to allocate chunk buffer for dataset %.32s - frame %llu, size %llu bytes", - ds_name, frame_idx[0], c_bytes); - ERROR_JUMP(-1, done, message); + if (o_eiger_desc->bs_applied) { + c_buffer = malloc(c_bytes); + if (!c_buffer) { + char message[128]; + sprintf(message, "Unable to allocate chunk buffer for dataset %.32s - frame %llu, size %llu bytes", + ds_name, frame_idx[0], c_bytes); + ERROR_JUMP(-1, done, message); + } + } else { + c_buffer = buffer; } if (H5DOread_chunk(d_id, H5P_DEFAULT, c_offset, &c_filter_mask, c_buffer) < 0) { @@ -230,20 +234,22 @@ int get_frame_from_chunk(const struct ds_desc_t *desc, ERROR_JUMP(-1, done, message); } - if (bslz4_decompress( - o_eiger_desc->bs_params, - c_bytes, - c_buffer, - desc->data_width * frame_size[1] * frame_size[2], - buffer) < 0) { - char message[128]; - sprintf(message, "Error processing chunk %llu from %.32s with bitshuffle_lz4", - frame_idx[0], ds_name); - ERROR_JUMP(-1, done, message); + if (o_eiger_desc->bs_applied) { + if (bslz4_decompress( + o_eiger_desc->bs_params, + c_bytes, + c_buffer, + desc->data_width * frame_size[1] * frame_size[2], + buffer) < 0) { + char message[128]; + sprintf(message, "Error processing chunk %llu from %.32s with bitshuffle_lz4", + frame_idx[0], ds_name); + ERROR_JUMP(-1, done, message); + } } done: - if (c_buffer) free(c_buffer); + if (c_buffer && (c_buffer != buffer)) free(c_buffer); if (d_id) H5Dclose(d_id); return retval; }