func (n *classicNode) Truncate(file nodefs.File, size uint64, context *fuse.Context) (code fuse.Status) { if file != nil { return file.Truncate(size) } else if n.backing != "" { return fuse.ToStatus(os.Truncate(n.backing, int64(size))) } return fuse.OK }
func (me *memNode) Truncate(file nodefs.File, size uint64, context *fuse.Context) (code fuse.Status) { me.mutex.Lock() defer me.mutex.Unlock() me.promote() if file != nil { code = file.Truncate(size) } else { code = fuse.ToStatus(os.Truncate(me.backing, int64(size))) } if code.Ok() { me.info.Size = size me.touch() } return code }
func (n *pathInode) Truncate(file nodefs.File, size uint64, context *fuse.Context) (code fuse.Status) { // A file descriptor was passed in AND the filesystem implements the // operation on the file handle. This the common case for ftruncate. if file != nil { code = file.Truncate(size) if code != fuse.ENOSYS { return code } } files := n.Inode().Files(fuse.O_ANYWRITE) for _, f := range files { // TODO - pass context code = f.Truncate(size) if code.Ok() { return code } } if len(files) == 0 || code == fuse.ENOSYS || code == fuse.EBADF { code = n.fs.Truncate(n.GetPath(), size, context) } return code }