diff options
| author | Ophestra <cat@gensokyo.uk> | 2026-07-25 14:03:03 +0900 |
|---|---|---|
| committer | Ophestra <cat@gensokyo.uk> | 2026-07-25 14:03:34 +0900 |
| commit | e5abf51296fa1405c4a6314eafc1b97d247c5b60 (patch) | |
| tree | 8e54f3a684dd0b875756b3a4eca13cd79ab695f1 /internal/pkg/compress.go | |
| parent | e26914cd6f86341daff4c3d7282d9a8cf8e4611a (diff) | |
internal/pkg: decompress xz streams
This uses a port of the public domain xz implementation.
Signed-off-by: Ophestra <cat@gensokyo.uk>
Diffstat (limited to 'internal/pkg/compress.go')
| -rw-r--r-- | internal/pkg/compress.go | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/internal/pkg/compress.go b/internal/pkg/compress.go index 62faf4fc..22f990f1 100644 --- a/internal/pkg/compress.go +++ b/internal/pkg/compress.go @@ -7,6 +7,7 @@ import ( "io" "os" + "hakurei.app/internal/xz" "hakurei.app/internal/zstd" ) @@ -17,6 +18,8 @@ const ( Bzip2 // Zstd denotes a stream compressed via [zstd]. Zstd + // XZ denotes a stream compressed via [xz]. + XZ ) // A decompressArtifact is a [FileArtifact] decompressing a backing @@ -127,6 +130,17 @@ func (a *decompressArtifact) Cure(r *RContext) (io.ReadCloser, error) { io.Closer }{zstd.NewReader(br), br}, nil + case XZ: + var _dr io.Reader + if _dr, err = xz.NewReader(br, 0); err != nil { + _ = br.Close() + return nil, err + } + return struct { + io.Reader + io.Closer + }{_dr, br}, nil + default: return nil, os.ErrInvalid } |
