]> Cypherpunks repositories - gostls13.git/commitdiff
ioutil: add NopCloser
authorBrad Fitzpatrick <bradfitz@golang.org>
Sun, 13 Mar 2011 00:05:07 +0000 (16:05 -0800)
committerBrad Fitzpatrick <bradfitz@golang.org>
Sun, 13 Mar 2011 00:05:07 +0000 (16:05 -0800)
R=rsc, dsymonds
CC=golang-dev
https://golang.org/cl/4278044

src/pkg/archive/zip/reader.go
src/pkg/http/cgi/child.go
src/pkg/http/client.go
src/pkg/http/dump.go
src/pkg/http/requestwrite_test.go
src/pkg/http/responsewrite_test.go
src/pkg/io/ioutil/ioutil.go

index d8d9bba60bc56e977c43213a236af5732360d0e4..3b265c9b72e6fe99cf50fb88ee13fabd44400a77 100644 (file)
@@ -19,6 +19,7 @@ import (
        "hash/crc32"
        "encoding/binary"
        "io"
+       "io/ioutil"
        "os"
 )
 
@@ -109,7 +110,7 @@ func (f *File) Open() (rc io.ReadCloser, err os.Error) {
        r := io.NewSectionReader(f.zipr, off+f.bodyOffset, size)
        switch f.Method {
        case 0: // store (no compression)
-               rc = nopCloser{r}
+               rc = ioutil.NopCloser(r)
        case 8: // DEFLATE
                rc = flate.NewReader(r)
        default:
@@ -147,12 +148,6 @@ func (r *checksumReader) Read(b []byte) (n int, err os.Error) {
 
 func (r *checksumReader) Close() os.Error { return r.rc.Close() }
 
-type nopCloser struct {
-       io.Reader
-}
-
-func (f nopCloser) Close() os.Error { return nil }
-
 func readFileHeader(f *File, r io.Reader) (err os.Error) {
        defer func() {
                if rerr, ok := recover().(os.Error); ok {
index e410c0aa23abbcbf7dab9fee446f2f407b5de071..c7d48b9eb3fbd96bb9d3638e5d29de81f3f8de58 100644 (file)
@@ -12,6 +12,7 @@ import (
        "fmt"
        "http"
        "io"
+       "io/ioutil"
        "os"
        "strconv"
        "strings"
@@ -67,7 +68,7 @@ func requestFromEnvironment(env map[string]string) (*http.Request, os.Error) {
                        return nil, os.NewError("cgi: bad CONTENT_LENGTH in environment: " + lenstr)
                }
                r.ContentLength = clen
-               r.Body = nopCloser{io.LimitReader(os.Stdin, clen)}
+               r.Body = ioutil.NopCloser(io.LimitReader(os.Stdin, clen))
        }
 
        // Copy "HTTP_FOO_BAR" variables to "Foo-Bar" Headers
@@ -103,13 +104,6 @@ func requestFromEnvironment(env map[string]string) (*http.Request, os.Error) {
        return r, nil
 }
 
-// TODO: move this to ioutil or something.  It's copy/pasted way too often.
-type nopCloser struct {
-       io.Reader
-}
-
-func (nopCloser) Close() os.Error { return nil }
-
 // Serve executes the provided Handler on the currently active CGI
 // request, if any. If there's no current CGI environment
 // an error is returned. The provided handler may be nil to use
index c4f7e947d8f3393f7de5727f822b15ae56c51426..c43e58332b9bcd904f846b410bc3f16ff72ded43 100644 (file)
@@ -11,6 +11,7 @@ import (
        "encoding/base64"
        "fmt"
        "io"
+       "io/ioutil"
        "os"
        "strconv"
        "strings"
@@ -235,7 +236,7 @@ func (c *Client) Post(url string, bodyType string, body io.Reader) (r *Response,
        req.ProtoMajor = 1
        req.ProtoMinor = 1
        req.Close = true
-       req.Body = nopCloser{body}
+       req.Body = ioutil.NopCloser(body)
        req.Header = Header{
                "Content-Type": {bodyType},
        }
@@ -270,7 +271,7 @@ func (c *Client) PostForm(url string, data map[string]string) (r *Response, err
        req.ProtoMinor = 1
        req.Close = true
        body := urlencode(data)
-       req.Body = nopCloser{body}
+       req.Body = ioutil.NopCloser(body)
        req.Header = Header{
                "Content-Type":   {"application/x-www-form-urlencoded"},
                "Content-Length": {strconv.Itoa(body.Len())},
@@ -310,9 +311,3 @@ func (c *Client) Head(url string) (r *Response, err os.Error) {
        }
        return send(&req, c.Transport)
 }
-
-type nopCloser struct {
-       io.Reader
-}
-
-func (nopCloser) Close() os.Error { return nil }
index 73ac97973999d4a6476665077b07c8faeffbbe8a..306c45bc2c9398c9281aadc9eb8aec0d94fd56ad 100644 (file)
@@ -7,10 +7,10 @@ package http
 import (
        "bytes"
        "io"
+       "io/ioutil"
        "os"
 )
 
-
 // One of the copies, say from b to r2, could be avoided by using a more
 // elaborate trick where the other copy is made during Request/Response.Write.
 // This would complicate things too much, given that these functions are for
@@ -23,7 +23,7 @@ func drainBody(b io.ReadCloser) (r1, r2 io.ReadCloser, err os.Error) {
        if err = b.Close(); err != nil {
                return nil, nil, err
        }
-       return nopCloser{&buf}, nopCloser{bytes.NewBuffer(buf.Bytes())}, nil
+       return ioutil.NopCloser(&buf), ioutil.NopCloser(bytes.NewBuffer(buf.Bytes())), nil
 }
 
 // DumpRequest returns the wire representation of req,
index 03a766efd8cc276407418c72d61e3a140a31b90d..726baa2668633f28c4daddd7ed099cd144094fab 100644 (file)
@@ -6,6 +6,7 @@ package http
 
 import (
        "bytes"
+       "io/ioutil"
        "testing"
 )
 
@@ -158,7 +159,7 @@ func TestRequestWrite(t *testing.T) {
        for i := range reqWriteTests {
                tt := &reqWriteTests[i]
                if tt.Body != nil {
-                       tt.Req.Body = nopCloser{bytes.NewBuffer(tt.Body)}
+                       tt.Req.Body = ioutil.NopCloser(bytes.NewBuffer(tt.Body))
                }
                var braw bytes.Buffer
                err := tt.Req.Write(&braw)
@@ -173,7 +174,7 @@ func TestRequestWrite(t *testing.T) {
                }
 
                if tt.Body != nil {
-                       tt.Req.Body = nopCloser{bytes.NewBuffer(tt.Body)}
+                       tt.Req.Body = ioutil.NopCloser(bytes.NewBuffer(tt.Body))
                }
                var praw bytes.Buffer
                err = tt.Req.WriteProxy(&praw)
index 0ef7f041e94e9285be432622c88c6571e1401900..de0635da516c8ec5a7d2c3572581c5ccf587f17f 100644 (file)
@@ -6,6 +6,7 @@ package http
 
 import (
        "bytes"
+       "io/ioutil"
        "testing"
 )
 
@@ -23,7 +24,7 @@ var respWriteTests = []respWriteTest{
                        ProtoMinor:    0,
                        RequestMethod: "GET",
                        Header:        Header{},
-                       Body:          nopCloser{bytes.NewBufferString("abcdef")},
+                       Body:          ioutil.NopCloser(bytes.NewBufferString("abcdef")),
                        ContentLength: 6,
                },
 
@@ -39,7 +40,7 @@ var respWriteTests = []respWriteTest{
                        ProtoMinor:    0,
                        RequestMethod: "GET",
                        Header:        Header{},
-                       Body:          nopCloser{bytes.NewBufferString("abcdef")},
+                       Body:          ioutil.NopCloser(bytes.NewBufferString("abcdef")),
                        ContentLength: -1,
                },
                "HTTP/1.0 200 OK\r\n" +
@@ -54,7 +55,7 @@ var respWriteTests = []respWriteTest{
                        ProtoMinor:       1,
                        RequestMethod:    "GET",
                        Header:           Header{},
-                       Body:             nopCloser{bytes.NewBufferString("abcdef")},
+                       Body:             ioutil.NopCloser(bytes.NewBufferString("abcdef")),
                        ContentLength:    6,
                        TransferEncoding: []string{"chunked"},
                        Close:            true,
index 7e3b44e55c599da2f52a363f4a276d5c332ecd06..ed6c310eb44c7e57e633b670cfcc428d876844d9 100644 (file)
@@ -90,3 +90,15 @@ func ReadDir(dirname string) ([]*os.FileInfo, os.Error) {
        sort.Sort(fi)
        return fi, nil
 }
+
+type nopCloser struct {
+       io.Reader
+}
+
+func (nopCloser) Close() os.Error { return nil }
+
+// NopCloser returns a ReadCloser with a no-op Close method wrapping
+// the provided Reader r.
+func NopCloser(r io.Reader) io.ReadCloser {
+       return nopCloser{r}
+}