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