1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- package reexec
- import (
- "fmt"
- "os"
- "os/exec"
- "path/filepath"
- )
- var registeredInitializers = make(map[string]func())
- // Register adds an initialization func under the specified name
- func Register(name string, initializer func()) {
- if _, exists := registeredInitializers[name]; exists {
- panic(fmt.Sprintf("reexec func already registered under name %q", name))
- }
- registeredInitializers[name] = initializer
- }
- // Init is called as the first part of the exec process and returns true if an
- // initialization function was called.
- func Init() bool {
- initializer, exists := registeredInitializers[os.Args[0]]
- if exists {
- initializer()
- return true
- }
- return false
- }
- func naiveSelf() 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
- }
|