• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

bodgit / sevenzip / 18629228221

19 Oct 2025 10:36AM UTC coverage: 45.423% (-28.8%) from 74.173%
18629228221

Pull #388

github

bodgit
ci: Test on Golang 1.25 & 1.24
Pull Request #388: chore(deps): bump golang.org/x/sync from 0.10.0 to 0.17.0

1057 of 2327 relevant lines covered (45.42%)

1.04 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/internal/zstd/reader.go
1
// Package zstd implements the Zstandard decompressor.
2
package zstd
3

4
import (
5
        "errors"
6
        "fmt"
7
        "io"
8
        "runtime"
9
        "sync"
10

11
        "github.com/klauspost/compress/zstd"
12
)
13

14
type readCloser struct {
15
        c io.Closer
16
        r *zstd.Decoder
17
}
18

19
var (
20
        //nolint:gochecknoglobals
21
        zstdReaderPool sync.Pool
22

23
        errAlreadyClosed = errors.New("zstd: already closed")
24
        errNeedOneReader = errors.New("zstd: need exactly one reader")
25
)
26

27
func (rc *readCloser) Close() error {
×
28
        if rc.c == nil {
×
29
                return errAlreadyClosed
×
30
        }
×
31

32
        if err := rc.c.Close(); err != nil {
×
33
                return fmt.Errorf("zstd: error closing: %w", err)
×
34
        }
×
35

36
        zstdReaderPool.Put(rc.r)
×
37
        rc.c, rc.r = nil, nil
×
38

×
39
        return nil
×
40
}
41

42
func (rc *readCloser) Read(p []byte) (int, error) {
×
43
        if rc.r == nil {
×
44
                return 0, errAlreadyClosed
×
45
        }
×
46

47
        n, err := rc.r.Read(p)
×
48
        if err != nil && !errors.Is(err, io.EOF) {
×
49
                err = fmt.Errorf("zstd: error reading: %w", err)
×
50
        }
×
51

52
        return n, err
×
53
}
54

55
// NewReader returns a new Zstandard io.ReadCloser.
56
func NewReader(_ []byte, _ uint64, readers []io.ReadCloser) (io.ReadCloser, error) {
×
57
        if len(readers) != 1 {
×
58
                return nil, errNeedOneReader
×
59
        }
×
60

61
        var err error
×
62

×
63
        r, ok := zstdReaderPool.Get().(*zstd.Decoder)
×
64
        if ok {
×
65
                if err = r.Reset(readers[0]); err != nil {
×
66
                        return nil, fmt.Errorf("zstd: error resetting: %w", err)
×
67
                }
×
68
        } else {
×
69
                if r, err = zstd.NewReader(readers[0]); err != nil {
×
70
                        return nil, fmt.Errorf("zstd: error creating reader: %w", err)
×
71
                }
×
72

73
                runtime.SetFinalizer(r, (*zstd.Decoder).Close)
×
74
        }
75

76
        return &readCloser{
×
77
                c: readers[0],
×
78
                r: r,
×
79
        }, nil
×
80
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc