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>
import (
"bufio"
- "io"
"log"
"os"
)
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()
}
"cmd/internal/obj"
"encoding/binary"
"fmt"
+ "io"
"os"
)
}
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)
}
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)
}
"cmd/internal/bio"
"cmd/internal/obj"
"fmt"
+ "io"
"os"
"strings"
)
}
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()
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)
}
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
"cmd/internal/sys"
"encoding/binary"
"fmt"
+ "io"
"log"
"sort"
)
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
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
}
}
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
}
}
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)
Ctxt.IncVersion()
base := f.Offset()
- if bio.Bread(f, hdr[:]) != len(hdr) {
+ if _, err := io.ReadFull(f, hdr[:]); err != nil {
goto bad
}
}
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)
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
}
}
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
}
"cmd/internal/sys"
"encoding/binary"
"fmt"
+ "io"
"log"
"sort"
"strconv"
// 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
}
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
}
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:])
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
}
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])
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)
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)