diff options
author | Federico G. Schwindt <[email protected]> | 2021-08-31 11:45:12 +0100 |
---|---|---|
committer | Ron Evans <[email protected]> | 2021-09-01 19:01:35 +0200 |
commit | f0936ffccb725d304692980417a9b9db3917264b (patch) | |
tree | ef983bf73b57734c8b1f9157ef168c31c1ae013b | |
parent | 97d48e5c0286852de319613136d2996d38fa4ab8 (diff) | |
download | tinygo-f0936ffccb725d304692980417a9b9db3917264b.tar.gz tinygo-f0936ffccb725d304692980417a9b9db3917264b.zip |
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.
-rw-r--r-- | src/os/executable_other.go | 9 | ||||
-rw-r--r-- | src/os/executable_procfs.go | 25 |
2 files changed, 34 insertions, 0 deletions
diff --git a/src/os/executable_other.go b/src/os/executable_other.go new file mode 100644 index 000000000..15a9f9f7b --- /dev/null +++ b/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") +} diff --git a/src/os/executable_procfs.go b/src/os/executable_procfs.go new file mode 100644 index 000000000..2f9d0b637 --- /dev/null +++ b/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 +} |