forked from TrueCloudLab/restic
backend: move LimitReadCloser to util package
The helper is only intended for usage by backend implementations.
This commit is contained in:
parent
dcd151147c
commit
47232bf8b0
5 changed files with 20 additions and 16 deletions
|
@ -247,7 +247,7 @@ func (b *Local) openReader(_ context.Context, h backend.Handle, length int, offs
|
||||||
}
|
}
|
||||||
|
|
||||||
if length > 0 {
|
if length > 0 {
|
||||||
return backend.LimitReadCloser(f, int64(length)), nil
|
return util.LimitReadCloser(f, int64(length)), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
return f, nil
|
return f, nil
|
||||||
|
|
|
@ -437,7 +437,7 @@ func (r *SFTP) Load(ctx context.Context, h backend.Handle, length int, offset in
|
||||||
|
|
||||||
// check the underlying reader to be agnostic to however fn() handles the returned error
|
// check the underlying reader to be agnostic to however fn() handles the returned error
|
||||||
_, rderr := rd.Read([]byte{0})
|
_, rderr := rd.Read([]byte{0})
|
||||||
if rderr == io.EOF && rd.(*backend.LimitedReadCloser).N != 0 {
|
if rderr == io.EOF && rd.(*util.LimitedReadCloser).N != 0 {
|
||||||
// file is too short
|
// file is too short
|
||||||
return fmt.Errorf("%w: %v", errTooShort, err)
|
return fmt.Errorf("%w: %v", errTooShort, err)
|
||||||
}
|
}
|
||||||
|
@ -463,7 +463,7 @@ func (r *SFTP) openReader(_ context.Context, h backend.Handle, length int, offse
|
||||||
if length > 0 {
|
if length > 0 {
|
||||||
// unlimited reads usually use io.Copy which needs WriteTo support at the underlying reader
|
// unlimited reads usually use io.Copy which needs WriteTo support at the underlying reader
|
||||||
// limited reads are usually combined with io.ReadFull which reads all required bytes into a buffer in one go
|
// limited reads are usually combined with io.ReadFull which reads all required bytes into a buffer in one go
|
||||||
return backend.LimitReadCloser(f, int64(length)), nil
|
return util.LimitReadCloser(f, int64(length)), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
return f, nil
|
return f, nil
|
||||||
|
|
15
internal/backend/util/limited_reader.go
Normal file
15
internal/backend/util/limited_reader.go
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
package util
|
||||||
|
|
||||||
|
import "io"
|
||||||
|
|
||||||
|
// LimitedReadCloser wraps io.LimitedReader and exposes the Close() method.
|
||||||
|
type LimitedReadCloser struct {
|
||||||
|
io.Closer
|
||||||
|
io.LimitedReader
|
||||||
|
}
|
||||||
|
|
||||||
|
// LimitReadCloser returns a new reader wraps r in an io.LimitedReader, but also
|
||||||
|
// exposes the Close() method.
|
||||||
|
func LimitReadCloser(r io.ReadCloser, n int64) *LimitedReadCloser {
|
||||||
|
return &LimitedReadCloser{Closer: r, LimitedReader: io.LimitedReader{R: r, N: n}}
|
||||||
|
}
|
|
@ -62,15 +62,3 @@ func LoadAll(ctx context.Context, buf []byte, be Backend, h Handle) ([]byte, err
|
||||||
|
|
||||||
return buf, nil
|
return buf, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// LimitedReadCloser wraps io.LimitedReader and exposes the Close() method.
|
|
||||||
type LimitedReadCloser struct {
|
|
||||||
io.Closer
|
|
||||||
io.LimitedReader
|
|
||||||
}
|
|
||||||
|
|
||||||
// LimitReadCloser returns a new reader wraps r in an io.LimitedReader, but also
|
|
||||||
// exposes the Close() method.
|
|
||||||
func LimitReadCloser(r io.ReadCloser, n int64) *LimitedReadCloser {
|
|
||||||
return &LimitedReadCloser{Closer: r, LimitedReader: io.LimitedReader{R: r, N: n}}
|
|
||||||
}
|
|
||||||
|
|
3
internal/cache/file.go
vendored
3
internal/cache/file.go
vendored
|
@ -8,6 +8,7 @@ import (
|
||||||
|
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
"github.com/restic/restic/internal/backend"
|
"github.com/restic/restic/internal/backend"
|
||||||
|
"github.com/restic/restic/internal/backend/util"
|
||||||
"github.com/restic/restic/internal/crypto"
|
"github.com/restic/restic/internal/crypto"
|
||||||
"github.com/restic/restic/internal/debug"
|
"github.com/restic/restic/internal/debug"
|
||||||
"github.com/restic/restic/internal/fs"
|
"github.com/restic/restic/internal/fs"
|
||||||
|
@ -74,7 +75,7 @@ func (c *Cache) load(h backend.Handle, length int, offset int64) (io.ReadCloser,
|
||||||
if length <= 0 {
|
if length <= 0 {
|
||||||
return f, nil
|
return f, nil
|
||||||
}
|
}
|
||||||
return backend.LimitReadCloser(f, int64(length)), nil
|
return util.LimitReadCloser(f, int64(length)), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Save saves a file in the cache.
|
// Save saves a file in the cache.
|
||||||
|
|
Loading…
Reference in a new issue