1#define FUSE_USE_VERSION FUSE_MAKE_VERSION(3, 17)
12static void print_conn_info(
const char *prefix,
struct fuse_conn_info *conn)
14 struct fuse_session *se = container_of(conn,
struct fuse_session, conn);
16 printf(
"%s: want=0x%" PRIx32
" want_ext=0x%" PRIx64
17 " want_default=0x%" PRIx32
" want_ext_default=0x%" PRIx64
"\n",
26 conn->
want &= ~FUSE_CAP_SPLICE_READ;
43static void test_fuse_fs_init(
struct fuse_conn_info *conn,
bool new_style)
49 application_init_new_style(conn);
51 application_init_old_style(conn);
54static void test_do_init(
struct fuse_conn_info *conn,
bool new_style)
67 print_conn_info(
"Initial state", conn);
71 test_fuse_fs_init(conn, new_style);
72 print_conn_info(
"After init", conn);
91 print_conn_info(
"After init", conn);
94static void test_want_conversion_basic(
void)
98 struct fuse_session *se;
103 fprintf(stderr,
"Failed to add argument\n");
104 errx(1,
"Failed to add argument");
108 se = fuse_session_new(&args, &ops,
sizeof(ops), NULL);
111 printf(
"\nTesting basic want conversion, old style:\n");
112 test_do_init(conn,
false);
115 se = fuse_session_new(&args, &ops,
sizeof(ops), NULL);
118 printf(
"\nTesting basic want conversion, new style:\n");
119 test_do_init(conn,
true);
120 print_conn_info(
"After init", conn);
127static void test_want_conversion_conflict(
void)
132 printf(
"\nTesting want conversion conflict:\n");
142 print_conn_info(
"Test conflict initial", &conn);
146 conn.
want &= ~FUSE_CAP_SPLICE_READ;
149 assert(rc == -EINVAL);
150 print_conn_info(
"Test conflict after", &conn);
152 printf(
"Want conversion conflict test passed\n");
155static void test_want_conversion_high_bits(
void)
160 printf(
"\nTesting want conversion high bits preservation:\n");
165 print_conn_info(
"Test high bits initial", &conn);
170 print_conn_info(
"Test high bits after", &conn);
172 printf(
"Want conversion high bits test passed\n");
177 test_want_conversion_basic();
178 test_want_conversion_conflict();
179 test_want_conversion_high_bits();
#define FUSE_CAP_IOCTL_DIR
void fuse_unset_feature_flag(struct fuse_conn_info *conn, uint64_t flag)
int fuse_convert_to_conn_want_ext(struct fuse_conn_info *conn)
bool fuse_set_feature_flag(struct fuse_conn_info *conn, uint64_t flag)
#define FUSE_CAP_SPLICE_READ
#define FUSE_CAP_ATOMIC_O_TRUNC
#define FUSE_CAP_ASYNC_READ
#define FUSE_CAP_SPLICE_WRITE
#define FUSE_CAP_EXPORT_SUPPORT
#define FUSE_CAP_POSIX_LOCKS
#define FUSE_CAP_SPLICE_MOVE
#define FUSE_CAP_FLOCK_LOCKS
void fuse_session_destroy(struct fuse_session *se)
int fuse_opt_add_arg(struct fuse_args *args, const char *arg)
void fuse_opt_free_args(struct fuse_args *args)
#define FUSE_ARGS_INIT(argc, argv)