1// Copyright 2016 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5//go:build linux || netbsd
6
7package os
8
9import (
10	"errors"
11	"internal/stringslite"
12	"runtime"
13)
14
15func executable() (string, error) {
16	var procfn string
17	switch runtime.GOOS {
18	default:
19		return "", errors.New("Executable not implemented for " + runtime.GOOS)
20	case "linux", "android":
21		procfn = "/proc/self/exe"
22	case "netbsd":
23		procfn = "/proc/curproc/exe"
24	}
25	path, err := Readlink(procfn)
26
27	// When the executable has been deleted then Readlink returns a
28	// path appended with " (deleted)".
29	return stringslite.TrimSuffix(path, " (deleted)"), err
30}
31