]> Cypherpunks repositories - gostls13.git/commitdiff
cmd: remove bio.Bread
authorMarvin Stenger <marvin.stenger94@gmail.com>
Fri, 8 Apr 2016 16:19:10 +0000 (18:19 +0200)
committerDave Cheney <dave@cheney.net>
Sun, 10 Apr 2016 07:37:51 +0000 (07:37 +0000)
Replace calls to bio.Bread with calls to io.ReadFull.

Change-Id: I2ee8739d01e04a4da9c20b6ce7d1d5b89914b8ad
Reviewed-on: https://go-review.googlesource.com/21750
Reviewed-by: Dave Cheney <dave@cheney.net>
src/cmd/internal/bio/buf.go
src/cmd/link/internal/ld/ar.go
src/cmd/link/internal/ld/go.go
src/cmd/link/internal/ld/ldelf.go
src/cmd/link/internal/ld/ldmacho.go
src/cmd/link/internal/ld/ldpe.go
src/cmd/link/internal/ld/lib.go

index 6a5d821d455e70537fdeeb09536a59f9f92b65cb..7a077041c24d098caca4c167b03a05fe9b2607d0 100644 (file)
@@ -7,7 +7,6 @@ package bio
 
 import (
        "bufio"
-       "io"
        "log"
        "os"
 )
@@ -86,16 +85,6 @@ func (w *Writer) Offset() int64 {
        return off
 }
 
-func Bread(r *Reader, p []byte) int {
-       n, err := io.ReadFull(r, p)
-       if n == 0 {
-               if err != nil && err != io.EOF {
-                       n = -1
-               }
-       }
-       return n
-}
-
 func (r *Reader) Close() error {
        return r.f.Close()
 }
index f9357392d7cdbf35d102f8fc2d6c65da457ea35c..323dfbefc58f4379284f183f2abd9873aa6b0a9f 100644 (file)
@@ -35,6 +35,7 @@ import (
        "cmd/internal/obj"
        "encoding/binary"
        "fmt"
+       "io"
        "os"
 )
 
@@ -76,8 +77,8 @@ func hostArchive(name string) {
        }
        defer f.Close()
 
