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 }