diff options
author | Pino Toscano <toscano.pino@tiscali.it> | 2013-03-24 16:46:37 +0100 |
---|---|---|
committer | Pino Toscano <toscano.pino@tiscali.it> | 2013-03-24 16:46:37 +0100 |
commit | cd50c0de1db93520000bfb907caf07e51aa6cec5 (patch) | |
tree | 255e199b8840d670293ef947e2e713920dd583dd /src/main.c | |
parent | 9483570dadbe5675dbae5c0e8447225e8e880825 (diff) |
Fix context and user data handling at init time
Make sure, using an helper function, to have an existing context before calling
the init fuse operation. Also, the USER_DATA arg of fuse_new must be set as
new PRIVATE_DATA in the fuse context before calling the init fuse operation.
* src/fuse_i.h (struct iouser): New forward declaration.
(struct fuse): Remove field 'user_data'.
(update_context_struct): New function.
* src/main.c (fuse_new): Update LIBFUSE_CTX correctly before and after calling
init.
* src/netfs.c (refresh_context_struct): Call refresh_context_struct.
(update_context_struct): New function, mostly derived from
refresh_context_struct. Update CTX->FUSE and CTX->PRIVATE_DATA correctly.
Diffstat (limited to 'src/main.c')
-rw-r--r-- | src/main.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/src/main.c b/src/main.c index 39d5f6acb..b8f25c8cd 100644 --- a/src/main.c +++ b/src/main.c @@ -314,8 +314,6 @@ fuse_new(struct fuse_chan *ch, struct fuse_args *args, } memcpy(&new->op, op, op_size); - new->user_data = user_data; - /* FIXME: figure out better values for fuse_conn_info fields. */ new->conn.proto_major = FUSE_MAJOR_VERSION; new->conn.proto_minor = FUSE_MINOR_VERSION; @@ -323,6 +321,9 @@ fuse_new(struct fuse_chan *ch, struct fuse_args *args, new->conn.max_write = UINT_MAX; new->conn.max_readahead = UINT_MAX; + update_context_struct(NULL, new); + libfuse_ctx->private_data = user_data; + if(new->op.ops.init != NULL) { if (new->version >= 26) @@ -331,6 +332,8 @@ fuse_new(struct fuse_chan *ch, struct fuse_args *args, new->private_data = new->op.ops25.init(); } + update_context_struct(NULL, NULL); + return new; } |