Changeset: 16158a5cc256 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=16158a5cc256
Modified Files:
common/stream/bz2_stream.c
Branch: default
Log Message:
Support reading concatenated .bz2 files in libstream
diffs (49 lines):
diff --git a/common/stream/bz2_stream.c b/common/stream/bz2_stream.c
--- a/common/stream/bz2_stream.c
+++ b/common/stream/bz2_stream.c
@@ -20,6 +20,7 @@ struct inner_state {
bz_stream strm;
int (*work)(bz_stream *strm, int flush);
int (*end)(bz_stream *strm);
+ void (*reset)(inner_state_t *inner_state);
bool eof_reached;
char buf[64*1024];
};
@@ -108,6 +109,11 @@ work(inner_state_t *inner_state, pump_ac
/* flushing and finishing is not yet done */
return PUMP_OK;
case BZ_STREAM_END:
+ if (action == PUMP_NO_FLUSH && inner_state->reset !=
NULL) {
+ // attempt to read concatenated additional bz2
stream
+ inner_state->reset(inner_state);
+ return PUMP_OK;
+ }
inner_state->eof_reached = true;
return PUMP_END;
default:
@@ -136,6 +142,17 @@ BZ2_bzDecompress_wrapper(bz_stream *strm
return BZ2_bzDecompress(strm);
}
+static void
+bz2_decompress_reset(inner_state_t *inner_state)
+{
+ pump_buffer src = get_src_win(inner_state);
+ pump_buffer dst = get_dst_win(inner_state);
+ BZ2_bzDecompressEnd(&inner_state->strm);
+ BZ2_bzDecompressInit(&inner_state->strm, 0, 0);
+ set_src_win(inner_state, src);
+ set_dst_win(inner_state, dst);
+}
+
stream *
bz2_stream(stream *inner, int level)
{
@@ -162,6 +179,7 @@ bz2_stream(stream *inner, int level)
if (inner->readonly) {
bz->work = BZ2_bzDecompress_wrapper;
bz->end = BZ2_bzDecompressEnd;
+ bz->reset = bz2_decompress_reset;
ret = BZ2_bzDecompressInit(&bz->strm, 0, 0);
} else {
bz->work = BZ2_bzCompress;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list