1 // Copyright 2015 The etcd Authors 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 // Package ioutil implements I/O utility functions. 16 package ioutil 17 18 import "io" 19 20 // NewLimitedBufferReader returns a reader that reads from the given reader 21 // but limits the amount of data returned to at most n bytes. 22 func NewLimitedBufferReader(r io.Reader, n int) io.Reader { 23 return &limitedBufferReader{ 24 r: r, 25 n: n, 26 } 27 } 28 29 type limitedBufferReader struct { 30 r io.Reader 31 n int 32 } 33 34 func (r *limitedBufferReader) Read(p []byte) (n int, err error) { 35 np := p 36 if len(np) > r.n { 37 np = np[:r.n] 38 } 39 return r.r.Read(np) 40 } 41