33 lines
774 B
Go
33 lines
774 B
Go
|
// This file originates from Docker/Moby,
|
||
|
// https://github.com/moby/moby/blob/master/pkg/reexec/
|
||
|
// Licensed under Apache License 2.0: https://github.com/moby/moby/blob/master/LICENSE
|
||
|
// Copyright 2013-2018 Docker, Inc.
|
||
|
|
||
|
//go:build !linux
|
||
|
|
||
|
package reexec
|
||
|
|
||
|
import (
|
||
|
"os"
|
||
|
"os/exec"
|
||
|
"path/filepath"
|
||
|
)
|
||
|
|
||
|
// Self returns the path to the current process's binary.
|
||
|
// Uses os.Args[0].
|
||
|
func Self() string {
|
||
|
name := os.Args[0]
|
||
|
if filepath.Base(name) == name {
|
||
|
if lp, err := exec.LookPath(name); err == nil {
|
||
|
return lp
|
||
|
}
|
||
|
}
|
||
|
// handle conversion of relative paths to absolute
|
||
|
if absName, err := filepath.Abs(name); err == nil {
|
||
|
return absName
|
||
|
}
|
||
|
// if we couldn't get absolute name, return original
|
||
|
// (NOTE: Go only errors on Abs() if os.Getwd fails)
|
||
|
return name
|
||
|
}
|