cat: don't allocate buffers if not needed to reduce memory usage

This commit is contained in:
Nick Craig-Wood 2017-02-09 11:46:53 +00:00
parent dd20a297d6
commit 50e190ff54

View File

@ -1262,10 +1262,13 @@ func Cat(f Fs, w io.Writer, offset, count int64) error {
defer func() {
Stats.DoneTransferring(o.Remote(), err == nil)
}()
size := o.Size()
thisOffset := offset
if thisOffset < 0 {
thisOffset += o.Size()
thisOffset += size
}
// size remaining is now reduced by thisOffset
size -= thisOffset
var options []OpenOption
if thisOffset > 0 {
options = append(options, &SeekOption{Offset: thisOffset})
@ -1278,8 +1281,12 @@ func Cat(f Fs, w io.Writer, offset, count int64) error {
}
if count >= 0 {
in = &readCloser{Reader: &io.LimitedReader{R: in, N: count}, Closer: in}
// reduce remaining size to count
if size > count {
size = count
}
}
in = NewAccountWithBuffer(in, o) // account and buffer the transfer
in = NewAccountSizeNameWithBuffer(in, size, o.Remote()) // account and buffer the transfer
defer func() {
err = in.Close()
if err != nil {