diff options
author | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2016-07-30 16:14:41 +0300 |
---|---|---|
committer | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2016-07-30 16:21:02 +0300 |
commit | a0859dc67284988a397e265f7e83ea07357e9eb8 (patch) | |
tree | c55c13a55b474281788ea35433ddc121d26dde5e /source/lazy_file_reader.go | |
parent | 94892726816ce0c0af05e10c4706149f4b4baf1c (diff) |
Make LazyFileReader use the Afero source fs
Fixes #2317
Diffstat (limited to 'source/lazy_file_reader.go')
-rw-r--r-- | source/lazy_file_reader.go | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/source/lazy_file_reader.go b/source/lazy_file_reader.go index 6e75055ad..8ebe8df21 100644 --- a/source/lazy_file_reader.go +++ b/source/lazy_file_reader.go @@ -19,14 +19,15 @@ import ( "errors" "fmt" "io" - "io/ioutil" - "os" + + "github.com/spf13/afero" ) // LazyFileReader is an io.Reader implementation to postpone reading the file // contents until it is really needed. It keeps filename and file contents once // it is read. type LazyFileReader struct { + fs afero.Fs filename string contents *bytes.Reader pos int64 @@ -35,13 +36,13 @@ type LazyFileReader struct { // NewLazyFileReader creates and initializes a new LazyFileReader of filename. // It checks whether the file can be opened. If it fails, it returns nil and an // error. -func NewLazyFileReader(filename string) (*LazyFileReader, error) { - f, err := os.Open(filename) +func NewLazyFileReader(fs afero.Fs, filename string) (*LazyFileReader, error) { + f, err := fs.Open(filename) if err != nil { return nil, err } defer f.Close() - return &LazyFileReader{filename: filename, contents: nil, pos: 0}, nil + return &LazyFileReader{fs: fs, filename: filename, contents: nil, pos: 0}, nil } // Filename returns a file name which LazyFileReader keeps @@ -55,7 +56,7 @@ func (l *LazyFileReader) Filename() string { // the file. func (l *LazyFileReader) Read(p []byte) (n int, err error) { if l.contents == nil { - b, err := ioutil.ReadFile(l.filename) + b, err := afero.ReadFile(l.fs, l.filename) if err != nil { return 0, fmt.Errorf("failed to read content from %s: %s", l.filename, err.Error()) } @@ -80,7 +81,7 @@ func (l *LazyFileReader) Seek(offset int64, whence int) (pos int64, err error) { case 1: pos = l.pos + offset case 2: - fi, err := os.Stat(l.filename) + fi, err := l.fs.Stat(l.filename) if err != nil { return 0, fmt.Errorf("failed to get %q info: %s", l.filename, err.Error()) } @@ -115,7 +116,7 @@ func (l *LazyFileReader) WriteTo(w io.Writer) (n int64, err error) { l.pos += n return n, err } - f, err := os.Open(l.filename) + f, err := l.fs.Open(l.filename) if err != nil { return 0, fmt.Errorf("failed to open %s to read content: %s", l.filename, err.Error()) } |