mirror of
				https://github.com/winfsp/winfsp.git
				synced 2025-10-31 12:08:41 -05:00 
			
		
		
		
	
		
			
				
	
	
		
			203 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			203 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /**
 | |
|  * @file fuse/fuse_common.h
 | |
|  * WinFsp FUSE compatible API.
 | |
|  *
 | |
|  * This file is derived from libfuse/include/fuse_common.h:
 | |
|  *     FUSE: Filesystem in Userspace
 | |
|  *     Copyright (C) 2001-2007  Miklos Szeredi <miklos@szeredi.hu>
 | |
|  *
 | |
|  * @copyright 2015-2025 Bill Zissimopoulos
 | |
|  */
 | |
| /*
 | |
|  * This file is part of WinFsp.
 | |
|  *
 | |
|  * You can redistribute it and/or modify it under the terms of the GNU
 | |
|  * General Public License version 3 as published by the Free Software
 | |
|  * Foundation.
 | |
|  *
 | |
|  * Licensees holding a valid commercial license may use this software
 | |
|  * in accordance with the commercial license agreement provided in
 | |
|  * conjunction with the software.  The terms and conditions of any such
 | |
|  * commercial license agreement shall govern, supersede, and render
 | |
|  * ineffective any application of the GPLv3 license to this software,
 | |
|  * notwithstanding of any reference thereto in the software or
 | |
|  * associated repository.
 | |
|  */
 | |
| 
 | |
| #ifndef FUSE_COMMON_H_
 | |
| #define FUSE_COMMON_H_
 | |
| 
 | |
| #include "winfsp_fuse.h"
 | |
| #include "fuse_opt.h"
 | |
| 
 | |
| #ifdef __cplusplus
 | |
