aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorFederico G. Schwindt <[email protected]>2021-08-31 11:45:12 +0100
committerRon Evans <[email protected]>2021-09-01 19:01:35 +0200
commitf0936ffccb725d304692980417a9b9db3917264b (patch)
treeef983bf73b57734c8b1f9157ef168c31c1ae013b
parent97d48e5c0286852de319613136d2996d38fa4ab8 (diff)
downloadtinygo-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.go9
-rw-r--r--src/os/executable_procfs.go25
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
+}