| // Copyright 2023 The Go Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style | |
| // license that can be found in the LICENSE file. | |
| package database | |
| import ( | |
| "bytes" | |
| "compress/gzip" | |
| "io" | |
| "os" | |
| ) | |
| // writeGzipped compresses the data in data and writes it | |
| // to filename, creating the file if needed. | |
| func writeGzipped(filename string, data []byte) error { | |
| var b bytes.Buffer | |
| w, err := gzip.NewWriterLevel(&b, 9) | |
| if err != nil { | |
| return err | |
| } | |
| defer w.Close() | |
| if _, err := w.Write(data); err != nil { | |
| return err | |
| } | |
| if err := w.Close(); err != nil { | |
| return err | |
| } | |
| if err := os.WriteFile(filename, b.Bytes(), 0644); err != nil { | |
| return err | |
| } | |
| return nil | |
| } | |
| // readGzipped returns the uncompressed bytes of gzipped file filename. | |
| func readGzipped(filename string) ([]byte, error) { | |
| b, err := os.ReadFile(filename) | |
| if err != nil { | |
| return nil, err | |
| } | |
| buf := bytes.NewBuffer(b) | |
| r, err := gzip.NewReader(buf) | |
| if err != nil { | |
| return nil, err | |
| } | |
| defer r.Close() | |
| return io.ReadAll(r) | |
| } |