sftp/errno_plan9.go

42 lines
903 B
Go
Raw Normal View History

2024-10-01 01:38:18 +08:00
package sftp
import (
"errors"
"io/fs"
"syscall"
sshfx "github.com/pkg/sftp/v2/encoding/ssh/filexfer"
)
// translateErrorString translates a syscall error number to a SFTP error code.
func translateErrorString(errno syscall.ErrorString) sshfx.Status {
switch errno {
case "":
return sshfx.StatusOK
case syscall.ENOENT:
return sshfx.StatusNoSuchFile
case syscall.EACCES, syscall.EPERM:
return sshfx.StatusPermissionDenied
case syscall.EPLAN9:
2024-11-14 05:31:18 +08:00
return sshfx.StatusOpUnsupported
2024-10-01 01:38:18 +08:00
}
return sshfx.StatusFailure
}
func syscallErrorAsStatus(err error, pkt *sshfx.StatusPacket) bool {
var pathErr *fs.PathError
if errors.As(err, &pathErr) {
err = pathErr.Err // Replace the error with the underlying error.
pkt.ErrorMessage = err.Error()
}
var errno syscall.ErrorString
if errors.As(err, &errno) {
pkt.StatusCode = translateErrorString(errno)
return true
}
return false
}