aboutsummaryrefslogtreecommitdiffstats
path: root/example/hello.c
diff options
context:
space:
mode:
authorBernd Schubert <bschubert@ddn.com>2025-04-16 00:24:42 +0200
committerBernd Schubert <bernd@bsbernd.com>2025-04-16 16:14:58 +0200
commit08ac8aee19938ce86d45c5776c013bc4d9303750 (patch)
tree4ae0d369d7238dec38493e0f7bdf10fcdd709d95 /example/hello.c
parentdb59dd41ab4ed2ca89dae32aa6f106f82bb1056e (diff)
downloadlibfuse-08ac8aee19938ce86d45c5776c013bc4d9303750.tar.gz
conn: prevent duplicate flag conversion in high-level interface
The high-level interface triggers flag conversion twice: once in the high-level init and once in the low-level init. This caused false "both 'want' and 'want_ext' are set" errors when using fuse_set_feature_flag() or fuse_unset_feature_flag(). The existing check for duplicate conversion only worked when 32-bit flags were set directly. When using the preferred flag manipulation functions, conn->want and the lower 32 bits of conn->want_ext would differ, triggering the error. Fix this by synchronizing conn->want with the lower 32 bits of conn->want_ext after conversion, ensuring consistent state for subsequent calls. Closes: https://github.com/libfuse/libfuse/issues/1171 Signed-off-by: Bernd Schubert <bschubert@ddn.com>
Diffstat (limited to 'example/hello.c')
-rw-r--r--example/hello.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/example/hello.c b/example/hello.c
index 90919f4..d9f01b9 100644
--- a/example/hello.c
+++ b/example/hello.c
@@ -59,8 +59,8 @@ static void *hello_init(struct fuse_conn_info *conn,
cfg->kernel_cache = 1;
/* Test setting flags the old way */
- conn->want = FUSE_CAP_ASYNC_READ;
- conn->want &= ~FUSE_CAP_ASYNC_READ;
+ fuse_set_feature_flag(conn, FUSE_CAP_ASYNC_READ);
+ fuse_unset_feature_flag(conn, FUSE_CAP_ASYNC_READ);
return NULL;
}