Compare commits

...

2 Commits

Author SHA1 Message Date
Yannick Ulrich
b28c386c4e Used new error conversion routine 2023-03-04 09:19:27 +00:00
Yannick Ulrich
4c59561a99 Added error to syscall function
Some of these aren't ideal..
2023-03-04 09:14:49 +00:00
2 changed files with 78 additions and 17 deletions

View File

@ -126,8 +126,7 @@ func (n *ITNode) Readdir(ctx context.Context) (fs.DirStream, syscall.Errno) {
files, err := myfs.ReadDir(n.path)
if err != nil {
log.Error("FUSE ReadDir failed").Str("path", n.path).Err(err).Send()
// TODO we probably should figure out why it failed
return nil, syscall.ENOENT
return nil, syscallErr(err)
}
log.Debug("FUSE ReadDir succeeded").Str("path", n.path).Int("objects", len(files)).Send()
@ -137,7 +136,7 @@ func (n *ITNode) Readdir(ctx context.Context) (fs.DirStream, syscall.Errno) {
info, err := entry.Info()
if err != nil {
log.Error("FUSE Info failed").Str("path", n.path).Err(err).Send()
return nil, syscall.ENOENT
return nil, syscallErr(err)
}
name := info.Name()
@ -307,7 +306,7 @@ func (fh *bytesFileWriteHandle) Flush(ctx context.Context) (errno syscall.Errno)
fp, err := myfs.Create(fh.path, uint32(len(fh.content)))
if err != nil {
log.Error("FUSE Flush failed: create").Str("path", fh.path).Err(err).Send()
return syscall.EROFS
return syscallErr(err)
}
go func() {
@ -322,7 +321,7 @@ func (fh *bytesFileWriteHandle) Flush(ctx context.Context) (errno syscall.Errno)
if err != nil {
log.Error("FUSE Flush failed during write").Str("path", fh.path).Err(err).Send()
fp.Close()
return syscall.EIO
return syscallErr(err)
}
if int(nread) != len(fh.content) {
log.Error("FUSE Flush failed during write").Str("path", fh.path).Int("expect", len(fh.content)).Int("got", int(nread)).Send()
@ -332,7 +331,7 @@ func (fh *bytesFileWriteHandle) Flush(ctx context.Context) (errno syscall.Errno)
err = fp.Close()
if err != nil {
log.Error("FUSE Flush failed during close").Str("path", fh.path).Err(err).Send()
return syscall.EIO
return syscallErr(err)
}
log.Debug("FUSE Flush done").Str("path", fh.path).Int("size", len(fh.content)).Send()
@ -383,9 +382,8 @@ func (f *ITNode) Open(ctx context.Context, openFlags uint32) (fh fs.FileHandle,
log.Debug("FUSE Opening for read").Str("path", f.path).Send()
fp, err := myfs.Open(f.path)
if err != nil {
// TODO we probably should figure out why it failed
log.Error("FUSE: Opening failed").Str("path", f.path).Err(err).Send()
return nil, 0, syscall.EROFS
return nil, 0, syscallErr(err)
}
defer fp.Close()
@ -403,7 +401,7 @@ func (f *ITNode) Open(ctx context.Context, openFlags uint32) (fh fs.FileHandle,
if err != nil {
log.Error("FUSE Read failed").Str("path", f.path).Err(err).Send()
fp.Close()
return nil, 0, syscall.EIO
return nil, 0, syscallErr(err)
}
fh = &bytesFileReadHandle{
@ -425,8 +423,7 @@ func (f *ITNode) Open(ctx context.Context, openFlags uint32) (fh fs.FileHandle,
sub_ctx, cancel := context.WithCancel(ctx)
ans, err := value.gen(sub_ctx)
if err != nil {
// TODO we probably should figure out why it failed
return nil, 0, syscall.EIO
return nil, 0, syscallErr(err)
}
fh = &sensorFileReadHandle{
@ -484,8 +481,7 @@ func (f *ITNode) Mkdir(ctx context.Context, name string, mode uint32, out *fuse.
Str("path", path).
Err(err).
Send()
// TODO we probably should figure out why it failed
return nil, syscall.EROFS
return nil, syscallErr(err)
}
ino := uint64(len(inodemap)) + 11
@ -525,8 +521,7 @@ func (f *ITNode) Rename(ctx context.Context, name string, newParent fs.InodeEmbe
Err(err).
Send()
// TODO we probably should figure out why it failed
return syscall.EIO
return syscallErr(err)
}
log.Debug("FUSE Rename sucess").
Str("src", p1).
@ -554,8 +549,7 @@ func (f *ITNode) Unlink(ctx context.Context, name string) syscall.Errno {
Err(err).
Send()
// TODO we probably should figure out why it failed
return syscall.EIO
return syscallErr(err)
}
log.Debug("FUSE Unlink success").

View File

@ -0,0 +1,67 @@
package fusefs
import (
"go.arsenm.dev/infinitime/blefs"
"syscall"
)
func syscallErr(err error) syscall.Errno {
if err == nil {
return 0
}
switch err {
case blefs.FSError{0x02}: // filesystem error
return syscall.EIO // TODO
case blefs.FSError{0x05}: // read-only filesystem
return syscall.EROFS
case blefs.FSError{0x03}: // no such file
return syscall.ENOENT
case blefs.FSError{0x04}: // protocol error
return syscall.EPROTO
case blefs.FSError{-5}: // input/output error
return syscall.EIO
case blefs.FSError{-84}: // filesystem is corrupted
return syscall.ENOTRECOVERABLE // TODO
case blefs.FSError{-2}: // no such directory entry
return syscall.ENOENT
case blefs.FSError{-17}: // entry already exists
return syscall.EEXIST
case blefs.FSError{-20}: // entry is not a directory
return syscall.ENOTDIR
case blefs.FSError{-39}: // directory is not empty
return syscall.ENOTEMPTY
case blefs.FSError{-9}: // bad file number
return syscall.EBADF
case blefs.FSError{-27}: // file is too large
return syscall.EFBIG
case blefs.FSError{-22}: // invalid parameter
return syscall.EINVAL
case blefs.FSError{-28}: // no space left on device
return syscall.ENOSPC
case blefs.FSError{-12}: // no more memory available
return syscall.ENOMEM
case blefs.FSError{-61}: // no attr available
return syscall.ENODATA // TODO
case blefs.FSError{-36}: // file name is too long
return syscall.ENAMETOOLONG
case blefs.ErrFileNotExists: // file does not exist
return syscall.ENOENT
case blefs.ErrFileReadOnly: // file is read only
return syscall.EACCES
case blefs.ErrFileWriteOnly: // file is write only
return syscall.EACCES
case blefs.ErrInvalidOffset: // invalid file offset
return syscall.EFAULT // TODO
case blefs.ErrOffsetChanged: // offset has already been changed
return syscall.ESPIPE
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
}