From 0a76670183f484461cf7d69c2761cfd65547500f Mon Sep 17 00:00:00 2001 From: Bernd Schubert Date: Mon, 26 Aug 2024 19:33:47 +0200 Subject: [PATCH] getattr: Make use of FUSE_GETATTR_FH in lowlevel examples High level examples were already using it, but not lowlevel. Also update the documentation. --- example/passthrough_hp.cc | 10 +++++----- example/passthrough_ll.c | 3 ++- include/fuse_lowlevel.h | 2 +- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/example/passthrough_hp.cc b/example/passthrough_hp.cc index 4dab544..e75c749 100644 --- a/example/passthrough_hp.cc +++ b/example/passthrough_hp.cc @@ -226,12 +226,12 @@ static void sfs_init(void *userdata, fuse_conn_info *conn) { } -static void sfs_getattr(fuse_req_t req, fuse_ino_t ino, fuse_file_info *fi) { - (void)fi; - Inode& inode = get_inode(ino); +static void sfs_getattr(fuse_req_t req, fuse_ino_t ino, fuse_file_info *fi) +{ struct stat attr; - auto res = fstatat(inode.fd, "", &attr, - AT_EMPTY_PATH | AT_SYMLINK_NOFOLLOW); + int fd = fi ? fi->fh : get_inode(ino).fd; + + auto res = fstatat(fd, "", &attr, AT_EMPTY_PATH | AT_SYMLINK_NOFOLLOW); if (res == -1) { fuse_reply_err(req, errno); return; diff --git a/example/passthrough_ll.c b/example/passthrough_ll.c index 87c18a2..62a42f4 100644 --- a/example/passthrough_ll.c +++ b/example/passthrough_ll.c @@ -204,10 +204,11 @@ static void lo_getattr(fuse_req_t req, fuse_ino_t ino, int res; struct stat buf; struct lo_data *lo = lo_data(req); + int fd = fi ? fi->fh : lo_fd(req, ino); (void) fi; - res = fstatat(lo_fd(req, ino), "", &buf, AT_EMPTY_PATH | AT_SYMLINK_NOFOLLOW); + res = fstatat(fd, "", &buf, AT_EMPTY_PATH | AT_SYMLINK_NOFOLLOW); if (res == -1) return (void) fuse_reply_err(req, errno); diff --git a/include/fuse_lowlevel.h b/include/fuse_lowlevel.h index e62e24c..e5c308c 100644 --- a/include/fuse_lowlevel.h +++ b/include/fuse_lowlevel.h @@ -303,7 +303,7 @@ struct fuse_lowlevel_ops { * * @param req request handle * @param ino the inode number - * @param fi for future use, currently always NULL + * @param fi file information, or NULL */ void (*getattr) (fuse_req_t req, fuse_ino_t ino, struct fuse_file_info *fi); -- 2.30.2