diff options
Diffstat (limited to 'internal/fusefrontend')
| -rw-r--r-- | internal/fusefrontend/file.go | 11 | ||||
| -rw-r--r-- | internal/fusefrontend/node.go | 10 | ||||
| -rw-r--r-- | internal/fusefrontend/prepare_syscall_test.go | 4 | 
3 files changed, 12 insertions, 13 deletions
| diff --git a/internal/fusefrontend/file.go b/internal/fusefrontend/file.go index 716a0db..ef043ae 100644 --- a/internal/fusefrontend/file.go +++ b/internal/fusefrontend/file.go @@ -277,16 +277,13 @@ func (f *File) Read(ctx context.Context, buf []byte, off int64) (resultData fuse  // Empty writes do nothing and are allowed.  func (f *File) doWrite(data []byte, off int64) (uint32, syscall.Errno) {  	fileWasEmpty := false -	// Get the file ID, create a new one if it does not exist yet. -	var fileID []byte  	// The caller has exclusively locked ContentLock, which blocks all other  	// readers and writers. No need to take IDLock. -	if f.fileTableEntry.ID != nil { -		fileID = f.fileTableEntry.ID -	} else { -		// If the file ID is not cached, read it from disk +	// +	// If the file ID is not cached, read it from disk +	if f.fileTableEntry.ID == nil {  		var err error -		fileID, err = f.readFileID() +		fileID, err := f.readFileID()  		// Write a new file header if the file is empty  		if err == io.EOF {  			fileID, err = f.createHeader() diff --git a/internal/fusefrontend/node.go b/internal/fusefrontend/node.go index 8a3cfa2..7280624 100644 --- a/internal/fusefrontend/node.go +++ b/internal/fusefrontend/node.go @@ -354,23 +354,25 @@ func (n *Node) Symlink(ctx context.Context, target, name string, out *fuse.Entry  	if !rn.args.PlaintextNames && nametransform.IsLongContent(cName) {  		err = rn.nameTransform.WriteLongNameAt(dirfd, cName, name)  		if err != nil { -			errno = fs.ToErrno(err) -			return +			return nil, fs.ToErrno(err)  		}  		// Create "gocryptfs.longfile." symlink  		err = syscallcompat.SymlinkatUser(cTarget, dirfd, cName, ctx2)  		if err != nil {  			nametransform.DeleteLongNameAt(dirfd, cName) +			return nil, fs.ToErrno(err)  		}  	} else {  		// Create symlink  		err = syscallcompat.SymlinkatUser(cTarget, dirfd, cName, ctx2) +		if err != nil { +			return nil, fs.ToErrno(err) +		}  	}  	st, err := syscallcompat.Fstatat2(dirfd, cName, unix.AT_SYMLINK_NOFOLLOW)  	if err != nil { -		errno = fs.ToErrno(err) -		return +		return nil, fs.ToErrno(err)  	}  	// Report the plaintext size, not the encrypted blob size  	st.Size = int64(len(target)) diff --git a/internal/fusefrontend/prepare_syscall_test.go b/internal/fusefrontend/prepare_syscall_test.go index 28e655c..693f62a 100644 --- a/internal/fusefrontend/prepare_syscall_test.go +++ b/internal/fusefrontend/prepare_syscall_test.go @@ -63,8 +63,8 @@ func TestPrepareAtSyscall(t *testing.T) {  	syscall.Close(dirfd)  	dirfd, cName, errno = rn.prepareAtSyscall("dir1") -	if err != nil { -		t.Fatal(err) +	if errno != 0 { +		t.Fatal(errno)  	}  	if cName == "" {  		t.Fatal("cName should not be empty") | 
