|  | // 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. | 
|  |  | 
|  | package os | 
|  |  | 
|  | import "syscall" | 
|  |  | 
|  | var executablePath string // set by sysauxv in ../runtime/os3_solaris.go | 
|  |  | 
|  | var initCwd, initCwdErr = Getwd() | 
|  |  | 
|  | func executable() (string, error) { | 
|  | path := executablePath | 
|  | if len(path) == 0 { | 
|  | path, err := syscall.Getexecname() | 
|  | if err != nil { | 
|  | return path, err | 
|  | } | 
|  | } | 
|  | if len(path) > 0 && path[0] != '/' { | 
|  | if initCwdErr != nil { | 
|  | return path, initCwdErr | 
|  | } | 
|  | if len(path) > 2 && path[0:2] == "./" { | 
|  | // skip "./" | 
|  | path = path[2:] | 
|  | } | 
|  | return initCwd + "/" + path, nil | 
|  | } | 
|  | return path, nil | 
|  | } |