-       magbuf := make([]byte, len(ARMAG))
-       if bio.Bread(f, magbuf) != len(magbuf) {
+       var magbuf [len(ARMAG)]byte
+       if _, err := io.ReadFull(f, magbuf[:]); err != nil {
                Exitf("file %s too short", name)
        }
 
@@ -138,9 +139,8 @@ func readArmap(filename string, f *bio.Reader, arhdr ArHdr) archiveMap {
                wordSize = 8
        }
 
-       l := atolwhex(arhdr.size)
-       contents := make([]byte, l)
-       if bio.Bread(f, contents) != int(l) {
+       contents := make([]byte, atolwhex(arhdr.size))
+       if _, err := io.ReadFull(f, contents); err != nil {
                Exitf("short read from %s", filename)
        }
 
index 3af5f7a046f9113c999ec672c4123985b8829a4a..425c75571fee81040ae6c0895894c1785c78e364 100644 (file)
@@ -11,6 +11,7 @@ import (
        "cmd/internal/bio"
        "cmd/internal/obj"
        "fmt"
+       "io"
        "os"
        "strings"
 )
@@ -49,7 +50,7 @@ func ldpkg(f *bio.Reader, pkg string, length int64, filename string, whence int)
        }
 
        bdata := make([]byte, length)
-       if int64(bio.Bread(f, bdata)) != length {
+       if _, err := io.ReadFull(f, bdata); err != nil {
                fmt.Fprintf(os.Stderr, "%s: short pkg read %s\n", os.Args[0], filename)
                if Debug['u'] != 0 {
                        errorexit()
index 1c55daa392cf9331608724160f77e477a756a6a6..d9581a5189e8c51aee7a7b3c8276a10f7a7710e3 100644 (file)
@@ -476,7 +476,7 @@ func ldelf(f *bio.Reader, pkg string, length int64, pn string) {
        var sect *ElfSect
        var sym ElfSym
        var symbols []*LSym
-       if bio.Bread(f, hdrbuf[:]) != len(hdrbuf) {
+       if _, err := io.ReadFull(f, hdrbuf[:]); err != nil {
                goto bad
        }
        hdr = new(ElfHdrBytes)
@@ -986,9 +986,11 @@ func elfmap(elfobj *ElfObj, sect *ElfSect) (err error) {
        }
 
        sect.base = make([]byte, sect.size)
-       err = fmt.Errorf("short read")
-       if elfobj.f.Seek(int64(uint64(elfobj.base)+sect.off), 0) < 0 || bio.Bread(elfobj.f, sect.base) != len(sect.base) {
-               return err
+       if elfobj.f.Seek(int64(uint64(elfobj.base)+sect.off), 0) < 0 {
+               return fmt.Errorf("short read: seek not successful")
+       }
+       if _, err := io.ReadFull(elfobj.f, sect.base); err != nil {
+               return fmt.Errorf("short read: %v", err)
        }
 
        return nil
index dffe6f69cec09bb102ce127739544a48905b0bce..8dc4033bbcd7e28defdbba7f2c419e0693552239 100644 (file)
@@ -6,6 +6,7 @@ import (
        "cmd/internal/sys"
        "encoding/binary"
        "fmt"
+       "io"
        "log"
        "sort"
 )
@@ -299,7 +300,10 @@ func macholoadrel(m *LdMachoObj, sect *LdMachoSect) int {
        rel := make([]LdMachoRel, sect.nreloc)
        n := int(sect.nreloc * 8)
        buf := make([]byte, n)
-       if m.f.Seek(m.base+int64(sect.reloff), 0) < 0 || bio.Bread(m.f, buf) != n {
+       if m.f.Seek(m.base+int64(sect.reloff), 0) < 0 {
+               return -1
+       }
+       if _, err := io.ReadFull(m.f, buf); err != nil {
                return -1
        }
        var p []byte
@@ -345,7 +349,10 @@ func macholoaddsym(m *LdMachoObj, d *LdMachoDysymtab) int {
        n := int(d.nindirectsyms)
 
        p := make([]byte, n*4)
-       if m.f.Seek(m.base+int64(d.indirectsymoff), 0) < 0 || bio.Bread(m.f, p) != len(p) {
+       if m.f.Seek(m.base+int64(d.indirectsymoff), 0) < 0 {
+               return -1
+       }
+       if _, err := io.ReadFull(m.f, p); err != nil {
                return -1
        }
 
@@ -362,7 +369,10 @@ func macholoadsym(m *LdMachoObj, symtab *LdMachoSymtab) int {
        }
 
        strbuf := make([]byte, symtab.strsize)
-       if m.f.Seek(m.base+int64(symtab.stroff), 0) < 0 || bio.Bread(m.f, strbuf) != len(strbuf) {
+       if m.f.Seek(m.base+int64(symtab.stroff), 0) < 0 {
+               return -1
+       }
+       if _, err := io.ReadFull(m.f, strbuf); err != nil {
                return -1
        }
 
@@ -372,7 +382,10 @@ func macholoadsym(m *LdMachoObj, symtab *LdMachoSymtab) int {
        }
        n := int(symtab.nsym * uint32(symsize))
        symbuf := make([]byte, n)
-       if m.f.Seek(m.base+int64(symtab.symoff), 0) < 0 || bio.Bread(m.f, symbuf) != len(symbuf) {
+       if m.f.Seek(m.base+int64(symtab.symoff), 0) < 0 {
+               return -1
+       }
+       if _, err := io.ReadFull(m.f, symbuf); err != nil {
                return -1
        }
        sym := make([]LdMachoSym, symtab.nsym)
@@ -433,7 +446,7 @@ func ldmacho(f *bio.Reader, pkg string, length int64, pn string) {
 
        Ctxt.IncVersion()
        base := f.Offset()
-       if bio.Bread(f, hdr[:]) != len(hdr) {
+       if _, err := io.ReadFull(f, hdr[:]); err != nil {
                goto bad
        }
 
@@ -455,8 +468,7 @@ func ldmacho(f *bio.Reader, pkg string, length int64, pn string) {
        }
 
        if is64 {
-               var tmp [4]uint8
-               bio.Bread(f, tmp[:4]) // skip reserved word in header
+               f.Seek(4, 1) // skip reserved word in header
        }
 
        m = new(LdMachoObj)
@@ -494,7 +506,7 @@ func ldmacho(f *bio.Reader, pkg string, length int64, pn string) {
        m.cmd = make([]LdMachoCmd, ncmd)
        off = uint32(len(hdr))
        cmdp = make([]byte, cmdsz)
-       if bio.Bread(f, cmdp) != len(cmdp) {
+       if _, err2 := io.ReadFull(f, cmdp); err2 != nil {
                err = fmt.Errorf("reading cmds: %v", err)
                goto bad
        }
@@ -557,7 +569,11 @@ func ldmacho(f *bio.Reader, pkg string, length int64, pn string) {
        }
 
        dat = make([]byte, c.seg.filesz)
-       if f.Seek(m.base+int64(c.seg.fileoff), 0) < 0 || bio.Bread(f, dat) != len(dat) {
+       if f.Seek(m.base+int64(c.seg.fileoff), 0) < 0 {
+               err = fmt.Errorf("cannot load object data: %v", err)
+               goto bad
+       }
+       if _, err2 := io.ReadFull(f, dat); err2 != nil {
                err = fmt.Errorf("cannot load object data: %v", err)
                goto bad
        }
index 37a550d5c9c451c062f3b26db5513dc284f588b1..7f7121ff9427c54d50d0f38ffbb8904f0e3d6623 100644 (file)
@@ -10,6 +10,7 @@ import (
        "cmd/internal/sys"
        "encoding/binary"
        "fmt"
+       "io"
        "log"
        "sort"
        "strconv"
@@ -176,13 +177,13 @@ func ldpe(f *bio.Reader, pkg string, length int64, pn string) {
        // load string table
        f.Seek(int64(base)+int64(peobj.fh.PointerToSymbolTable)+int64(len(symbuf))*int64(peobj.fh.NumberOfSymbols), 0)
 
-       if bio.Bread(f, symbuf[:4]) != 4 {
+       if _, err := io.ReadFull(f, symbuf[:4]); err != nil {
                goto bad
        }
        l = Le32(symbuf[:])
        peobj.snames = make([]byte, l)
        f.Seek(int64(base)+int64(peobj.fh.PointerToSymbolTable)+int64(len(symbuf))*int64(peobj.fh.NumberOfSymbols), 0)
-       if bio.Bread(f, peobj.snames) != len(peobj.snames) {
+       if _, err := io.ReadFull(f, peobj.snames); err != nil {
                goto bad
        }
 
@@ -205,7 +206,7 @@ func ldpe(f *bio.Reader, pkg string, length int64, pn string) {
        f.Seek(int64(base)+int64(peobj.fh.PointerToSymbolTable), 0)
        for i := 0; uint32(i) < peobj.fh.NumberOfSymbols; i += numaux + 1 {
                f.Seek(int64(base)+int64(peobj.fh.PointerToSymbolTable)+int64(len(symbuf))*int64(i), 0)
-               if bio.Bread(f, symbuf[:]) != len(symbuf) {
+               if _, err := io.ReadFull(f, symbuf[:]); err != nil {
                        goto bad
                }
 
@@ -293,7 +294,7 @@ func ldpe(f *bio.Reader, pkg string, length int64, pn string) {
                f.Seek(int64(peobj.base)+int64(rsect.sh.PointerToRelocations), 0)
                for j = 0; j < int(rsect.sh.NumberOfRelocations); j++ {
                        rp = &r[j]
-                       if bio.Bread(f, symbuf[:10]) != 10 {
+                       if _, err := io.ReadFull(f, symbuf[:10]); err != nil {
                                goto bad
                        }
                        rva := Le32(symbuf[0:])
@@ -466,7 +467,10 @@ func pemap(peobj *PeObj, sect *PeSect) int {
        if sect.sh.PointerToRawData == 0 { // .bss doesn't have data in object file
                return 0
        }
-       if peobj.f.Seek(int64(peobj.base)+int64(sect.sh.PointerToRawData), 0) < 0 || bio.Bread(peobj.f, sect.base) != len(sect.base) {
+       if peobj.f.Seek(int64(peobj.base)+int64(sect.sh.PointerToRawData), 0) < 0 {
+               return -1
+       }
+       if _, err := io.ReadFull(peobj.f, sect.base); err != nil {
                return -1
        }
 
index 6e33ec3b050ef2efb5e6e1197c68028c04f5cc81..1f2df8b9c545b76c2fb241a0796573e914881925 100644 (file)
@@ -745,12 +745,12 @@ func nextar(bp *bio.Reader, off int64, a *ArHdr) int64 {
                off++
        }
        bp.Seek(off, 0)
-       buf := make([]byte, SAR_HDR)
-       if n := bio.Bread(bp, buf); n < len(buf) {
-               if n >= 0 {
-                       return 0
+       var buf [SAR_HDR]byte
+       if n, err := io.ReadFull(bp, buf[:]); err != nil {
+               if n == 0 && err != io.EOF {
+                       return -1
                }
-               return -1
+               return 0
        }
 
        a.name = artrim(buf[0:16])
@@ -780,8 +780,11 @@ func objfile(lib *Library) {
                Exitf("cannot open file %s: %v", lib.File, err)
        }
 
-       magbuf := make([]byte, len(ARMAG))
-       if bio.Bread(f, magbuf) != len(magbuf) || !strings.HasPrefix(string(magbuf), ARMAG) {
+       for i := 0; i < len(ARMAG); i++ {
+               if c, err := f.ReadByte(); err == nil && c == ARMAG[i] {
+                       continue
+               }
+
                /* load it as a regular file */
                l := f.Seek(0, 2)
 
@@ -811,7 +814,9 @@ func objfile(lib *Library) {
        if Buildmode == BuildmodeShared {
                before := f.Offset()
                pkgdefBytes := make([]byte, atolwhex(arhdr.size))
-               bio.Bread(f, pkgdefBytes)
+               if _, err := io.ReadFull(f, pkgdefBytes); err != nil {
+                       Diag("%s: short read on archive file symbol header: %v", lib.File, err)
+               }
                hash := sha1.Sum(pkgdefBytes)
                lib.hash = hash[:]
                f.Seek(before, 0)