From 14e52c74bc7492098ea630bc84514fb427ef8bd9 Mon Sep 17 00:00:00 2001 From: Brad Fitzpatrick Date: Mon, 17 Jun 2013 07:30:04 -0700 Subject: [PATCH] crypto/cipher: StreamWriter.Closer docs + behavior change Don't panic when the underlying Writer isn't a Closer. And document what Close does and clarify that it's not a Flush. R=golang-dev, agl CC=golang-dev https://golang.org/cl/10310043 --- src/pkg/crypto/cipher/io.go | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/pkg/crypto/cipher/io.go b/src/pkg/crypto/cipher/io.go index 807e8daeaf..3938c0a4c8 100644 --- a/src/pkg/crypto/cipher/io.go +++ b/src/pkg/crypto/cipher/io.go @@ -25,6 +25,8 @@ func (r StreamReader) Read(dst []byte) (n int, err error) { // StreamWriter wraps a Stream into an io.Writer. It calls XORKeyStream // to process each slice of data which passes through. If any Write call // returns short then the StreamWriter is out of sync and must be discarded. +// A StreamWriter has no internal buffering; Close does not need +// to be called to flush write data. type StreamWriter struct { S Stream W io.Writer @@ -43,8 +45,11 @@ func (w StreamWriter) Write(src []byte) (n int, err error) { return } +// Close closes the underlying Writer and returns its Close return value, if the Writer +// is also an io.Closer. Otherwise it returns nil. func (w StreamWriter) Close() error { - // This saves us from either requiring a WriteCloser or having a - // StreamWriterCloser. - return w.W.(io.Closer).Close() + if c, ok := w.W.(io.Closer); ok { + return c.Close() + } + return nil }