From b609435dad6842ff755a20abd025e827af7d5062 Mon Sep 17 00:00:00 2001 From: Bill Zissimopoulos Date: Wed, 25 Jul 2018 13:26:36 -0700 Subject: [PATCH] dll: fuse: refactoring --- src/dll/fuse/fuse.c | 7 +---- src/dll/fuse/library.h | 63 ++++++++++++++++++++---------------------- 2 files changed, 31 insertions(+), 39 deletions(-) diff --git a/src/dll/fuse/fuse.c b/src/dll/fuse/fuse.c index 84a8abc3..13c9eb3c 100644 --- a/src/dll/fuse/fuse.c +++ b/src/dll/fuse/fuse.c @@ -97,7 +97,7 @@ static struct fuse_opt fsp_fuse_core_opts[] = }; static INIT_ONCE fsp_fuse_initonce = INIT_ONCE_STATIC_INIT; -static DWORD fsp_fuse_tlskey = TLS_OUT_OF_INDEXES; +DWORD fsp_fuse_tlskey = TLS_OUT_OF_INDEXES; static BOOL WINAPI fsp_fuse_initialize( PINIT_ONCE InitOnce, PVOID Parameter, PVOID *Context) @@ -748,11 +748,6 @@ FSP_FUSE_API struct fuse_context *fsp_fuse_get_context(struct fsp_fuse_env *env) return context; } -struct fuse_context *fsp_fuse_get_context_internal(void) -{ - return TlsGetValue(fsp_fuse_tlskey); -} - FSP_FUSE_API int32_t fsp_fuse_ntstatus_from_errno(struct fsp_fuse_env *env, int err) { diff --git a/src/dll/fuse/library.h b/src/dll/fuse/library.h index 03ef9c54..e381e01a 100644 --- a/src/dll/fuse/library.h +++ b/src/dll/fuse/library.h @@ -33,6 +33,14 @@ #define ENOSYS_(env) ('C' == (env)->environment ? 88 : 40) +/* NFS reparse points */ +#define NFS_SPECFILE_FIFO 0x000000004F464946 +#define NFS_SPECFILE_CHR 0x0000000000524843 +#define NFS_SPECFILE_BLK 0x00000000004b4c42 +#define NFS_SPECFILE_LNK 0x00000000014b4e4c +#define NFS_SPECFILE_SOCK 0x000000004B434F53 + +/* FUSE internal struct's */ struct fuse { struct fsp_fuse_env *env; @@ -58,13 +66,11 @@ struct fuse volatile int exited; struct fuse3 *fuse3; }; - struct fsp_fuse_context_header { char *PosixPath; __declspec(align(MEMORY_ALLOCATION_ALIGNMENT)) UINT8 ContextBuf[]; }; - struct fsp_fuse_file_desc { char *PosixPath; @@ -73,7 +79,6 @@ struct fsp_fuse_file_desc UINT64 FileHandle; PVOID DirBuffer; }; - struct fuse_dirhandle { /* ReadDirectory */ @@ -85,39 +90,12 @@ struct fuse_dirhandle BOOLEAN DotFiles, HasChild; }; -NTSTATUS fsp_fuse_op_enter(FSP_FILE_SYSTEM *FileSystem, - FSP_FSCTL_TRANSACT_REQ *Request, FSP_FSCTL_TRANSACT_RSP *Response); -NTSTATUS fsp_fuse_op_leave(FSP_FILE_SYSTEM *FileSystem, - FSP_FSCTL_TRANSACT_REQ *Request, FSP_FSCTL_TRANSACT_RSP *Response); - -int fsp_fuse_intf_CanDeleteAddDirInfo(void *buf, const char *name, - const struct fuse_stat *stbuf, fuse_off_t off); -int fsp_fuse_intf_AddDirInfo(void *buf, const char *name, - const struct fuse_stat *stbuf, fuse_off_t off); - -extern FSP_FILE_SYSTEM_INTERFACE fsp_fuse_intf; - -NTSTATUS fsp_fuse_get_token_uidgid( - HANDLE Token, - TOKEN_INFORMATION_CLASS UserOrOwnerClass, /* TokenUser|TokenOwner */ - PUINT32 PUid, PUINT32 PGid); - -/* NFS reparse points */ - -#define NFS_SPECFILE_FIFO 0x000000004F464946 -#define NFS_SPECFILE_CHR 0x0000000000524843 -#define NFS_SPECFILE_BLK 0x00000000004b4c42 -#define NFS_SPECFILE_LNK 0x00000000014b4e4c -#define NFS_SPECFILE_SOCK 0x000000004B434F53 - /* FUSE obj alloc/free */ - struct fsp_fuse_obj_hdr { void (*dtor)(void *); __declspec(align(MEMORY_ALLOCATION_ALIGNMENT)) UINT8 ObjectBuf[]; }; - static inline void *fsp_fuse_obj_alloc(struct fsp_fuse_env *env, size_t size) { struct fsp_fuse_obj_hdr *hdr; @@ -130,7 +108,6 @@ static inline void *fsp_fuse_obj_alloc(struct fsp_fuse_env *env, size_t size) memset(hdr->ObjectBuf, 0, size); return hdr->ObjectBuf; } - static inline void fsp_fuse_obj_free(void *obj) { if (0 == obj) @@ -141,8 +118,14 @@ static inline void fsp_fuse_obj_free(void *obj) hdr->dtor(hdr); } -struct fuse_context *fsp_fuse_get_context_internal(void); +/* fsp_fuse_get_context_internal */ +extern DWORD fsp_fuse_tlskey; +static inline struct fuse_context *fsp_fuse_get_context_internal(void) +{ + return TlsGetValue(fsp_fuse_tlskey); +} +/* fsp_fuse_core_opt_parse */ struct fsp_fuse_core_opt_data { struct fsp_fuse_env *env; @@ -166,9 +149,23 @@ struct fsp_fuse_core_opt_data FSP_FSCTL_STATIC_ASSERT( sizeof ((struct fuse *)0)->VolumeLabel == sizeof ((struct fsp_fuse_core_opt_data *)0)->VolumeLabel, "fuse::VolumeLabel and fsp_fuse_core_opt_data::VolumeLabel: sizeof must be same."); - int fsp_fuse_core_opt_parse(struct fsp_fuse_env *env, struct fuse_args *args, struct fsp_fuse_core_opt_data *opt_data, int help); +/* misc public symbols */ +NTSTATUS fsp_fuse_op_enter(FSP_FILE_SYSTEM *FileSystem, + FSP_FSCTL_TRANSACT_REQ *Request, FSP_FSCTL_TRANSACT_RSP *Response); +NTSTATUS fsp_fuse_op_leave(FSP_FILE_SYSTEM *FileSystem, + FSP_FSCTL_TRANSACT_REQ *Request, FSP_FSCTL_TRANSACT_RSP *Response); +int fsp_fuse_intf_CanDeleteAddDirInfo(void *buf, const char *name, + const struct fuse_stat *stbuf, fuse_off_t off); +int fsp_fuse_intf_AddDirInfo(void *buf, const char *name, + const struct fuse_stat *stbuf, fuse_off_t off); +NTSTATUS fsp_fuse_get_token_uidgid( + HANDLE Token, + TOKEN_INFORMATION_CLASS UserOrOwnerClass, /* TokenUser|TokenOwner */ + PUINT32 PUid, PUINT32 PGid); +extern FSP_FILE_SYSTEM_INTERFACE fsp_fuse_intf; + #endif