From 043c35cda49c77b6b7b0085dff6ec5163c434208 Mon Sep 17 00:00:00 2001 From: Sumner Evans Date: Mon, 8 Jul 2024 14:40:11 -0600 Subject: [PATCH] gnuzip: add utilities from beeper/imessage Signed-off-by: Sumner Evans --- gnuzip/gunzip.go | 27 +++++++++++++++++++++++++++ gnuzip/gzip.go | 21 +++++++++++++++++++++ 2 files changed, 48 insertions(+) create mode 100644 gnuzip/gunzip.go create mode 100644 gnuzip/gzip.go diff --git a/gnuzip/gunzip.go b/gnuzip/gunzip.go new file mode 100644 index 0000000..62f8bf7 --- /dev/null +++ b/gnuzip/gunzip.go @@ -0,0 +1,27 @@ +// Copyright (C) 2024 Sumner Evans +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +package gnuzip + +import ( + "bytes" + "compress/gzip" + "errors" + "io" +) + +func MaybeGUnzip(body []byte) ([]byte, error) { + reader, err := gzip.NewReader(bytes.NewReader(body)) + if err != nil { + if errors.Is(err, gzip.ErrHeader) { + return body, nil + } else { + return nil, err + } + } + defer reader.Close() + return io.ReadAll(reader) +} diff --git a/gnuzip/gzip.go b/gnuzip/gzip.go new file mode 100644 index 0000000..95bf14a --- /dev/null +++ b/gnuzip/gzip.go @@ -0,0 +1,21 @@ +// Copyright (C) 2024 Sumner Evans +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +package gnuzip + +import ( + "bytes" + "compress/gzip" +) + +func GZip(body []byte) ([]byte, error) { + var compressedBuffer bytes.Buffer + writer := gzip.NewWriter(&compressedBuffer) + if _, err := writer.Write(body); err != nil { + return nil, err + } + return compressedBuffer.Bytes(), writer.Close() +}