"os"
)
-const EOF = -1
-
// Reader implements a seekable buffered io.Reader.
type Reader struct {
f *os.File
return n
}
-func Bgetc(r *Reader) int {
- c, err := r.ReadByte()
- if err != nil {
- if err != io.EOF {
- log.Fatalf("reading input: %v", err)
- }
- return EOF
- }
- return int(c)
-}
-
-func Brdline(r *Reader, delim int) string {
- s, err := r.ReadBytes(byte(delim))
- if err != nil {
- log.Fatalf("reading input: %v", err)
- }
- return string(s)
-}
-
func (r *Reader) Close() error {
return r.f.Close()
}
eof := f.Offset() + length
start := f.Offset()
- c1 := bio.Bgetc(f)
- c2 := bio.Bgetc(f)
- c3 := bio.Bgetc(f)
- c4 := bio.Bgetc(f)
+ c1 := bgetc(f)
+ c2 := bgetc(f)
+ c3 := bgetc(f)
+ c4 := bgetc(f)
f.Seek(start, 0)
magic := uint32(c1)<<24 | uint32(c2)<<16 | uint32(c3)<<8 | uint32(c4)
}
/* check the header */
- line := bio.Brdline(f, '\n')
- if line == "" {
- Diag("truncated object file: %s", pn)
+ line, err := f.ReadString('\n')
+ if err != nil {
+ Diag("truncated object file: %s: %v", pn, err)
return nil
}
import0 := f.Offset()
c1 = '\n' // the last line ended in \n
- c2 = bio.Bgetc(f)
- c3 = bio.Bgetc(f)
+ c2 = bgetc(f)
+ c3 = bgetc(f)
for c1 != '\n' || c2 != '!' || c3 != '\n' {
c1 = c2
c2 = c3
- c3 = bio.Bgetc(f)
- if c3 == bio.EOF {
+ c3 = bgetc(f)
+ if c3 == -1 {
Diag("truncated object file: %s", pn)
return nil
}
v -= c
return v
}
+
+func bgetc(r *bio.Reader) int {
+ c, err := r.ReadByte()
+ if err != nil {
+ if err != io.EOF {
+ log.Fatalf("reading input: %v", err)
+ }
+ return -1
+ }
+ return int(c)
+}