WIP: rebase for 2026-05-18 #7
@@ -13,6 +13,7 @@ import (
|
||||
"os"
|
||||
"path"
|
||||
"runtime"
|
||||
"runtime/debug"
|
||||
"strings"
|
||||
)
|
||||
|
||||
@@ -20,6 +21,15 @@ import (
|
||||
// using os.Executable. If os.Executable fails (it shouldn't), then
|
||||
// "cmd" is returned.
|
||||
func CmdName() string {
|
||||
// On non-Windows, the modinfo embedded in the running binary is
|
||||
// authoritative and avoids re-reading the executable from disk.
|
||||
// Windows needs the executable-name-based GUI override in cmdName,
|
||||
// so it still takes the slower path.
|
||||
if runtime.GOOS != "windows" {
|
||||
if info, ok := debug.ReadBuildInfo(); ok && info.Path != "" {
|
||||
return path.Base(info.Path)
|
||||
}
|
||||
}
|
||||
e, err := os.Executable()
|
||||
if err != nil {
|
||||
return "cmd"
|
||||
|
||||
@@ -6,6 +6,8 @@ package version_test
|
||||
import (
|
||||
"bytes"
|
||||
"os"
|
||||
"path"
|
||||
"runtime/debug"
|
||||
"testing"
|
||||
|
||||
ts "tailscale.com"
|
||||
@@ -49,3 +51,21 @@ func TestShortAllocs(t *testing.T) {
|
||||
t.Errorf("allocs = %v; want 0", allocs)
|
||||
}
|
||||
}
|
||||
|
||||
func BenchmarkCmdName(b *testing.B) {
|
||||
b.ReportAllocs()
|
||||
for b.Loop() {
|
||||
_ = version.CmdName()
|
||||
}
|
||||
}
|
||||
|
||||
func BenchmarkReadBuildInfo(b *testing.B) {
|
||||
b.ReportAllocs()
|
||||
for b.Loop() {
|
||||
info, ok := debug.ReadBuildInfo()
|
||||
if !ok {
|
||||
b.Fatal("ReadBuildInfo failed")
|
||||
}
|
||||
_ = path.Base(info.Path)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user