| extern "C" {
 | |
| #endif
 | |
| 
 | |
| #define FUSE_MAJOR_VERSION              2
 | |
| #define FUSE_MINOR_VERSION              8
 | |
| #define FUSE_MAKE_VERSION(maj, min)     ((maj) * 10 + (min))
 | |
| #define FUSE_VERSION                    FUSE_MAKE_VERSION(FUSE_MAJOR_VERSION, FUSE_MINOR_VERSION)
 | |
| 
 | |
| #define FUSE_CAP_ASYNC_READ             (1 << 0)
 | |
| #define FUSE_CAP_POSIX_LOCKS            (1 << 1)
 | |
| #define FUSE_CAP_ATOMIC_O_TRUNC         (1 << 3)
 | |
| #define FUSE_CAP_EXPORT_SUPPORT         (1 << 4)
 | |
| #define FUSE_CAP_BIG_WRITES             (1 << 5)
 | |
| #define FUSE_CAP_DONT_MASK              (1 << 6)
 | |
| #define FUSE_CAP_ALLOCATE               (1 << 27)   /* reserved (OSXFUSE) */
 | |
| #define FUSE_CAP_EXCHANGE_DATA          (1 << 28)   /* reserved (OSXFUSE) */
 | |
| #define FUSE_CAP_CASE_INSENSITIVE       (1 << 29)   /* file system is case insensitive */
 | |
| #define FUSE_CAP_VOL_RENAME             (1 << 30)   /* reserved (OSXFUSE) */
 | |
| #define FUSE_CAP_XTIMES                 (1 << 31)   /* reserved (OSXFUSE) */
 | |
| 
 | |
| #define FSP_FUSE_CAP_READDIR_PLUS       (1 << 21)   /* file system supports enhanced readdir */
 | |
| #define FSP_FUSE_CAP_READ_ONLY          (1 << 22)   /* file system is marked read-only */
 | |
| #define FSP_FUSE_CAP_STAT_EX            (1 << 23)   /* file system supports fuse_stat_ex */
 | |
| #define FSP_FUSE_CAP_DELETE_ACCESS      (1 << 24)   /* file system supports access with DELETE_OK */
 | |
| #define FSP_FUSE_CAP_CASE_INSENSITIVE   FUSE_CAP_CASE_INSENSITIVE
 | |
| 
 | |
| #define FUSE_IOCTL_COMPAT               (1 << 0)
 | |
| #define FUSE_IOCTL_UNRESTRICTED         (1 << 1)
 | |
| #define FUSE_IOCTL_RETRY                (1 << 2)
 | |
| #define FUSE_IOCTL_MAX_IOV              256
 | |
| 
 | |
| /* from FreeBSD */
 | |
| #define FSP_FUSE_UF_HIDDEN              0x00008000
 | |
| #define FSP_FUSE_UF_READONLY            0x00001000
 | |
| #define FSP_FUSE_UF_SYSTEM              0x00000080
 | |
| #define FSP_FUSE_UF_ARCHIVE             0x00000800
 | |
| #if !defined(UF_HIDDEN)
 | |
| #define UF_HIDDEN                       FSP_FUSE_UF_HIDDEN
 | |
| #endif
 | |
| #if !defined(UF_READONLY)
 | |
| #define UF_READONLY                     FSP_FUSE_UF_READONLY
 | |
| #endif
 | |
| #if !defined(UF_SYSTEM)
 | |
| #define UF_SYSTEM                       FSP_FUSE_UF_SYSTEM
 | |
| #endif
 | |
| #if !defined(UF_ARCHIVE)
 | |
| #define UF_ARCHIVE                      FSP_FUSE_UF_ARCHIVE
 | |
| #endif
 | |
| 
 | |
| /* delete access */
 | |
| #define FSP_FUSE_DELETE_OK              0x40000000
 | |
| 
 | |
| /* notify extension */
 | |
| #define FSP_FUSE_NOTIFY_MKDIR           0x0001
 | |
| #define FSP_FUSE_NOTIFY_RMDIR           0x0002
 | |
| #define FSP_FUSE_NOTIFY_CREATE          0x0004
 | |
| #define FSP_FUSE_NOTIFY_UNLINK          0x0008
 | |
| #define FSP_FUSE_NOTIFY_CHMOD           0x0010
 | |
| #define FSP_FUSE_NOTIFY_CHOWN           0x0020
 | |
| #define FSP_FUSE_NOTIFY_UTIME           0x0040
 | |
| #define FSP_FUSE_NOTIFY_CHFLAGS         0x0080
 | |
| #define FSP_FUSE_NOTIFY_TRUNCATE        0x0100
 | |
| 
 | |
| /* getpath extension */
 | |
| #define FSP_FUSE_HAS_GETPATH            1
 | |
| 
 | |
| struct fuse_file_info
 | |
| {
 | |
|     int flags;
 | |
|     unsigned int fh_old;
 | |
|     int writepage;
 | |
|     unsigned int direct_io:1;
 | |
|     unsigned int keep_cache:1;
 | |
|     unsigned int flush:1;
 | |
|     unsigned int nonseekable:1;
 | |
|     unsigned int padding:28;
 | |
|     uint64_t fh;
 | |
|     uint64_t lock_owner;
 | |
| };
 | |
| 
 | |
| struct fuse_conn_info
 | |
| {
 | |
|     unsigned proto_major;
 | |
|     unsigned proto_minor;
 | |
|     unsigned async_read;
 | |
|     unsigned max_write;
 | |
|     unsigned max_readahead;
 | |
|     unsigned capable;
 | |
|     unsigned want;
 | |
|     unsigned reserved[25];
 | |
| };
 | |
| 
 | |
| struct fuse_session;
 | |
| struct fuse_chan;
 | |
| struct fuse_pollhandle;
 | |
| struct fuse_bufvec;
 | |
| struct fuse_statfs;
 | |
| struct fuse_setattr_x;
 | |
| 
 | |
| FSP_FUSE_API int FSP_FUSE_API_NAME(fsp_fuse_version)(struct fsp_fuse_env *env);
 | |
| FSP_FUSE_API struct fuse_chan *FSP_FUSE_API_NAME(fsp_fuse_mount)(struct fsp_fuse_env *env,
 | |
|     const char *mountpoint, struct fuse_args *args);
 | |
| FSP_FUSE_API void FSP_FUSE_API_NAME(fsp_fuse_unmount)(struct fsp_fuse_env *env,
 | |
|     const char *mountpoint, struct fuse_chan *ch);
 | |
| FSP_FUSE_API int FSP_FUSE_API_NAME(fsp_fuse_parse_cmdline)(struct fsp_fuse_env *env,
 | |
|     struct fuse_args *args,
 | |
|     char **mountpoint, int *multithreaded, int *foreground);
 | |
| FSP_FUSE_API int32_t FSP_FUSE_API_NAME(fsp_fuse_ntstatus_from_errno)(struct fsp_fuse_env *env,
 | |
|     int err);
 | |
| 
 | |
| FSP_FUSE_SYM(
 | |
| int fuse_version(void),
 | |
| {
 | |
|     return FSP_FUSE_API_CALL(fsp_fuse_version)
 | |
|         (fsp_fuse_env());
 | |
| })
 | |
| 
 | |
| FSP_FUSE_SYM(
 | |
| struct fuse_chan *fuse_mount(const char *mountpoint, struct fuse_args *args),
 | |
| {
 | |
|     return FSP_FUSE_API_CALL(fsp_fuse_mount)
 | |
|         (fsp_fuse_env(), mountpoint, args);
 | |
| })
 | |
| 
 | |
| FSP_FUSE_SYM(
 | |
| void fuse_unmount(const char *mountpoint, struct fuse_chan *ch),
 | |
| {
 | |
|     FSP_FUSE_API_CALL(fsp_fuse_unmount)
 | |
|         (fsp_fuse_env(), mountpoint, ch);
 | |
| })
 | |
| 
 | |
| FSP_FUSE_SYM(
 | |
| int fuse_parse_cmdline(struct fuse_args *args,
 | |
|     char **mountpoint, int *multithreaded, int *foreground),
 | |
| {
 | |
|     return FSP_FUSE_API_CALL(fsp_fuse_parse_cmdline)
 | |
|         (fsp_fuse_env(), args, mountpoint, multithreaded, foreground);
 | |
| })
 | |
| 
 | |
| FSP_FUSE_SYM(
 | |
| void fuse_pollhandle_destroy(struct fuse_pollhandle *ph),
 | |
| {
 | |
|     (void)ph;
 | |
| })
 | |
| 
 | |
| FSP_FUSE_SYM(
 | |
| int fuse_daemonize(int foreground),
 | |
| {
 | |
|     return fsp_fuse_daemonize(foreground);
 | |
| })
 | |
| 
 | |
| FSP_FUSE_SYM(
 | |
| int fuse_set_signal_handlers(struct fuse_session *se),
 | |
| {
 | |
|     return fsp_fuse_set_signal_handlers(se);
 | |
| })
 | |
| 
 | |
| FSP_FUSE_SYM(
 | |
| void fuse_remove_signal_handlers(struct fuse_session *se),
 | |
| {
 | |
|     (void)se;
 | |
|     fsp_fuse_set_signal_handlers(0);
 | |
| })
 | |
| 
 | |
| #ifdef __cplusplus
 | |
| }
 | |
| #endif
 | |
| 
 | |
| #endif
 |