diff options
| author | Ron Yorston <rmy@pobox.com> | 2026-03-24 12:15:33 +0000 |
|---|---|---|
| committer | Ron Yorston <rmy@pobox.com> | 2026-03-24 12:15:33 +0000 |
| commit | aaae1865727bcd53da581340456de34dfb182d5c (patch) | |
| tree | b0be881225fad8bcb14977854b248539b7d81ea2 /archival/libarchive/open_transformer.c | |
| parent | 052807cc3330b3c5c1fb60b93ad0d2039d6142df (diff) | |
| download | busybox-w32-zstd.tar.gz busybox-w32-zstd.tar.bz2 busybox-w32-zstd.zip | |
archival: support zstd in rpm and dpkgzstd
Diffstat (limited to 'archival/libarchive/open_transformer.c')
| -rw-r--r-- | archival/libarchive/open_transformer.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/archival/libarchive/open_transformer.c b/archival/libarchive/open_transformer.c index 9f41c7b4f..375e7b249 100644 --- a/archival/libarchive/open_transformer.c +++ b/archival/libarchive/open_transformer.c | |||
| @@ -211,11 +211,14 @@ static transformer_state_t *setup_transformer_on_fd(int fd, int die_if_not_compr | |||
| 211 | } | 211 | } |
| 212 | 212 | ||
| 213 | if (ENABLE_FEATURE_SEAMLESS_ZSTD && xstate->magic.b16[0] == ZSTD_MAGIC1) { | 213 | if (ENABLE_FEATURE_SEAMLESS_ZSTD && xstate->magic.b16[0] == ZSTD_MAGIC1) { |
| 214 | xstate->signature_skipped = 4; | ||
| 215 | xread(fd, &xstate->magic.b16[1], 2); | 214 | xread(fd, &xstate->magic.b16[1], 2); |
| 216 | if (xstate->magic.b16[1] == ZSTD_MAGIC2) { | 215 | if (xstate->magic.b16[1] == ZSTD_MAGIC2) { |
| 217 | xstate->xformer = unpack_zstd_stream; | 216 | xstate->xformer = unpack_zstd_stream; |
| 218 | USE_FOR_NOMMU(xstate->xformer_prog = "unzstd";) | 217 | USE_FOR_NOMMU(xstate->xformer_prog = "unzstd";) |
| 218 | // FIXME We execute an external decompressor even on MMU. | ||
| 219 | // Force a seek back to the signature. | ||
| 220 | xstate->signature_skipped = 0; | ||
| 221 | xlseek(xstate->src_fd, -4, SEEK_CUR); | ||
| 219 | goto found_magic; | 222 | goto found_magic; |
| 220 | } | 223 | } |
| 221 | } | 224 | } |
