Use type switch for syscallErr

This commit is contained in:
Elara 2023-03-25 16:03:56 -07:00
parent 6667ba576c
commit ee5cb174fb
1 changed files with 58 additions and 52 deletions

View File

@ -11,58 +11,64 @@ func syscallErr(err error) syscall.Errno {
return 0 return 0
} }
switch err { switch err := err.(type) {
case blefs.FSError{0x02}: // filesystem error case blefs.FSError:
return syscall.EIO // TODO switch err.Code {
case blefs.FSError{0x05}: // read-only filesystem case 0x02: // filesystem error
return syscall.EROFS return syscall.EIO // TODO
case blefs.FSError{0x03}: // no such file case 0x05: // read-only filesystem
return syscall.ENOENT return syscall.EROFS
case blefs.FSError{0x04}: // protocol error case 0x03: // no such file
return syscall.EPROTO return syscall.ENOENT
case blefs.FSError{-5}: // input/output error case 0x04: // protocol error
return syscall.EIO return syscall.EPROTO
case blefs.FSError{-84}: // filesystem is corrupted case -5: // input/output error
return syscall.ENOTRECOVERABLE // TODO return syscall.EIO
case blefs.FSError{-2}: // no such directory entry case -84: // filesystem is corrupted
return syscall.ENOENT return syscall.ENOTRECOVERABLE // TODO
case blefs.FSError{-17}: // entry already exists case -2: // no such directory entry
return syscall.EEXIST return syscall.ENOENT
case blefs.FSError{-20}: // entry is not a directory case -17: // entry already exists
return syscall.ENOTDIR return syscall.EEXIST
case blefs.FSError{-39}: // directory is not empty case -20: // entry is not a directory
return syscall.ENOTEMPTY return syscall.ENOTDIR
case blefs.FSError{-9}: // bad file number case -39: // directory is not empty
return syscall.EBADF return syscall.ENOTEMPTY
case blefs.FSError{-27}: // file is too large case -9: // bad file number
return syscall.EFBIG return syscall.EBADF
case blefs.FSError{-22}: // invalid parameter case -27: // file is too large
return syscall.EINVAL return syscall.EFBIG
case blefs.FSError{-28}: // no space left on device case -22: // invalid parameter
return syscall.ENOSPC return syscall.EINVAL
case blefs.FSError{-12}: // no more memory available case -28: // no space left on device
return syscall.ENOMEM return syscall.ENOSPC
case blefs.FSError{-61}: // no attr available case -12: // no more memory available
return syscall.ENODATA // TODO return syscall.ENOMEM
case blefs.FSError{-36}: // file name is too long case -61: // no attr available
return syscall.ENAMETOOLONG return syscall.ENODATA // TODO
case blefs.ErrFileNotExists: // file does not exist case -36: // file name is too long
return syscall.ENOENT return syscall.ENAMETOOLONG
case blefs.ErrFileReadOnly: // file is read only }
return syscall.EACCES default:
case blefs.ErrFileWriteOnly: // file is write only switch err {
return syscall.EACCES case blefs.ErrFileNotExists: // file does not exist
case blefs.ErrInvalidOffset: // invalid file offset return syscall.ENOENT
return syscall.EFAULT // TODO case blefs.ErrFileReadOnly: // file is read only
case blefs.ErrOffsetChanged: // offset has already been changed return syscall.EACCES
return syscall.ESPIPE case blefs.ErrFileWriteOnly: // file is write only
case blefs.ErrReadOpen: // only one file can be opened for reading at a time return syscall.EACCES
return syscall.ENFILE case blefs.ErrInvalidOffset: // invalid file offset
case blefs.ErrWriteOpen: // only one file can be opened for writing at a time return syscall.EFAULT // TODO
return syscall.ENFILE case blefs.ErrOffsetChanged: // offset has already been changed
case blefs.ErrNoRemoveRoot: // refusing to remove root directory return syscall.ESPIPE
return syscall.EPERM case blefs.ErrReadOpen: // only one file can be opened for reading at a time
return syscall.ENFILE
case blefs.ErrWriteOpen: // only one file can be opened for writing at a time
return syscall.ENFILE
case blefs.ErrNoRemoveRoot: // refusing to remove root directory
return syscall.EPERM
}
} }
return syscall.EIO // TODO return syscall.EIO
} }