Browse Source

Implement os.Executable

For now this is a stub for everything but linux, which is a slightly
modified copy of the official implementation.

Should address #1778.
pull/2076/head
Federico G. Schwindt 3 years ago
committed by Ron Evans
parent
commit
f0936ffccb
  1. 9
      src/os/executable_other.go
  2. 25
      src/os/executable_procfs.go

9
src/os/executable_other.go

@ -0,0 +1,9 @@
// +build !linux
package os
import "errors"
func Executable() (string, error) {
return "", errors.New("Executable not implemented")
}

25
src/os/executable_procfs.go

@ -0,0 +1,25 @@
// The following is copied from Go 1.17 official implementation.
// Copyright 2016 The Go 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 linux
package os
func Executable() (string, error) {
path, err := Readlink("/proc/self/exe")
// When the executable has been deleted then Readlink returns a
// path appended with " (deleted)".
return stringsTrimSuffix(path, " (deleted)"), err
}
// stringsTrimSuffix is the same as strings.TrimSuffix.
func stringsTrimSuffix(s, suffix string) string {
if len(s) >= len(suffix) && s[len(s)-len(suffix):] == suffix {
return s[:len(s)-len(suffix)]
}
return s
}
Loading…
Cancel
Save