aboutsummaryrefslogtreecommitdiffhomepage
path: root/internal/xz/dec_util.go
diff options
context:
space:
mode:
authorOphestra <cat@gensokyo.uk>2026-07-25 14:03:03 +0900
committerOphestra <cat@gensokyo.uk>2026-07-25 14:03:34 +0900
commite5abf51296fa1405c4a6314eafc1b97d247c5b60 (patch)
tree8e54f3a684dd0b875756b3a4eca13cd79ab695f1 /internal/xz/dec_util.go
parente26914cd6f86341daff4c3d7282d9a8cf8e4611a (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/xz/dec_util.go')
-rw-r--r--internal/xz/dec_util.go52
1 files changed, 52 insertions, 0 deletions
diff --git a/internal/xz/dec_util.go b/internal/xz/dec_util.go
new file mode 100644
index 00000000..c4227522
--- /dev/null
+++ b/internal/xz/dec_util.go
@@ -0,0 +1,52 @@
+/*
+ * XZ decompressor utility functions
+ *
+ * Author: Michael Cross <https://github.com/xi2>
+ *
+ * This file has been put into the public domain.
+ * You can do whatever you want with this file.
+ */
+
+package xz
+
+func getLE32(buf []byte) uint32 {
+ return uint32(buf[0]) |
+ uint32(buf[1])<<8 |
+ uint32(buf[2])<<16 |
+ uint32(buf[3])<<24
+}
+
+func getBE32(buf []byte) uint32 {
+ return uint32(buf[0])<<24 |
+ uint32(buf[1])<<16 |
+ uint32(buf[2])<<8 |
+ uint32(buf[3])
+}
+
+func putLE32(val uint32, buf []byte) {
+ buf[0] = byte(val)
+ buf[1] = byte(val >> 8)
+ buf[2] = byte(val >> 16)
+ buf[3] = byte(val >> 24)
+ return
+}
+
+func putBE32(val uint32, buf []byte) {
+ buf[0] = byte(val >> 24)
+ buf[1] = byte(val >> 16)
+ buf[2] = byte(val >> 8)
+ buf[3] = byte(val)
+ return
+}
+
+func putLE64(val uint64, buf []byte) {
+ buf[0] = byte(val)
+ buf[1] = byte(val >> 8)
+ buf[2] = byte(val >> 16)
+ buf[3] = byte(val >> 24)
+ buf[4] = byte(val >> 32)
+ buf[5] = byte(val >> 40)
+ buf[6] = byte(val >> 48)
+ buf[7] = byte(val >> 56)
+ return
+}