// 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 aix linux netbsd openbsd dragonfly nacl

package os

import (
	"errors"
	"runtime"
	"syscall"
)

// We query the executable path at init time to avoid the problem of
// readlink returns a path appended with " (deleted)" when the original
// binary gets deleted.
var executablePath, executablePathErr = func() (string, error) {
	var procfn string
	switch runtime.GOOS {
	default:
		return "", errors.New("Executable not implemented for " + runtime.GOOS)
	case "linux", "android":
		procfn = "/proc/self/exe"
	case "netbsd":
		procfn = "/proc/curproc/exe"
	case "openbsd":
		procfn = "/proc/curproc/file"
	case "dragonfly":
		procfn = "/proc/curproc/file"
	case "aix":
		procfn = "/proc/" + itoa(syscall.Getpid()) + "/object/a.out"
	}
	return Readlink(procfn)
}()

func executable() (string, error) {
	return executablePath, executablePathErr
}
