// Copyright 2009 The Go Authors. All rights reserved. | |
// Use of this source code is governed by a BSD-style | |
// license that can be found in the LICENSE file. | |
package iotest | |
import "io" | |
// TruncateWriter returns a Writer that writes to w | |
// but stops silently after n bytes. | |
func TruncateWriter(w io.Writer, n int64) io.Writer { | |
return &truncateWriter{w, n} | |
} | |
type truncateWriter struct { | |
w io.Writer | |
n int64 | |
} | |
func (t *truncateWriter) Write(p []byte) (n int, err error) { | |
if t.n <= 0 { | |
return len(p), nil | |
} | |
// real write | |
n = len(p) | |
if int64(n) > t.n { | |
n = int(t.n) | |
} | |
n, err = t.w.Write(p[0:n]) | |
t.n -= int64(n) | |
if err == nil { | |
n = len(p) | |
} | |
return | |
} |