Refactor common headers

This commit is contained in:
Benjamin Fleischer 2015-01-05 17:18:29 +01:00
parent c84fd24517
commit 53082cd3d2
9 changed files with 315 additions and 207 deletions

View File

@ -6,36 +6,35 @@
#ifndef _FUSE_IOCTL_H_
#define _FUSE_IOCTL_H_
#include <sys/ioctl.h>
#include <stdint.h>
#include <sys/ioctl.h>
/* FUSEDEVIOCxxx */
/* Get mounter's pid. */
// Get mounter's pid
#define FUSEDEVGETMOUNTERPID _IOR('F', 1, u_int32_t)
/* Check if FUSE_INIT kernel-user handshake is complete. */
// Check if FUSE_INIT kernel-user handshake is complete
#define FUSEDEVIOCGETHANDSHAKECOMPLETE _IOR('F', 2, u_int32_t)
/* Mark the daemon as dead. */
// Mark the daemon as dead
#define FUSEDEVIOCSETDAEMONDEAD _IOW('F', 3, u_int32_t)
/* Tell the kernel which operations the daemon implements. */
// Tell the kernel which operations the daemon implements
#define FUSEDEVIOCSETIMPLEMENTEDBITS _IOW('F', 4, u_int64_t)
/* Get device's random "secret". */
// Get device's random "secret"
#define FUSEDEVIOCGETRANDOM _IOR('F', 5, u_int32_t)
/*
* The 'AVFI' (alter-vnode-for-inode) ioctls all require an inode number
* as an argument. In the user-space library, you can get the inode number
* from a path by using fuse_lookup_inode_by_path_np() [lib/fuse.c].
* The "AVFI" (alter-vnode-for-inode) ioctls all require an inode number as an
* argument. In the user-space library, you can get the inode number from a
* path by using fuse_lookup_inode_by_path_np().
*
* To see an example of using this, see the implementation of
* fuse_purge_path_np() in lib/fuse_darwin.c.
*/
struct fuse_avfi_ioctl {
struct fuse_avfi_ioctl
{
uint64_t inode;
uint64_t cmd;
uint32_t ubc_flags;
@ -43,21 +42,20 @@ struct fuse_avfi_ioctl {
off_t size;
};
/* Alter the vnode (if any) specified by the given inode. */
// Alter the vnode (if any) specified by the given inode
#define FUSEDEVIOCALTERVNODEFORINODE _IOW('F', 6, struct fuse_avfi_ioctl)
#define FSCTLALTERVNODEFORINODE IOCBASECMD(FUSEDEVIOCALTERVNODEFORINODE)
/*
* Possible cmd values for AVFI.
*/
/* Possible cmd values for AVFI */
#define FUSE_AVFI_MARKGONE 0x00000001 /* no ubc_flags */
#define FUSE_AVFI_PURGEATTRCACHE 0x00000002 /* no ubc_flags */
#define FUSE_AVFI_PURGEVNCACHE 0x00000004 /* no ubc_flags */
#define FUSE_AVFI_UBC 0x00000008 /* uses ubc_flags */
#define FUSE_AVFI_UBC_SETSIZE 0x00000010 /* uses ubc_flags, size */
#define FUSE_AVFI_KNOTE 0x00000020 /* uses note */
#define FUSE_AVFI_MARKGONE 0x00000001 // no ubc_flags
#define FUSE_AVFI_PURGEATTRCACHE 0x00000002 // no ubc_flags
#define FUSE_AVFI_PURGEVNCACHE 0x00000004 // no ubc_flags
#define FUSE_AVFI_UBC 0x00000008 // uses ubc_flags
#define FUSE_AVFI_UBC_SETSIZE 0x00000010 // uses ubc_flags, size
#define FUSE_AVFI_KNOTE 0x00000020 // uses note
// Enable or disable ACL
#define FUSE_SETACLSTATE _IOW('h', 10, int32_t)
#define FSCTLSETACLSTATE IOCBASECMD(FUSE_SETACLSTATE)

View File

@ -13,39 +13,50 @@
#include <sys/param.h>
#include <sys/stat.h>
#include <sys/types.h>
#ifndef KERNEL
#include <unistd.h>
#include <unistd.h>
#endif
/*
* Shared between the kernel and user spaces. This is 64-bit invariant.
* Mount arguments, shared between the kernel and user-space. This structure
* is 64-bit invariant.
*/
struct fuse_mount_args {
char mntpath[MAXPATHLEN]; // path to the mount point
char fsname[MAXPATHLEN]; // file system description string
struct fuse_mount_args
{
char mntpath[MAXPATHLEN]; // path to the mount point
char fsname[MAXPATHLEN]; // file system description string
char fstypename[MFSTYPENAMELEN]; // file system type name
char volname[MAXPATHLEN]; // volume name
uint64_t altflags; // see mount-time flags below
uint32_t blocksize; // fictitious block size of our "storage"
uint32_t daemon_timeout; // timeout in seconds for upcalls to daemon
uint32_t fsid; // optional custom value for part of fsid[0]
uint32_t fssubtype; // file system sub type id (type is "osxfuse")
uint32_t iosize; // maximum size for reading or writing
uint32_t random; // random "secret" from device
uint32_t rdev; // dev_t for the /dev/osxfuseN in question
char volname[MAXPATHLEN]; // volume name
uint64_t altflags; // see mount-time flags below
uint32_t blocksize; // fictitious block size of our "storage"
uint32_t daemon_timeout; // timeout in seconds for upcalls to daemon
uint32_t fsid; // optional custom value for part of fsid[0]
uint32_t fssubtype; // file system sub type id
uint32_t iosize; // maximum size for reading or writing
uint32_t random; // random "secret" from device
uint32_t rdev; // dev_t for the /dev/osxfuse{n} in question
};
typedef struct fuse_mount_args fuse_mount_args;
/* file system subtype */
enum {
/* File system subtypes */
enum
{
FUSE_FSSUBTYPE_UNKNOWN = 0,
FUSE_FSSUBTYPE_INVALID = -1,
};
/* Courtesy of the Finder, this is 1 less than what you think it should be. */
#define FUSE_FSTYPENAME_MAXLEN (MFSTYPENAMELEN - sizeof(OSXFUSE_FSTYPENAME_PREFIX) - 1)
/*
* Maximum file system type name length. Courtesy of the Finder, this is 1
* less than what you think it should be.
*/
#define FUSE_TYPE_NAME_MAXLEN (MFSTYPENAMELEN - sizeof(OSXFUSE_TYPE_NAME_PREFIX) - 1)
/* Mount-time flags */
/* mount-time flags */
#define FUSE_MOPT_IGNORE 0x0000000000000000ULL
#define FUSE_MOPT_ALLOW_OTHER 0x0000000000000001ULL
#define FUSE_MOPT_ALLOW_RECURSION 0x0000000000000002ULL
@ -76,8 +87,6 @@ enum {
#define FUSE_MOPT_NO_SYNCWRITES 0x0000000020000000ULL
#define FUSE_MOPT_NO_UBC 0x0000000040000000ULL
#define FUSE_MOPT_NO_VNCACHE 0x0000000080000000ULL
/* Next 32 bits */
#define FUSE_MOPT_USE_INO 0x0000000100000000ULL
#define FUSE_MOPT_VOLNAME 0x0000000200000000ULL
#define FUSE_MOPT_AUTO_CACHE 0x0000000800000000ULL

View File

@ -1,163 +1,181 @@
/*
* Copyright (c) 2006-2008 Amit Singh/Google Inc.
* Copyright (c) 2010 Tuxera Inc.
* Copyright (c) 2011-2014 Benjamin Fleischer
* Copyright (c) 2011-2015 Benjamin Fleischer
* All rights reserved.
*/
#ifndef _FUSE_PARAM_H_
#define _FUSE_PARAM_H_
#include <fuse_preprocessor.h>
#include <fuse_version.h>
#include <AvailabilityMacros.h>
#include <mach/vm_param.h>
/* Compile-time tunables */
#define M_OSXFUSE_ENABLE_FIFOFS 0
#define M_OSXFUSE_ENABLE_INTERRUPT 1
#define M_OSXFUSE_ENABLE_SPECFS 0
#define M_OSXFUSE_ENABLE_TSLOCKING 1
#define M_OSXFUSE_ENABLE_UNSUPPORTED 1
#define M_OSXFUSE_ENABLE_XATTR 1
#define M_OSXFUSE_ENABLE_DSELECT 1
#define M_OSXFUSE_ENABLE_KEXT_VERSION_CHECK 0
#if M_OSXFUSE_ENABLE_UNSUPPORTED
#define M_OSXFUSE_ENABLE_EXCHANGE 1
#define M_OSXFUSE_ENABLE_INTERIM_FSNODE_LOCK 1
#ifdef KERNEL
#include <libkern/version.h>
#endif
#if MAC_OS_X_VERSION_MIN_REQUIRED < 1060
/*
* Compile-time tunables
*/
#ifdef KERNEL
/* Kernel-space compile-time tunables */
#define M_OSXFUSE_ENABLE_FIFOFS 0
#define M_OSXFUSE_ENABLE_INTERRUPT 1
#define M_OSXFUSE_ENABLE_SPECFS 0
#define M_OSXFUSE_ENABLE_TSLOCKING 1
#define M_OSXFUSE_ENABLE_UNSUPPORTED 1
#define M_OSXFUSE_ENABLE_XATTR 1
#define M_OSXFUSE_ENABLE_DSELECT 1
#if M_OSXFUSE_ENABLE_UNSUPPORTED
#define M_OSXFUSE_ENABLE_EXCHANGE 1
#define M_OSXFUSE_ENABLE_INTERIM_FSNODE_LOCK 1
/*
* In Mac OS X 10.5 the file system implementation is responsible for
* posting kqueue events. Starting with Mac OS X 10.6 VFS took over
* that job.
* In Mac OS X 10.5 the file system implementation is responsible for posting
* kqueue events. Starting with Mac OS X 10.6 VFS took over that job.
*/
#if VERSION_MAJOR < 10
#define M_OSXFUSE_ENABLE_KQUEUE 1
#endif
#endif /* M_OSXFUSE_ENABLE_UNSUPPORTED */
#if M_OSXFUSE_ENABLE_INTERIM_FSNODE_LOCK
/*
* Options M_OSXFUSE_ENABLE_BIG_LOCK and M_OSXFUSE_ENABLE_HUGE_LOCK are
* mutually exclusive.
*/
#define M_OSXFUSE_ENABLE_KQUEUE 1
#endif
#endif /* MAC_OS_X_VERSION_MIN_REQUIRED < 1060 */
#define M_OSXFUSE_ENABLE_HUGE_LOCK 0
#define M_OSXFUSE_ENABLE_BIG_LOCK 1
#if M_OSXFUSE_ENABLE_INTERIM_FSNODE_LOCK
/*
* Options M_OSXFUSE_ENABLE_BIG_LOCK and M_OSXFUSE_ENABLE_HUGE_LOCK are
* mutually exclusive.
*/
#define M_OSXFUSE_ENABLE_HUGE_LOCK 0
#define M_OSXFUSE_ENABLE_BIG_LOCK 1
#define M_OSXFUSE_ENABLE_LOCK_LOGGING 0
#endif /* M_OSXFUSE_ENABLE_INTERIM_FSNODE_LOCK */
#define M_OSXFUSE_ENABLE_LOCK_LOGGING 0
#define FUSE_VNOP_EXPORT __private_extern__
#else
#define FUSE_VNOP_EXPORT static
#endif /* M_OSXFUSE_ENABLE_INTERIM_FSNODE_LOCK */
#else /* !KERNEL */
/* User-space compile-time tunables */
/* User Control */
#define M_OSXFUSE_ENABLE_KEXT_VERSION_CHECK 0
#endif /* KERNEL */
#define MACOSX_ADMIN_GROUP_NAME "admin"
/*
* Availability
*/
// Minimum supported Darwin version
#define OSXFUSE_MIN_DARWIN_VERSION 9 /* Mac OS X 10.5 */
#define SYSCTL_OSXFUSE_TUNABLES_ADMIN "vfs.generic." OSXFUSE_NAME ".tunables.admin_group"
#define SYSCTL_OSXFUSE_VERSION_NUMBER "vfs.generic." OSXFUSE_NAME ".version.number"
/* Compatible API version */
#if OSXFUSE_ENABLE_MACFUSE_MODE
#define SYSCTL_OSXFUSE_MACFUSE_MODE "vfs.generic." OSXFUSE_NAME ".control.macfuse_mode"
#endif
#define FUSE_ABI_VERSION_MAX (FUSE_KERNEL_VERSION * 100 + FUSE_KERNEL_MINOR_VERSION)
#define FUSE_ABI_VERSION_MIN 708
/* Paths */
/*
* Paths
*/
#ifndef OSXFUSE_BUNDLE_PREFIX_LITERAL
#define OSXFUSE_BUNDLE_PREFIX_LITERAL
#endif
#define OSXFUSE_BUNDLE_PREFIX FUSE_PP_STRINGIFY(OSXFUSE_BUNDLE_PREFIX_LITERAL)
#define OSXFUSE_BUNDLE_PREFIX OSXFUSE_STRINGIFY(OSXFUSE_BUNDLE_PREFIX_LITERAL)
#define OSXFUSE_BUNDLE_PATH OSXFUSE_BUNDLE_PREFIX "/Library/Filesystems/osxfuse.fs"
#define OSXFUSE_RESOURCES_PATH OSXFUSE_BUNDLE_PATH "/Contents/Resources"
#define OSXFUSE_EXTENSIONS_PATH OSXFUSE_BUNDLE_PATH "/Contents/Extensions"
#define OSXFUSE_KEXT_NAME "osxfuse.kext"
#define OSXFUSE_LOAD_PROG OSXFUSE_RESOURCES_PATH "/load_osxfuse"
#define OSXFUSE_MOUNT_PROG OSXFUSE_RESOURCES_PATH "/mount_osxfuse"
#define SYSTEM_KEXTLOAD "/sbin/kextload"
#define SYSTEM_KEXTUNLOAD "/sbin/kextunload"
/* Minimum supported Darwin version */
#define OSXFUSE_MIN_DARWIN_VERSION 9
/* Compatible API version */
#define FUSE_ABI_VERSION_MAX (FUSE_KERNEL_VERSION * 100 + FUSE_KERNEL_MINOR_VERSION)
#define FUSE_ABI_VERSION_MIN 708
/* Device Interface */
#define OSXFUSE_BUNDLE_PATH OSXFUSE_BUNDLE_PREFIX "/Library/Filesystems/osxfuse.fs"
#define OSXFUSE_RESOURCES_PATH OSXFUSE_BUNDLE_PATH "/Contents/Resources"
#define OSXFUSE_EXTENSIONS_PATH OSXFUSE_BUNDLE_PATH "/Contents/Extensions"
#define OSXFUSE_KEXT_NAME "osxfuse.kext"
#define OSXFUSE_LOAD_PROG OSXFUSE_RESOURCES_PATH "/load_osxfuse"
#define OSXFUSE_MOUNT_PROG OSXFUSE_RESOURCES_PATH "/mount_osxfuse"
#define SYSTEM_KEXTLOAD "/sbin/kextload"
#define SYSTEM_KEXTUNLOAD "/sbin/kextunload"
/*
* This is the prefix ("osxfuse" by default) of the name of a FUSE device node
* in devfs. The suffix is the device number. "/dev/osxfuse0" is the first FUSE
* device by default. If you change the prefix from the default to something
* else, the user-space FUSE library will need to know about it too.
* User Control
*/
#define MACOSX_ADMIN_GROUP_NAME "admin"
#define OSXFUSE_SYSCTL_TUNABLES_ADMIN "vfs.generic." OSXFUSE_NAME ".tunables.admin_group"
#define OSXFUSE_SYSCTL_VERSION_NUMBER "vfs.generic." OSXFUSE_NAME ".version.number"
#if OSXFUSE_ENABLE_MACFUSE_MODE
#define OSXFUSE_SYSCTL_MACFUSE_MODE "vfs.generic." OSXFUSE_NAME ".control.macfuse_mode"
#endif
/*
* Device interface
*/
/*
* This is the prefix of the name of a FUSE device node in devfs. The suffix is
* the device number. "/dev/osxfuse0" is the first FUSE device by default.
*/
#define OSXFUSE_DEVICE_BASENAME OSXFUSE_NAME
/*
* This is the number of /dev/osxfuse<n> nodes we will create. <n> goes from
* This is the number of /dev/osxfuse{n} nodes we will create. {n} goes from
* 0 to (OSXFUSE_NDEVICES - 1).
*/
#define OSXFUSE_NDEVICES 24
/*
* File system interface
*/
#define FUSE_MAX_UPL_TRANSFER 256
/*
* This is the default block size of the virtual storage devices that are
* implicitly implemented by the FUSE kernel extension. This can be changed
* on a per-mount basis (there's one such virtual device for each mount).
* on a per-mount basis.
*/
#define FUSE_DEFAULT_BLOCKSIZE 4096
#define FUSE_MIN_BLOCKSIZE 512
#define FUSE_MAX_BLOCKSIZE MAXPHYS
#ifndef MAX_UPL_TRANSFER
#define MAX_UPL_TRANSFER 256
#endif
/*
* This is default I/O size used while accessing the virtual storage devices.
* This can be changed on a per-mount and per-file basis.
* This is the default I/O size used while accessing the virtual storage
* devices. It can be changed on a per-mount and per-file basis.
*
* Nevertheless, the I/O size must be at least as big as the block size.
*/
#define FUSE_DEFAULT_IOSIZE (16 * PAGE_SIZE)
#define FUSE_MIN_IOSIZE 512
#define FUSE_MAX_IOSIZE (MAX_UPL_TRANSFER * PAGE_SIZE)
#define FUSE_MAX_IOSIZE (FUSE_MAX_UPL_TRANSFER * PAGE_SIZE)
#define FUSE_DEFAULT_DAEMON_TIMEOUT 60 /* s */
#define FUSE_MIN_DAEMON_TIMEOUT 0 /* s */
#define FUSE_MAX_DAEMON_TIMEOUT 600 /* s */
/* User-Kernel IPC buffer */
#define FUSE_DEFAULT_USERKERNEL_BUFSIZE FUSE_MAX_IOSIZE
#define FUSE_MIN_USERKERNEL_BUFSIZE (128 * 1024)
#define FUSE_MAX_USERKERNEL_BUFSIZE (16 * 1024 * 1024)
/* Daemon timeout */
#define FUSE_DEFAULT_DAEMON_TIMEOUT 60 /* s */
#define FUSE_MIN_DAEMON_TIMEOUT 0 /* s */
#define FUSE_MAX_DAEMON_TIMEOUT 600 /* s */
#ifdef KERNEL
/*
* This is the soft upper limit on the number of "request tickets" FUSE's
* user-kernel IPC layer can have for a given mount. This can be modified
* through the fuse.* sysctl interface.
* through the vfs.generic.osxfuse.* sysctl interface.
*/
#define FUSE_DEFAULT_MAX_FREE_TICKETS 1024
#define FUSE_DEFAULT_IOV_PERMANENT_BUFSIZE (1 << 19)
#define FUSE_DEFAULT_IOV_CREDIT 16
/* User-Kernel IPC Buffer */
#define FUSE_MIN_USERKERNEL_BUFSIZE ( 128 * 1024)
#define FUSE_MAX_USERKERNEL_BUFSIZE (16 * 1024 * 1024)
#define FUSE_REASONABLE_XATTRSIZE FUSE_MIN_USERKERNEL_BUFSIZE
#define FUSE_LINK_MAX LINK_MAX
#define FUSE_UIO_BACKUP_MAX 8
#define FUSE_MAXNAMLEN 255
#endif /* KERNEL */
#define FUSE_DEFAULT_USERKERNEL_BUFSIZE (16 * 1024 * 1024)
#define FUSE_LINK_MAX LINK_MAX
#define FUSE_UIO_BACKUP_MAX 8
#define FUSE_MAXNAMLEN 255
#endif /* _FUSE_PARAM_H_ */

129
common/fuse_preprocessor.h Normal file
View File

@ -0,0 +1,129 @@
/*
* Copyright (c) 2015 Benjamin Fleischer
* All rights reserved.
*/
#ifndef _FUSE_PREPROCESSOR_H_
#define _FUSE_PREPROCESSOR_H_
/*
* Stringification
*/
#define FUSE_PP_STRINGIFY_I(s) #s
/* Expands to the stringified argument. */
#define FUSE_PP_STRINGIFY(s) FUSE_PP_STRINGIFY_I(s)
/*
* Count variadic arguments
*/
#define FUSE_PP_VARIADIC_COUNT_I(e00, e01, e02, e03, e04, e05, e06, e07, e08, e09, e10, e11, e12, e13, e14, e15, \
e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, \
e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, \
e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63, \
size, ...) size
/*
* Expands to the number of the variadic arguments passed to it. Supports up to
* 64 arguments.
*/
#define FUSE_PP_VARIADIC_COUNT(...) \
FUSE_PP_VARIADIC_COUNT_I(__VA_ARGS__, \
64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, \
48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, \
32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, \
16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1)
/*
* Overload function-like variadic macros
*/
#define FUSE_PP_OVERLOAD_COUNT_I(prefix, count) prefix ## count
#define FUSE_PP_OVERLOAD_COUNT(prefix, count) FUSE_PP_OVERLOAD_COUNT_I(prefix, count)
/*
* Expands to a the name of a function-like macro with the specified prefix
* that accepts the given number of arguments.
*/
#define FUSE_PP_OVERLOAD(prefix, ...) FUSE_PP_OVERLOAD_COUNT(prefix, FUSE_PP_VARIADIC_COUNT(__VA_ARGS__))
/*
* Concatenate expanded arguments
*/
#define FUSE_PP_CAT_I(e0, e1) e0 ## e1
#define FUSE_PP_CAT_1(e0) e0
#define FUSE_PP_CAT_2(e0, e1) FUSE_PP_CAT_I(e0, e1)
#define FUSE_PP_CAT_3(e0, ...) FUSE_PP_CAT_2(e0, FUSE_PP_CAT_2(__VA_ARGS__))
#define FUSE_PP_CAT_4(e0, ...) FUSE_PP_CAT_2(e0, FUSE_PP_CAT_3(__VA_ARGS__))
#define FUSE_PP_CAT_5(e0, ...) FUSE_PP_CAT_2(e0, FUSE_PP_CAT_4(__VA_ARGS__))
#define FUSE_PP_CAT_6(e0, ...) FUSE_PP_CAT_2(e0, FUSE_PP_CAT_5(__VA_ARGS__))
#define FUSE_PP_CAT_7(e0, ...) FUSE_PP_CAT_2(e0, FUSE_PP_CAT_6(__VA_ARGS__))
#define FUSE_PP_CAT_8(e0, ...) FUSE_PP_CAT_2(e0, FUSE_PP_CAT_7(__VA_ARGS__))
#define FUSE_PP_CAT_9(e0, ...) FUSE_PP_CAT_2(e0, FUSE_PP_CAT_8(__VA_ARGS__))
#define FUSE_PP_CAT_10(e0, ...) FUSE_PP_CAT_2(e0, FUSE_PP_CAT_9(__VA_ARGS__))
#define FUSE_PP_CAT_11(e0, ...) FUSE_PP_CAT_2(e0, FUSE_PP_CAT_10(__VA_ARGS__))
#define FUSE_PP_CAT_12(e0, ...) FUSE_PP_CAT_2(e0, FUSE_PP_CAT_11(__VA_ARGS__))
#define FUSE_PP_CAT_13(e0, ...) FUSE_PP_CAT_2(e0, FUSE_PP_CAT_12(__VA_ARGS__))
#define FUSE_PP_CAT_14(e0, ...) FUSE_PP_CAT_2(e0, FUSE_PP_CAT_13(__VA_ARGS__))
#define FUSE_PP_CAT_15(e0, ...) FUSE_PP_CAT_2(e0, FUSE_PP_CAT_14(__VA_ARGS__))
#define FUSE_PP_CAT_16(e0, ...) FUSE_PP_CAT_2(e0, FUSE_PP_CAT_15(__VA_ARGS__))
#define FUSE_PP_CAT_17(e0, ...) FUSE_PP_CAT_2(e0, FUSE_PP_CAT_16(__VA_ARGS__))
#define FUSE_PP_CAT_18(e0, ...) FUSE_PP_CAT_2(e0, FUSE_PP_CAT_17(__VA_ARGS__))
#define FUSE_PP_CAT_19(e0, ...) FUSE_PP_CAT_2(e0, FUSE_PP_CAT_18(__VA_ARGS__))
#define FUSE_PP_CAT_20(e0, ...) FUSE_PP_CAT_2(e0, FUSE_PP_CAT_19(__VA_ARGS__))
#define FUSE_PP_CAT_21(e0, ...) FUSE_PP_CAT_2(e0, FUSE_PP_CAT_20(__VA_ARGS__))
#define FUSE_PP_CAT_22(e0, ...) FUSE_PP_CAT_2(e0, FUSE_PP_CAT_21(__VA_ARGS__))
#define FUSE_PP_CAT_23(e0, ...) FUSE_PP_CAT_2(e0, FUSE_PP_CAT_22(__VA_ARGS__))
#define FUSE_PP_CAT_24(e0, ...) FUSE_PP_CAT_2(e0, FUSE_PP_CAT_23(__VA_ARGS__))
#define FUSE_PP_CAT_25(e0, ...) FUSE_PP_CAT_2(e0, FUSE_PP_CAT_24(__VA_ARGS__))
#define FUSE_PP_CAT_26(e0, ...) FUSE_PP_CAT_2(e0, FUSE_PP_CAT_25(__VA_ARGS__))
#define FUSE_PP_CAT_27(e0, ...) FUSE_PP_CAT_2(e0, FUSE_PP_CAT_26(__VA_ARGS__))
#define FUSE_PP_CAT_28(e0, ...) FUSE_PP_CAT_2(e0, FUSE_PP_CAT_27(__VA_ARGS__))
#define FUSE_PP_CAT_29(e0, ...) FUSE_PP_CAT_2(e0, FUSE_PP_CAT_28(__VA_ARGS__))
#define FUSE_PP_CAT_30(e0, ...) FUSE_PP_CAT_2(e0, FUSE_PP_CAT_29(__VA_ARGS__))
#define FUSE_PP_CAT_31(e0, ...) FUSE_PP_CAT_2(e0, FUSE_PP_CAT_30(__VA_ARGS__))
#define FUSE_PP_CAT_32(e0, ...) FUSE_PP_CAT_2(e0, FUSE_PP_CAT_31(__VA_ARGS__))
#define FUSE_PP_CAT_33(e0, ...) FUSE_PP_CAT_2(e0, FUSE_PP_CAT_32(__VA_ARGS__))
#define FUSE_PP_CAT_34(e0, ...) FUSE_PP_CAT_2(e0, FUSE_PP_CAT_33(__VA_ARGS__))
#define FUSE_PP_CAT_35(e0, ...) FUSE_PP_CAT_2(e0, FUSE_PP_CAT_34(__VA_ARGS__))
#define FUSE_PP_CAT_36(e0, ...) FUSE_PP_CAT_2(e0, FUSE_PP_CAT_35(__VA_ARGS__))
#define FUSE_PP_CAT_37(e0, ...) FUSE_PP_CAT_2(e0, FUSE_PP_CAT_36(__VA_ARGS__))
#define FUSE_PP_CAT_38(e0, ...) FUSE_PP_CAT_2(e0, FUSE_PP_CAT_37(__VA_ARGS__))
#define FUSE_PP_CAT_39(e0, ...) FUSE_PP_CAT_2(e0, FUSE_PP_CAT_38(__VA_ARGS__))
#define FUSE_PP_CAT_40(e0, ...) FUSE_PP_CAT_2(e0, FUSE_PP_CAT_39(__VA_ARGS__))
#define FUSE_PP_CAT_41(e0, ...) FUSE_PP_CAT_2(e0, FUSE_PP_CAT_40(__VA_ARGS__))
#define FUSE_PP_CAT_42(e0, ...) FUSE_PP_CAT_2(e0, FUSE_PP_CAT_41(__VA_ARGS__))
#define FUSE_PP_CAT_43(e0, ...) FUSE_PP_CAT_2(e0, FUSE_PP_CAT_42(__VA_ARGS__))
#define FUSE_PP_CAT_44(e0, ...) FUSE_PP_CAT_2(e0, FUSE_PP_CAT_43(__VA_ARGS__))
#define FUSE_PP_CAT_45(e0, ...) FUSE_PP_CAT_2(e0, FUSE_PP_CAT_44(__VA_ARGS__))
#define FUSE_PP_CAT_46(e0, ...) FUSE_PP_CAT_2(e0, FUSE_PP_CAT_45(__VA_ARGS__))
#define FUSE_PP_CAT_47(e0, ...) FUSE_PP_CAT_2(e0, FUSE_PP_CAT_46(__VA_ARGS__))
#define FUSE_PP_CAT_48(e0, ...) FUSE_PP_CAT_2(e0, FUSE_PP_CAT_47(__VA_ARGS__))
#define FUSE_PP_CAT_49(e0, ...) FUSE_PP_CAT_2(e0, FUSE_PP_CAT_48(__VA_ARGS__))
#define FUSE_PP_CAT_50(e0, ...) FUSE_PP_CAT_2(e0, FUSE_PP_CAT_49(__VA_ARGS__))
#define FUSE_PP_CAT_51(e0, ...) FUSE_PP_CAT_2(e0, FUSE_PP_CAT_50(__VA_ARGS__))
#define FUSE_PP_CAT_52(e0, ...) FUSE_PP_CAT_2(e0, FUSE_PP_CAT_51(__VA_ARGS__))
#define FUSE_PP_CAT_53(e0, ...) FUSE_PP_CAT_2(e0, FUSE_PP_CAT_52(__VA_ARGS__))
#define FUSE_PP_CAT_54(e0, ...) FUSE_PP_CAT_2(e0, FUSE_PP_CAT_53(__VA_ARGS__))
#define FUSE_PP_CAT_55(e0, ...) FUSE_PP_CAT_2(e0, FUSE_PP_CAT_54(__VA_ARGS__))
#define FUSE_PP_CAT_56(e0, ...) FUSE_PP_CAT_2(e0, FUSE_PP_CAT_55(__VA_ARGS__))
#define FUSE_PP_CAT_57(e0, ...) FUSE_PP_CAT_2(e0, FUSE_PP_CAT_56(__VA_ARGS__))
#define FUSE_PP_CAT_58(e0, ...) FUSE_PP_CAT_2(e0, FUSE_PP_CAT_57(__VA_ARGS__))
#define FUSE_PP_CAT_59(e0, ...) FUSE_PP_CAT_2(e0, FUSE_PP_CAT_58(__VA_ARGS__))
#define FUSE_PP_CAT_60(e0, ...) FUSE_PP_CAT_2(e0, FUSE_PP_CAT_59(__VA_ARGS__))
#define FUSE_PP_CAT_61(e0, ...) FUSE_PP_CAT_2(e0, FUSE_PP_CAT_60(__VA_ARGS__))
#define FUSE_PP_CAT_62(e0, ...) FUSE_PP_CAT_2(e0, FUSE_PP_CAT_61(__VA_ARGS__))
#define FUSE_PP_CAT_63(e0, ...) FUSE_PP_CAT_2(e0, FUSE_PP_CAT_62(__VA_ARGS__))
#define FUSE_PP_CAT_64(e0, ...) FUSE_PP_CAT_2(e0, FUSE_PP_CAT_63(__VA_ARGS__))
/*
* Expands to the concatenation of the given arguments. The arguments are
* expanded before performing the concatenation. Supports up to 64 arguments.
*/
#define FUSE_PP_CAT(...) FUSE_PP_OVERLOAD(FUSE_PP_CAT_, __VA_ARGS__)(__VA_ARGS__)
#endif /* _FUSE_PREPROCESSOR_H_ */

View File

@ -1,91 +1,45 @@
/*
* Copyright (c) 2006-2008 Amit Singh/Google Inc.
* Copyright (c) 2010 Tuxera Inc.
* Copyright (c) 2011-2014 Benjamin Fleischer
* Copyright (c) 2011-2015 Benjamin Fleischer
* All rights reserved.
*/
#ifndef _FUSE_VERSION_H_
#define _FUSE_VERSION_H_
#include <fuse_preprocessor.h>
/* Count macro arguments */
/* File system name */
#define _N_ARGS_REVERSE_SEQUENCE 8, 7, 6, 5, 4, 3, 2, 1, 0
#define _N_ARGS_N(_1, _2, _3, _4, _5, _6, _7, _8, N, ...) N
#define OSXFUSE_NAME_LITERAL osxfuse
#define OSXFUSE_DISPLAY_NAME_LITERAL OSXFUSE
#define _N_ARGS(...) _N_ARGS_N(__VA_ARGS__)
#define N_ARGS(...) _N_ARGS(__VA_ARGS__, _N_ARGS_REVERSE_SEQUENCE)
#define OSXFUSE_NAME FUSE_PP_STRINGIFY(OSXFUSE_NAME_LITERAL)
#define OSXFUSE_DISPLAY_NAME FUSE_PP_STRINGIFY(OSXFUSE_DISPLAY_NAME_LITERAL)
/* Identifier */
/* Macro indirection */
#define OSXFUSE_IDENTIFIER_LITERAL com.github.osxfuse
#define OSXFUSE_BUNDLE_IDENTIFIER_LITERAL OSXFUSE_IDENTIFIER_LITERAL.filesystems.OSXFUSE_NAME_LITERAL
/* Expands arguments before invoking macro */
#define CALL(macro, ...) macro(__VA_ARGS__)
#define OSXFUSE_IDENTIFIER FUSE_PP_STRINGIFY(OSXFUSE_IDENTIFIER_LITARAL)
#define OSXFUSE_BUNDLE_IDENTIFIER FUSE_PP_STRINGIFY(OSXFUSE_BUNDLE_IDENTIFIER_LITERAL)
/* Version */
/* Concatenate macros */
#define OSXFUSE_VERSION_LITERAL 2.9.8
#define OSXFUSE_TIMESTAMP __DATE__ ", " __TIME__
#define CONCAT_1(_1) \
_1
#define CONCAT_2(_1, _2) \
_1##_2
#define CONCAT_3(_1, _2, _3) \
_1##_2##_3
#define CONCAT_4(_1, _2, _3, _4) \
_1##_2##_3##_4
#define CONCAT_5(_1, _2, _3, _4, _5) \
_1##_2##_3##_4##_5
#define CONCAT_6(_1, _2, _3, _4, _5, _6) \
_1##_2##_3##_4##_5##_6
#define CONCAT_7(_1, _2, _3, _4, _5, _6, _7) \
_1##_2##_3##_4##_5##_6##_7
#define CONCAT_8(_1, _2, _3, _4, _5, _6, _7, _8) \
_1##_2##_3##_4##_5##_6##_7##_8
#define OSXFUSE_VERSION FUSE_PP_STRINGIFY(OSXFUSE_VERSION_LITERAL)
#define CONCAT_N(n) CONCAT_##n
/* File system type */
/* Concatenates up to eight arguments */
#define CONCAT(...) CALL(CALL(CONCAT_N, N_ARGS(__VA_ARGS__)), __VA_ARGS__)
#define OSXFUSE_TYPE_NAME_PREFIX OSXFUSE_NAME "_"
/* Volume name */
/* Stringify */
#define OSXFUSE_STRINGIFY(s) OSXFUSE_STRINGIFY_BACKEND(s)
#define OSXFUSE_STRINGIFY_BACKEND(s) #s
/* Add things here. */
#define OSXFUSE_NAME_LITERAL osxfuse
#define OSXFUSE_NAME OSXFUSE_STRINGIFY(OSXFUSE_NAME_LITERAL)
#define OSXFUSE_DISPLAY_NAME_LITERAL OSXFUSE
#define OSXFUSE_DISPLAY_NAME OSXFUSE_STRINGIFY(OSXFUSE_DISPLAY_NAME_LITERAL)
#define OSXFUSE_FS_TYPE_LITERAL OSXFUSE_NAME_LITERAL
#define OSXFUSE_FS_TYPE OSXFUSE_STRINGIFY(OSXFUSE_FS_TYPE_LITERAL)
#define OSXFUSE_FSTYPENAME_PREFIX OSXFUSE_FS_TYPE "_"
#define OSXFUSE_VOLNAME_FORMAT OSXFUSE_DISPLAY_NAME " Volume %d"
#define OSXFUSE_VOLNAME_FORMAT_DAEMON OSXFUSE_VOLNAME_FORMAT " (%s)"
#define OSXFUSE_IDENTIFIER_LITERAL com.github.osxfuse
#define OSXFUSE_IDENTIFIER OSXFUSE_STRINGIFY(OSXFUSE_IDENTIFIER_LITERAL)
#define OSXFUSE_BUNDLE_IDENTIFIER_LITERAL \
OSXFUSE_IDENTIFIER_LITERAL.filesystems.OSXFUSE_NAME_LITERAL
#define OSXFUSE_BUNDLE_IDENTIFIER \
OSXFUSE_STRINGIFY(OSXFUSE_BUNDLE_IDENTIFIER_LITERAL)
#define OSXFUSE_TIMESTAMP __DATE__ ", " __TIME__
#define OSXFUSE_VERSION_LITERAL 2.9.8
#define OSXFUSE_VERSION OSXFUSE_STRINGIFY(OSXFUSE_VERSION_LITERAL)
#define FUSE_KPI_GEQ(M, m) \
(FUSE_KERNEL_VERSION > (M) || \
(FUSE_KERNEL_VERSION == (M) && FUSE_KERNEL_MINOR_VERSION >= (m)))
#define OSXFUSE_VOLNAME_FORMAT OSXFUSE_DISPLAY_NAME " Volume %d"
#define OSXFUSE_VOLNAME_DAEMON_FORMAT OSXFUSE_DISPLAY_NAME " Volume %d (%s)"
#endif /* _FUSE_VERSION_H_ */

2
fuse

@ -1 +1 @@
Subproject commit 4b73ca3ff7f941ede44ab861c29117558136371e
Subproject commit 992181fbbbd2094aee79384437861cd57cd27ca1

2
kext

@ -1 +1 @@
Subproject commit 819dc3ee083f0f2251587f078ef04144e4344f7e
Subproject commit 24e4bdaac49a7d209672cdcf0af4612fc373d7d6

@ -1 +1 @@
Subproject commit 625f07133540a5272bc77878e886d7715c6f8772
Subproject commit f8b9b68c95b4aefd8fe25995f9bd38c0349e4ad0

@ -1 +1 @@
Subproject commit ff039fe0f481c39effa25443137a636b1bc7e831
Subproject commit 5d25d12049713aeb34b4f84936ea19e03a8f3ae1