diff options
Diffstat (limited to 'vendor/github.com/tdewolff/parse/v2/buffer')
-rw-r--r-- | vendor/github.com/tdewolff/parse/v2/buffer/writer.go | 28 |
1 files changed, 26 insertions, 2 deletions
diff --git a/vendor/github.com/tdewolff/parse/v2/buffer/writer.go b/vendor/github.com/tdewolff/parse/v2/buffer/writer.go index b3c9990d9..6c94201ff 100644 --- a/vendor/github.com/tdewolff/parse/v2/buffer/writer.go +++ b/vendor/github.com/tdewolff/parse/v2/buffer/writer.go @@ -1,14 +1,29 @@ package buffer +import ( + "io" +) + // Writer implements an io.Writer over a byte slice. type Writer struct { - buf []byte + buf []byte + err error + expand bool } // NewWriter returns a new Writer for a given byte slice. func NewWriter(buf []byte) *Writer { return &Writer{ - buf: buf, + buf: buf, + expand: true, + } +} + +// NewStaticWriter returns a new Writer for a given byte slice. It does not reallocate and expand the byte-slice. +func NewStaticWriter(buf []byte) *Writer { + return &Writer{ + buf: buf, + expand: false, } } @@ -17,6 +32,10 @@ func (w *Writer) Write(b []byte) (int, error) { n := len(b) end := len(w.buf) if end+n > cap(w.buf) { + if !w.expand { + w.err = io.EOF + return 0, io.EOF + } buf := make([]byte, end, 2*cap(w.buf)+n) copy(buf, w.buf) w.buf = buf @@ -39,3 +58,8 @@ func (w *Writer) Bytes() []byte { func (w *Writer) Reset() { w.buf = w.buf[:0] } + +// Close returns the last error. +func (w *Writer) Close() error { + return w.err +} |