| // 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 | |
| } | |