mirror of
https://github.com/golang/go
synced 2024-09-30 22:58:34 -06:00
go.tools/go/gcimporter: adjust for new .a file format
R=rsc, r CC=golang-dev https://golang.org/cl/41510044
This commit is contained in:
parent
b6e674b8e7
commit
4e3127283a
@ -48,38 +48,35 @@ func FindExportData(r *bufio.Reader) (err error) {
|
||||
return
|
||||
}
|
||||
if string(line) == "!<arch>\n" {
|
||||
// Archive file. Scan to __.PKGDEF, which should
|
||||
// be second archive entry.
|
||||
// Archive file. Scan to __.PKGDEF.
|
||||
var name string
|
||||
var size int
|
||||
|
||||
// First entry should be __.GOSYMDEF.
|
||||
// Older archives used __.SYMDEF, so allow that too.
|
||||
// Read and discard.
|
||||
if name, size, err = readGopackHeader(r); err != nil {
|
||||
return
|
||||
}
|
||||
if name != "__.SYMDEF" && name != "__.GOSYMDEF" {
|
||||
err = errors.New("go archive does not begin with __.SYMDEF or __.GOSYMDEF")
|
||||
return
|
||||
}
|
||||
const block = 4096
|
||||
tmp := make([]byte, block)
|
||||
for size > 0 {
|
||||
n := size
|
||||
if n > block {
|
||||
n = block
|
||||
|
||||
// Optional leading __.GOSYMDEF or __.SYMDEF.
|
||||
// Read and discard.
|
||||
if name == "__.SYMDEF" || name == "__.GOSYMDEF" {
|
||||
const block = 4096
|
||||
tmp := make([]byte, block)
|
||||
for size > 0 {
|
||||
n := size
|
||||
if n > block {
|
||||
n = block
|
||||
}
|
||||
if _, err = io.ReadFull(r, tmp[:n]); err != nil {
|
||||
return
|
||||
}
|
||||
size -= n
|
||||
}
|
||||
if _, err = io.ReadFull(r, tmp[:n]); err != nil {
|
||||
|
||||
if name, size, err = readGopackHeader(r); err != nil {
|
||||
return
|
||||
}
|
||||
size -= n
|
||||
}
|
||||
|
||||
// Second entry should be __.PKGDEF.
|
||||
if name, size, err = readGopackHeader(r); err != nil {
|
||||
return
|
||||
}
|
||||
// First real entry should be __.PKGDEF.
|
||||
if name != "__.PKGDEF" {
|
||||
err = errors.New("go archive is missing __.PKGDEF")
|
||||
return
|
||||
|
Loading…
Reference in New Issue
Block a user