]> Cypherpunks.ru repositories - gostls13.git/commitdiff
cmd/internal/bio: rename Reader.Seek to MustSeek
authorRuss Cox <rsc@golang.org>
Wed, 8 May 2019 22:46:04 +0000 (18:46 -0400)
committerRuss Cox <rsc@golang.org>
Thu, 9 May 2019 16:56:31 +0000 (16:56 +0000)
Renaming the method makes clear, both to readers and to vet,
that this method is not the implementation of io.Seeker:
it cannot fail.

Working toward making the tree vet-safe instead of having
so many exceptions in cmd/vet/all/whitelist.

For #31916.

Change-Id: I3e6ad7264cb0121b4b76935450cccb71d533e96b
Reviewed-on: https://go-review.googlesource.com/c/go/+/176108
Run-TryBot: Russ Cox <rsc@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Austin Clements <austin@google.com>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
12 files changed:
src/cmd/compile/internal/gc/iimport.go
src/cmd/compile/internal/gc/obj.go
src/cmd/internal/bio/buf.go
src/cmd/internal/bio/buf_mmap.go
src/cmd/link/internal/ld/ar.go
src/cmd/link/internal/ld/lib.go
src/cmd/link/internal/loadelf/ldelf.go
src/cmd/link/internal/loadmacho/ldmacho.go
src/cmd/link/internal/loadpe/ldpe.go
src/cmd/link/internal/loadxcoff/ldxcoff.go
src/cmd/link/internal/objfile/objfile.go
src/cmd/vet/all/whitelist/all.txt

