mirror of https://github.com/pkg/sftp.git
				
				
				
			
		
			
				
	
	
		
			46 lines
		
	
	
		
			918 B
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			46 lines
		
	
	
		
			918 B
		
	
	
	
		
			Go
		
	
	
	
| //go:build !plan9
 | |
| // +build !plan9
 | |
| 
 | |
| package sftp
 | |
| 
 | |
| import (
 | |
| 	"os"
 | |
| 	"syscall"
 | |
| )
 | |
| 
 | |
| const EBADF = syscall.EBADF
 | |
| 
 | |
| func wrapPathError(filepath string, err error) error {
 | |
| 	if errno, ok := err.(syscall.Errno); ok {
 | |
| 		return &os.PathError{Path: filepath, Err: errno}
 | |
| 	}
 | |
| 	return err
 | |
| }
 | |
| 
 | |
| // translateErrno translates a syscall error number to a SFTP error code.
 | |
| func translateErrno(errno syscall.Errno) uint32 {
 | |
| 	switch errno {
 | |
| 	case 0:
 | |
| 		return sshFxOk
 | |
| 	case syscall.ENOENT:
 | |
| 		return sshFxNoSuchFile
 | |
| 	case syscall.EACCES, syscall.EPERM:
 | |
| 		return sshFxPermissionDenied
 | |
| 	}
 | |
| 
 | |
| 	return sshFxFailure
 | |
| }
 | |
| 
 | |
| func translateSyscallError(err error) (uint32, bool) {
 | |
| 	switch e := err.(type) {
 | |
| 	case syscall.Errno:
 | |
| 		return translateErrno(e), true
 | |
| 	case *os.PathError:
 | |
| 		debug("statusFromError,pathError: error is %T %#v", e.Err, e.Err)
 | |
| 		if errno, ok := e.Err.(syscall.Errno); ok {
 | |
| 			return translateErrno(errno), true
 | |
| 		}
 | |
| 	}
 | |
| 	return 0, false
 | |
| }
 |