mirror of https://github.com/pkg/sftp.git
				
				
				
			
		
			
				
	
	
		
			43 lines
		
	
	
		
			923 B
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			43 lines
		
	
	
		
			923 B
		
	
	
	
		
			Go
		
	
	
	
| package sftp
 | |
| 
 | |
| import (
 | |
| 	"os"
 | |
| 	"syscall"
 | |
| )
 | |
| 
 | |
| var EBADF = syscall.NewError("fd out of range or not open")
 | |
| 
 | |
| func wrapPathError(filepath string, err error) error {
 | |
| 	if errno, ok := err.(syscall.ErrorString); 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.ErrorString) uint32 {
 | |
| 	switch errno {
 | |
| 	case "":
 | |
| 		return sshFxOk
 | |
| 	case syscall.ENOENT:
 | |
| 		return sshFxNoSuchFile
 | |
| 	case syscall.EPERM:
 | |
| 		return sshFxPermissionDenied
 | |
| 	}
 | |
| 
 | |
| 	return sshFxFailure
 | |
| }
 | |
| 
 | |
| func translateSyscallError(err error) (uint32, bool) {
 | |
| 	switch e := err.(type) {
 | |
| 	case syscall.ErrorString:
 | |
| 		return translateErrno(e), true
 | |
| 	case *os.PathError:
 | |
| 		debug("statusFromError,pathError: error is %T %#v", e.Err, e.Err)
 | |
| 		if errno, ok := e.Err.(syscall.ErrorString); ok {
 | |
| 			return translateErrno(errno), true
 | |
| 		}
 | |
| 	}
 | |
| 	return 0, false
 | |
| }
 |