summaryrefslogtreecommitdiff
path: root/libgo/go/cmd/buildid/buildid.go
diff options
context:
space:
mode:
Diffstat (limited to 'libgo/go/cmd/buildid/buildid.go')
-rw-r--r--libgo/go/cmd/buildid/buildid.go29
1 files changed, 23 insertions, 6 deletions
diff --git a/libgo/go/cmd/buildid/buildid.go b/libgo/go/cmd/buildid/buildid.go
index 8d810ffdd99..1c7b228c987 100644
--- a/libgo/go/cmd/buildid/buildid.go
+++ b/libgo/go/cmd/buildid/buildid.go
@@ -22,6 +22,21 @@ func usage() {
var wflag = flag.Bool("w", false, "write build ID")
+// taken from cmd/go/internal/work/buildid.go
+func hashToString(h [32]byte) string {
+ const b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"
+ const chunks = 5
+ var dst [chunks * 4]byte
+ for i := 0; i < chunks; i++ {
+ v := uint32(h[3*i])<<16 | uint32(h[3*i+1])<<8 | uint32(h[3*i+2])
+ dst[4*i+0] = b64[(v>>18)&0x3F]
+ dst[4*i+1] = b64[(v>>12)&0x3F]
+ dst[4*i+2] = b64[(v>>6)&0x3F]
+ dst[4*i+3] = b64[v&0x3F]
+ }
+ return string(dst[:])
+}
+
func main() {
log.SetPrefix("buildid: ")
log.SetFlags(0)
@@ -41,6 +56,8 @@ func main() {
return
}
+ // Keep in sync with src/cmd/go/internal/work/buildid.go:updateBuildID
+
f, err := os.Open(file)
if err != nil {
log.Fatal(err)
@@ -51,14 +68,14 @@ func main() {
}
f.Close()
- tail := id
- if i := strings.LastIndex(id, "."); i >= 0 {
- tail = tail[i+1:]
+ newID := id[:strings.LastIndex(id, "/")] + "/" + hashToString(hash)
+ if len(newID) != len(id) {
+ log.Fatalf("%s: build ID length mismatch %q vs %q", file, id, newID)
}
- if len(tail) != len(hash)*2 {
- log.Fatalf("%s: cannot find %d-byte hash in id %s", file, len(hash), id)
+
+ if len(matches) == 0 {
+ return
}
- newID := id[:len(id)-len(tail)] + fmt.Sprintf("%x", hash)
f, err = os.OpenFile(file, os.O_WRONLY, 0)
if err != nil {