| // 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 | 
 | } |