
We were using the Go 'path' module, which apparently doesn't handle backslashes correctly. path/filepath does. However, the main bug turned out to be that we were not calling .Base() on the path if version.ReadExe() fails, which it seems to do at least on Windows 7. As a result, our logfile persistence was not working on Windows, and logids would be regenerated on every restart. Affects: #620 Signed-off-by: Avery Pennarun <apenwarr@tailscale.com>
45 lines
1.1 KiB
Go
45 lines
1.1 KiB
Go
// Copyright (c) 2020 Tailscale Inc & AUTHORS All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
// +build !darwin !arm64
|
|
|
|
package version
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
|
|
"rsc.io/goversion/version"
|
|
)
|
|
|
|
// CmdName returns either the base name of the current binary
|
|
// using os.Executable. If os.Executable fails (it shouldn't), then
|
|
// "cmd" is returned.
|
|
func CmdName() string {
|
|
e, err := os.Executable()
|
|
if err != nil {
|
|
return "cmd"
|
|
}
|
|
var ret string
|
|
v, err := version.ReadExe(e)
|
|
if err != nil {
|
|
ret = strings.TrimSuffix(strings.ToLower(e), ".exe")
|
|
ret = filepath.Base(ret)
|
|
} else {
|
|
// v is like:
|
|
// "path\ttailscale.com/cmd/tailscale\nmod\ttailscale.com\t(devel)\t\ndep\tgithub.com/apenwarr/fixconsole\tv0.0.0-20191012055117-5a9f6489cc29\th1:muXWUcay7DDy1/hEQWrYlBy+g0EuwT70sBHg65SeUc4=\ndep\tgithub....
|
|
for _, line := range strings.Split(v.ModuleInfo, "\n") {
|
|
if strings.HasPrefix(line, "path\t") {
|
|
ret = filepath.Base(strings.TrimPrefix(line, "path\t"))
|
|
break
|
|
}
|
|
}
|
|
}
|
|
if ret == "" {
|
|
return "cmd"
|
|
}
|
|
return ret
|
|
}
|