package iox import ( `io` ) /* CopyBufN is a mix between io.CopyN and io.CopyBuffer. Despite what the docs may suggest, io.CopyN does NOT *read* n bytes from src AND write n bytes to dst. Instead, it always reads 32 KiB from src, and writes n bytes to dst. There are, of course, cases where this is deadfully undesired. One can, of course, use io.CopyBuffer, but this is a bit annoying since you then have to provide a buffer yourself. This convenience-wraps io.CopyBuffer to have a similar signature to io.CopyN but properly uses n for both reading and writing. */ func CopyBufN(dst io.Writer, src io.Reader, n int64) (written int64, err error) { var b []byte if n <= 0 { err = ErrBufTooSmall return } b = make([]byte, n) written, err = io.CopyBuffer(dst, src, b) return } // CopyBufWith allows for specifying a buffer allocator function, otherwise acts as CopyBufN. func CopyBufWith(dst io.Writer, src io.Reader, bufFunc func() (b []byte)) (written int64, err error) { written, err = io.CopyBuffer(dst, src, bufFunc()) return }