fix
diff --git a/lib/fuse.c b/lib/fuse.c
index 1399dfd..9cc7028 100644
--- a/lib/fuse.c
+++ b/lib/fuse.c
@@ -501,12 +501,16 @@
}
static int lookup_path(struct fuse *f, fuse_ino_t nodeid, const char *name,
- const char *path, struct fuse_entry_param *e)
+ const char *path, struct fuse_entry_param *e,
+ struct fuse_file_info *fi)
{
int res;
memset(e, 0, sizeof(struct fuse_entry_param));
- res = f->op.getattr(path, &e->attr);
+ if (fi && f->op.fgetattr)
+ res = f->op.fgetattr(path, &e->attr, fi);
+ else
+ res = f->op.getattr(path, &e->attr);
if (res == 0) {
struct node *node;
@@ -604,7 +608,7 @@
}
err = -ENOSYS;
if (f->op.getattr)
- err = lookup_path(f, parent, name, path, &e);
+ err = lookup_path(f, parent, name, path, &e, NULL);
free(path);
}
pthread_rwlock_unlock(&f->tree_lock);
@@ -804,7 +808,7 @@
if (f->op.mknod && f->op.getattr) {
err = f->op.mknod(path, mode, rdev);
if (!err)
- err = lookup_path(f, parent, name, path, &e);
+ err = lookup_path(f, parent, name, path, &e, NULL);
}
free(path);
}
@@ -832,7 +836,7 @@
if (f->op.mkdir && f->op.getattr) {
err = f->op.mkdir(path, mode);
if (!err)
- err = lookup_path(f, parent, name, path, &e);
+ err = lookup_path(f, parent, name, path, &e, NULL);
}
free(path);
}
@@ -916,7 +920,7 @@
if (f->op.symlink && f->op.getattr) {
err = f->op.symlink(linkname, path);
if (!err)
- err = lookup_path(f, parent, name, path, &e);
+ err = lookup_path(f, parent, name, path, &e, NULL);
}
free(path);
}
@@ -985,7 +989,7 @@
if (f->op.link && f->op.getattr) {
err = f->op.link(oldpath, newpath);
if (!err)
- err = lookup_path(f, newparent, newname, newpath, &e);
+ err = lookup_path(f, newparent, newname, newpath, &e, NULL);
}
free(newpath);
}
@@ -1016,7 +1020,7 @@
path);
fflush(stdout);
}
- err = lookup_path(f, parent, name, path, &e);
+ err = lookup_path(f, parent, name, path, &e, fi);
if (err) {
if (f->op.release)
f->op.release(path, fi);