|  | // 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 "errors" | 
|  |  | 
|  | var executablePath string // set by ../runtime/os_darwin.go | 
|  |  | 
|  | var initCwd, initCwdErr = Getwd() | 
|  |  | 
|  | func executable() (string, error) { | 
|  | ep := executablePath | 
|  | if len(ep) == 0 { | 
|  | return ep, errors.New("cannot find executable path") | 
|  | } | 
|  | if ep[0] != '/' { | 
|  | if initCwdErr != nil { | 
|  | return ep, initCwdErr | 
|  | } | 
|  | if len(ep) > 2 && ep[0:2] == "./" { | 
|  | // skip "./" | 
|  | ep = ep[2:] | 
|  | } | 
|  | ep = initCwd + "/" + ep | 
|  | } | 
|  | return ep, nil | 
|  | } |