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