index 51b57ce0a82edff005b0af545eb3e5d5833f10eb..38a7201a63a50305f9ca49998176c58be5a07f8d 100644 (file)
@@ -117,7 +117,7 @@ func iimport(pkg *types.Pkg, in *bio.Reader) {
        stringData := data[:sLen]
        declData := data[sLen:]
 
-       in.Seek(int64(sLen+dLen), os.SEEK_CUR)
+       in.MustSeek(int64(sLen+dLen), os.SEEK_CUR)
 
        p := &iimporter{
                ipkg: pkg,
index 0a421729f44e1db38d23837888f5475c091c73f0..c85268c120d7519dfa3357040803b87400cb8ad7 100644 (file)
@@ -97,13 +97,13 @@ func finishArchiveEntry(bout *bio.Writer, start int64, name string) {
        if size&1 != 0 {
                bout.WriteByte(0)
        }
-       bout.Seek(start-ArhdrSize, 0)
+       bout.MustSeek(start-ArhdrSize, 0)
 
        var arhdr [ArhdrSize]byte
        formathdr(arhdr[:], name, size)
        bout.Write(arhdr[:])
        bout.Flush()
-       bout.Seek(start+size+(size&1), 0)
+       bout.MustSeek(start+size+(size&1), 0)
 }
 
 func dumpCompilerObj(bout *bio.Writer) {
index 544f7edca9e38de4dad72ecfa32cb8e14d408cce..470c9797b2f27ab375a397817d176d17fcd1e4ba 100644 (file)
@@ -43,7 +43,7 @@ func Open(name string) (*Reader, error) {
        return &Reader{f: f, Reader: bufio.NewReader(f)}, nil
 }
 
-func (r *Reader) Seek(offset int64, whence int) int64 {
+func (r *Reader) MustSeek(offset int64, whence int) int64 {
        if whence == 1 {
                offset -= int64(r.Buffered())
        }
@@ -55,7 +55,7 @@ func (r *Reader) Seek(offset int64, whence int) int64 {
        return off
 }
 
-func (w *Writer) Seek(offset int64, whence int) int64 {
+func (w *Writer) MustSeek(offset int64, whence int) int64 {
        if err := w.Flush(); err != nil {
                log.Fatalf("writing output: %v", err)
        }
index b8c78b33119b179e0251aa26e7d540997942c8a4..4b43d74f26951cf069ce8943f0209246e782289a 100644 (file)
@@ -57,6 +57,6 @@ func (r *Reader) sliceOS(length uint64) ([]byte, bool) {
        }
 
        data = data[off-aoff:]
-       r.Seek(int64(length), 1)
+       r.MustSeek(int64(length), 1)
        return data, true
 }
index f41e30d6e73c423706bdecdb290d9b255a0f0a9d..4a20d96f969cb8e9b489dbdabd557bc0e1850535 100644 (file)
@@ -126,7 +126,7 @@ func hostArchive(ctxt *Link, name string) {
 
                        libgcc := sym.Library{Pkg: "libgcc"}
                        h := ldobj(ctxt, f, &libgcc, l, pname, name)
-                       f.Seek(h.off, 0)
+                       f.MustSeek(h.off, 0)
                        h.ld(ctxt, f, h.pkg, h.length, h.pn)
                }
 
index cd7f21cec959480d2cc048895af74ddcdad50293..49f3b3c0d7c654b74ef004439e91b94bb20af312 100644 (file)
@@ -741,7 +741,7 @@ func nextar(bp *bio.Reader, off int64, a *ArHdr) int64 {
        if off&1 != 0 {
                off++
        }
-       bp.Seek(off, 0)
+       bp.MustSeek(off, 0)
        var buf [SAR_HDR]byte
        if n, err := io.ReadFull(bp, buf[:]); err != nil {
                if n == 0 && err != io.EOF {
@@ -864,8 +864,8 @@ func loadobjfile(ctxt *Link, lib *sym.Library) {
                }
 
                /* load it as a regular file */
-               l := f.Seek(0, 2)
-               f.Seek(0, 0)
+               l := f.MustSeek(0, 2)
+               f.MustSeek(0, 0)
                ldobj(ctxt, f, lib, l, lib.File, lib.File)
                return
        }
@@ -985,7 +985,7 @@ func hostobjs(ctxt *Link) {
                        Exitf("cannot reopen %s: %v", h.pn, err)
                }
 
-               f.Seek(h.off, 0)
+               f.MustSeek(h.off, 0)
                h.ld(ctxt, f, h.pkg, h.length, h.pn)
                f.Close()
        }
@@ -1607,7 +1607,7 @@ func ldobj(ctxt *Link, f *bio.Reader, lib *sym.Library, length int64, pn string,
        c2 := bgetc(f)
        c3 := bgetc(f)
        c4 := bgetc(f)
-       f.Seek(start, 0)
+       f.MustSeek(start, 0)
 
        magic := uint32(c1)<<24 | uint32(c2)<<16 | uint32(c3)<<8 | uint32(c4)
        if magic == 0x7f454c46 { // \x7F E L F
@@ -1740,9 +1740,9 @@ func ldobj(ctxt *Link, f *bio.Reader, lib *sym.Library, length int64, pn string,
 
        import1 := f.Offset()
 
-       f.Seek(import0, 0)
+       f.MustSeek(import0, 0)
        ldpkg(ctxt, f, lib, import1-import0-2, pn) // -2 for !\n
-       f.Seek(import1, 0)
+       f.MustSeek(import1, 0)
 
        flags := 0
        switch *FlagStrictDups {
index 6fc343295b95ce201027dab4effa574eed705574..90505a2342007ab54d2992b19d82bd3adcd700b6 100644 (file)
@@ -590,9 +590,7 @@ func Load(arch *sys.Arch, syms *sym.Symbols, f *bio.Reader, pkg string, length i
 
        elfobj.nsect = uint(elfobj.shnum)
        for i := 0; uint(i) < elfobj.nsect; i++ {
-               if f.Seek(int64(uint64(base)+elfobj.shoff+uint64(int64(i)*int64(elfobj.shentsize))), 0) < 0 {
-                       return errorf("malformed elf file: negative seek")
-               }
+               f.MustSeek(int64(uint64(base)+elfobj.shoff+uint64(int64(i)*int64(elfobj.shentsize))), 0)
                sect := &elfobj.sect[i]
                if is64 != 0 {
                        var b ElfSectBytes64
@@ -996,9 +994,7 @@ func elfmap(elfobj *ElfObj, sect *ElfSect) (err error) {
        }
 
        sect.base = make([]byte, sect.size)
-       if elfobj.f.Seek(int64(uint64(elfobj.base)+sect.off), 0) < 0 {
-               return fmt.Errorf("short read: seek not successful")
-       }
+       elfobj.f.MustSeek(int64(uint64(elfobj.base)+sect.off), 0)
        if _, err := io.ReadFull(elfobj.f, sect.base); err != nil {
                return fmt.Errorf("short read: %v", err)
        }
index a8e41a94c7bc941dbd90868a298e6cb2f3a60dfa..c303752992713045ff5561a130680d5ff3cd316d 100644 (file)
@@ -321,9 +321,7 @@ 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 {
-               return -1
-       }
+       m.f.MustSeek(m.base+int64(sect.reloff), 0)
        if _, err := io.ReadFull(m.f, buf); err != nil {
                return -1
        }
@@ -367,9 +365,7 @@ 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 {
-               return -1
-       }
+       m.f.MustSeek(m.base+int64(d.indirectsymoff), 0)
        if _, err := io.ReadFull(m.f, p); err != nil {
                return -1
        }
@@ -387,9 +383,7 @@ func macholoadsym(m *ldMachoObj, symtab *ldMachoSymtab) int {
        }
 
        strbuf := make([]byte, symtab.strsize)
-       if m.f.Seek(m.base+int64(symtab.stroff), 0) < 0 {
-               return -1
-       }
+       m.f.MustSeek(m.base+int64(symtab.stroff), 0)
        if _, err := io.ReadFull(m.f, strbuf); err != nil {
                return -1
        }
@@ -400,9 +394,7 @@ 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 {
-               return -1
-       }
+       m.f.MustSeek(m.base+int64(symtab.symoff), 0)
        if _, err := io.ReadFull(m.f, symbuf); err != nil {
                return -1
        }
@@ -463,7 +455,7 @@ func Load(arch *sys.Arch, syms *sym.Symbols, f *bio.Reader, pkg string, length i
        }
 
        if is64 {
-               f.Seek(4, 1) // skip reserved word in header
+               f.MustSeek(4, 1) // skip reserved word in header
        }
 
        m := &ldMachoObj{
@@ -555,9 +547,7 @@ func Load(arch *sys.Arch, syms *sym.Symbols, f *bio.Reader, pkg string, length i
                return errorf("load segment out of range")
        }
 
-       if f.Seek(m.base+int64(c.seg.fileoff), 0) < 0 {
-               return errorf("cannot load object data: seek failed")
-       }
+       f.MustSeek(m.base+int64(c.seg.fileoff), 0)
        dat := make([]byte, c.seg.filesz)
        if _, err := io.ReadFull(f, dat); err != nil {
                return errorf("cannot load object data: %v", err)
index ac07d5c35d20ec20d3a96635b8f4a334756715b1..f08e1241a71290ed19b761647cc35984e66e591f 100644 (file)
@@ -133,7 +133,7 @@ const (
 type peBiobuf bio.Reader
 
 func (f *peBiobuf) ReadAt(p []byte, off int64) (int, error) {
-       ret := ((*bio.Reader)(f)).Seek(off, 0)
+       ret := ((*bio.Reader)(f)).MustSeek(off, 0)
        if ret < 0 {
                return 0, errors.New("fail to seek")
        }
index 7c863d79c5832928f02d955a3ffe0e07f5734175..f52b23ce6a983b050384c1e155bdd616cccb6db3 100644 (file)
@@ -27,7 +27,7 @@ type ldSection struct {
 type xcoffBiobuf bio.Reader
 
 func (f *xcoffBiobuf) ReadAt(p []byte, off int64) (int, error) {
-       ret := ((*bio.Reader)(f)).Seek(off, 0)
+       ret := ((*bio.Reader)(f)).MustSeek(off, 0)
        if ret < 0 {
                return 0, errors.New("fail to seek")
        }
index b650c12dbe6c55f28451188f4fbb302c74b31bf6..107409b00d906633480d3aaace5eedbdf81962a9 100644 (file)
@@ -85,7 +85,7 @@ func Load(arch *sys.Arch, syms *sym.Symbols, f *bio.Reader, lib *sym.Library, le
        start := f.Offset()
        roObject := f.SliceRO(uint64(length))
        if roObject != nil {
-               f.Seek(int64(-length), os.SEEK_CUR)
+               f.MustSeek(int64(-length), os.SEEK_CUR)
        }
        r := &objReader{
                rd:              f,
@@ -104,7 +104,7 @@ func Load(arch *sys.Arch, syms *sym.Symbols, f *bio.Reader, lib *sym.Library, le
                if r.roOffset != length {
                        log.Fatalf("%s: unexpected end at %d, want %d", pn, r.roOffset, start+length)
                }
-               r.rd.Seek(int64(length), os.SEEK_CUR)
+               r.rd.MustSeek(int64(length), os.SEEK_CUR)
        } else if f.Offset() != start+length {
                log.Fatalf("%s: unexpected end at %d, want %d", pn, f.Offset(), start+length)
        }
index e12a96e0c5cbae2a644959a6c0044173d99fdd95..cecd52b412695d51b44633c3f12a45407582f33a 100644 (file)
@@ -23,8 +23,6 @@ cmd/compile/internal/gc/testdata/short_test.go: unreachable code
 // These cases are basically ok.
 // Errors are handled reasonably and there's no clear need for interface satisfaction.
 // Except for the runtime/pprof case, the API is not exported.
-cmd/internal/bio/buf.go: method Seek(offset int64, whence int) int64 should have signature Seek(int64, int) (int64, error)
-cmd/internal/bio/buf.go: method Seek(offset int64, whence int) int64 should have signature Seek(int64, int) (int64, error)
 fmt/print.go: method WriteByte(c byte) should have signature WriteByte(byte) error
 
 // Also non-standard, but this method is on an unexported type, so it's