File tree Expand file tree Collapse file tree 1 file changed +17
-13
lines changed Expand file tree Collapse file tree 1 file changed +17
-13
lines changed Original file line number Diff line number Diff line change @@ -368,20 +368,24 @@ pub fn current_exe() -> io::Result<PathBuf> {
368368
369369#[ cfg( any( target_os = "solaris" , target_os = "illumos" ) ) ]
370370pub fn current_exe ( ) -> io:: Result < PathBuf > {
371- extern "C" {
372- fn getexecname ( ) -> * const c_char ;
373- }
374- unsafe {
375- let path = getexecname ( ) ;
376- if path. is_null ( ) {
377- Err ( io:: Error :: last_os_error ( ) )
378- } else {
379- let filename = CStr :: from_ptr ( path) . to_bytes ( ) ;
380- let path = PathBuf :: from ( <OsStr as OsStrExt >:: from_bytes ( filename) ) ;
371+ if let Ok ( path) = crate :: fs:: read_link ( "/proc/self/path/a.out" ) {
372+ Ok ( path)
373+ } else {
374+ extern "C" {
375+ fn getexecname ( ) -> * const c_char ;
376+ }
377+ unsafe {
378+ let path = getexecname ( ) ;
379+ if path. is_null ( ) {
380+ Err ( io:: Error :: last_os_error ( ) )
381+ } else {
382+ let filename = CStr :: from_ptr ( path) . to_bytes ( ) ;
383+ let path = PathBuf :: from ( <OsStr as OsStrExt >:: from_bytes ( filename) ) ;
381384
382- // Prepend a current working directory to the path if
383- // it doesn't contain an absolute pathname.
384- if filename[ 0 ] == b'/' { Ok ( path) } else { getcwd ( ) . map ( |cwd| cwd. join ( path) ) }
385+ // Prepend a current working directory to the path if
386+ // it doesn't contain an absolute pathname.
387+ if filename[ 0 ] == b'/' { Ok ( path) } else { getcwd ( ) . map ( |cwd| cwd. join ( path) ) }
388+ }
385389 }
386390 }
387391}
You can’t perform that action at this time.
0 commit comments