move to new build system
This commit is contained in:
271
support/3rd_party/winfsp-2.0/inc/fuse/fuse.h
vendored
Normal file
271
support/3rd_party/winfsp-2.0/inc/fuse/fuse.h
vendored
Normal file
@ -0,0 +1,271 @@
|
||||
/**
|
||||
* @file fuse/fuse.h
|
||||
* WinFsp FUSE compatible API.
|
||||
*
|
||||
* This file is derived from libfuse/include/fuse.h:
|
||||
* FUSE: Filesystem in Userspace
|
||||
* Copyright (C) 2001-2007 Miklos Szeredi <miklos@szeredi.hu>
|
||||
*
|
||||
* @copyright 2015-2022 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_H_
|
||||
#define FUSE_H_
|
||||
|
||||
#include "fuse_common.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
struct fuse;
|
||||
|
||||
typedef int (*fuse_fill_dir_t)(void *buf, const char *name,
|
||||
const struct fuse_stat *stbuf, fuse_off_t off);
|
||||
typedef struct fuse_dirhandle *fuse_dirh_t;
|
||||
typedef int (*fuse_dirfil_t)(fuse_dirh_t h, const char *name,
|
||||
int type, fuse_ino_t ino);
|
||||
|
||||
struct fuse_operations
|
||||
{
|
||||
/* S - supported by WinFsp */
|
||||
/* S */ int (*getattr)(const char *path, struct fuse_stat *stbuf);
|
||||
/* S */ int (*getdir)(const char *path, fuse_dirh_t h, fuse_dirfil_t filler);
|
||||
/* S */ int (*readlink)(const char *path, char *buf, size_t size);
|
||||
/* S */ int (*mknod)(const char *path, fuse_mode_t mode, fuse_dev_t dev);
|
||||
/* S */ int (*mkdir)(const char *path, fuse_mode_t mode);
|
||||
/* S */ int (*unlink)(const char *path);
|
||||
/* S */ int (*rmdir)(const char *path);
|
||||
/* S */ int (*symlink)(const char *dstpath, const char *srcpath);
|
||||
/* S */ int (*rename)(const char *oldpath, const char *newpath);
|
||||
/* _ */ int (*link)(const char *srcpath, const char *dstpath);
|
||||
/* S */ int (*chmod)(const char *path, fuse_mode_t mode);
|
||||
/* S */ int (*chown)(const char *path, fuse_uid_t uid, fuse_gid_t gid);
|
||||
/* S */ int (*truncate)(const char *path, fuse_off_t size);
|
||||
/* S */ int (*utime)(const char *path, struct fuse_utimbuf *timbuf);
|
||||
/* S */ int (*open)(const char *path, struct fuse_file_info *fi);
|
||||
/* S */ int (*read)(const char *path, char *buf, size_t size, fuse_off_t off,
|
||||
struct fuse_file_info *fi);
|
||||
/* S */ int (*write)(const char *path, const char *buf, size_t size, fuse_off_t off,
|
||||
struct fuse_file_info *fi);
|
||||
/* S */ int (*statfs)(const char *path, struct fuse_statvfs *stbuf);
|
||||
/* S */ int (*flush)(const char *path, struct fuse_file_info *fi);
|
||||
/* S */ int (*release)(const char *path, struct fuse_file_info *fi);
|
||||
/* S */ int (*fsync)(const char *path, int datasync, struct fuse_file_info *fi);
|
||||
/* S */ int (*setxattr)(const char *path, const char *name, const char *value, size_t size,
|
||||
int flags);
|
||||
/* S */ int (*getxattr)(const char *path, const char *name, char *value, size_t size);
|
||||
/* S */ int (*listxattr)(const char *path, char *namebuf, size_t size);
|
||||
/* S */ int (*removexattr)(const char *path, const char *name);
|
||||
/* S */ int (*opendir)(const char *path, struct fuse_file_info *fi);
|
||||
/* S */ int (*readdir)(const char *path, void *buf, fuse_fill_dir_t filler, fuse_off_t off,
|
||||
struct fuse_file_info *fi);
|
||||
/* S */ int (*releasedir)(const char *path, struct fuse_file_info *fi);
|
||||
/* S */ int (*fsyncdir)(const char *path, int datasync, struct fuse_file_info *fi);
|
||||
/* S */ void *(*init)(struct fuse_conn_info *conn);
|
||||
/* S */ void (*destroy)(void *data);
|
||||
/* S */ int (*access)(const char *path, int mask);
|
||||
/* S */ int (*create)(const char *path, fuse_mode_t mode, struct fuse_file_info *fi);
|
||||
/* S */ int (*ftruncate)(const char *path, fuse_off_t off, struct fuse_file_info *fi);
|
||||
/* S */ int (*fgetattr)(const char *path, struct fuse_stat *stbuf, struct fuse_file_info *fi);
|
||||
/* _ */ int (*lock)(const char *path,
|
||||
struct fuse_file_info *fi, int cmd, struct fuse_flock *lock);
|
||||
/* S */ int (*utimens)(const char *path, const struct fuse_timespec tv[2]);
|
||||
/* _ */ int (*bmap)(const char *path, size_t blocksize, uint64_t *idx);
|
||||
/* _ */ unsigned int flag_nullpath_ok:1;
|
||||
/* _ */ unsigned int flag_nopath:1;
|
||||
/* _ */ unsigned int flag_utime_omit_ok:1;
|
||||
/* _ */ unsigned int flag_reserved:29;
|
||||
/* S */ int (*ioctl)(const char *path, int cmd, void *arg, struct fuse_file_info *fi,
|
||||
unsigned int flags, void *data);
|
||||
/* _ */ int (*poll)(const char *path, struct fuse_file_info *fi,
|
||||
struct fuse_pollhandle *ph, unsigned *reventsp);
|
||||
/* FUSE 2.9 */
|
||||
/* _ */ int (*write_buf)(const char *path,
|
||||
struct fuse_bufvec *buf, fuse_off_t off, struct fuse_file_info *fi);
|
||||
/* _ */ int (*read_buf)(const char *path,
|
||||
struct fuse_bufvec **bufp, size_t size, fuse_off_t off, struct fuse_file_info *fi);
|
||||
/* _ */ int (*flock)(const char *path, struct fuse_file_info *, int op);
|
||||
/* _ */ int (*fallocate)(const char *path, int mode, fuse_off_t off, fuse_off_t len,
|
||||
struct fuse_file_info *fi);
|
||||
/* WinFsp */
|
||||
/* S */ int (*getpath)(const char *path, char *buf, size_t size,
|
||||
struct fuse_file_info *fi);
|
||||
/* OSXFUSE */
|
||||
/* _ */ int (*reserved01)();
|
||||
/* _ */ int (*reserved02)();
|
||||
/* _ */ int (*statfs_x)(const char *path, struct fuse_statfs *stbuf);
|
||||
/* _ */ int (*setvolname)(const char *volname);
|
||||
/* _ */ int (*exchange)(const char *oldpath, const char *newpath, unsigned long flags);
|
||||
/* _ */ int (*getxtimes)(const char *path,
|
||||
struct fuse_timespec *bkuptime, struct fuse_timespec *crtime);
|
||||
/* _ */ int (*setbkuptime)(const char *path, const struct fuse_timespec *tv);
|
||||
/* S */ int (*setchgtime)(const char *path, const struct fuse_timespec *tv);
|
||||
/* S */ int (*setcrtime)(const char *path, const struct fuse_timespec *tv);
|
||||
/* S */ int (*chflags)(const char *path, uint32_t flags);
|
||||
/* _ */ int (*setattr_x)(const char *path, struct fuse_setattr_x *attr);
|
||||
/* _ */ int (*fsetattr_x)(const char *path, struct fuse_setattr_x *attr,
|
||||
struct fuse_file_info *fi);
|
||||
};
|
||||
|
||||
struct fuse_context
|
||||
{
|
||||
struct fuse *fuse;
|
||||
fuse_uid_t uid;
|
||||
fuse_gid_t gid;
|
||||
fuse_pid_t pid;
|
||||
void *private_data;
|
||||
fuse_mode_t umask;
|
||||
};
|
||||
|
||||
#define fuse_main(argc, argv, ops, data)\
|
||||
fuse_main_real(argc, argv, ops, sizeof *(ops), data)
|
||||
|
||||
FSP_FUSE_API int FSP_FUSE_API_NAME(fsp_fuse_main_real)(struct fsp_fuse_env *env,
|
||||
int argc, char *argv[],
|
||||
const struct fuse_operations *ops, size_t opsize, void *data);
|
||||
FSP_FUSE_API int FSP_FUSE_API_NAME(fsp_fuse_is_lib_option)(struct fsp_fuse_env *env,
|
||||
const char *opt);
|
||||
FSP_FUSE_API struct fuse *FSP_FUSE_API_NAME(fsp_fuse_new)(struct fsp_fuse_env *env,
|
||||
struct fuse_chan *ch, struct fuse_args *args,
|
||||
const struct fuse_operations *ops, size_t opsize, void *data);
|
||||
FSP_FUSE_API void FSP_FUSE_API_NAME(fsp_fuse_destroy)(struct fsp_fuse_env *env,
|
||||
struct fuse *f);
|
||||
FSP_FUSE_API int FSP_FUSE_API_NAME(fsp_fuse_loop)(struct fsp_fuse_env *env,
|
||||
struct fuse *f);
|
||||
FSP_FUSE_API int FSP_FUSE_API_NAME(fsp_fuse_loop_mt)(struct fsp_fuse_env *env,
|
||||
struct fuse *f);
|
||||
FSP_FUSE_API void FSP_FUSE_API_NAME(fsp_fuse_exit)(struct fsp_fuse_env *env,
|
||||
struct fuse *f);
|
||||
FSP_FUSE_API int FSP_FUSE_API_NAME(fsp_fuse_exited)(struct fsp_fuse_env *env,
|
||||
struct fuse *f);
|
||||
FSP_FUSE_API int FSP_FUSE_API_NAME(fsp_fuse_notify)(struct fsp_fuse_env *env,
|
||||
struct fuse *f, const char *path, uint32_t action);
|
||||
FSP_FUSE_API struct fuse_context *FSP_FUSE_API_NAME(fsp_fuse_get_context)(struct fsp_fuse_env *env);
|
||||
|
||||
FSP_FUSE_SYM(
|
||||
int fuse_main_real(int argc, char *argv[],
|
||||
const struct fuse_operations *ops, size_t opsize, void *data),
|
||||
{
|
||||
return FSP_FUSE_API_CALL(fsp_fuse_main_real)
|
||||
(fsp_fuse_env(), argc, argv, ops, opsize, data);
|
||||
})
|
||||
|
||||
FSP_FUSE_SYM(
|
||||
int fuse_is_lib_option(const char *opt),
|
||||
{
|
||||
return FSP_FUSE_API_CALL(fsp_fuse_is_lib_option)
|
||||
(fsp_fuse_env(), opt);
|
||||
})
|
||||
|
||||
FSP_FUSE_SYM(
|
||||
struct fuse *fuse_new(struct fuse_chan *ch, struct fuse_args *args,
|
||||
const struct fuse_operations *ops, size_t opsize, void *data),
|
||||
{
|
||||
return FSP_FUSE_API_CALL(fsp_fuse_new)
|
||||
(fsp_fuse_env(), ch, args, ops, opsize, data);
|
||||
})
|
||||
|
||||
FSP_FUSE_SYM(
|
||||
void fuse_destroy(struct fuse *f),
|
||||
{
|
||||
FSP_FUSE_API_CALL(fsp_fuse_destroy)
|
||||
(fsp_fuse_env(), f);
|
||||
})
|
||||
|
||||
FSP_FUSE_SYM(
|
||||
int fuse_loop(struct fuse *f),
|
||||
{
|
||||
return FSP_FUSE_API_CALL(fsp_fuse_loop)
|
||||
(fsp_fuse_env(), f);
|
||||
})
|
||||
|
||||
FSP_FUSE_SYM(
|
||||
int fuse_loop_mt(struct fuse *f),
|
||||
{
|
||||
return FSP_FUSE_API_CALL(fsp_fuse_loop_mt)
|
||||
(fsp_fuse_env(), f);
|
||||
})
|
||||
|
||||
FSP_FUSE_SYM(
|
||||
void fuse_exit(struct fuse *f),
|
||||
{
|
||||
FSP_FUSE_API_CALL(fsp_fuse_exit)
|
||||
(fsp_fuse_env(), f);
|
||||
})
|
||||
|
||||
FSP_FUSE_SYM(
|
||||
int fuse_exited(struct fuse *f),
|
||||
{
|
||||
return FSP_FUSE_API_CALL(fsp_fuse_exited)
|
||||
(fsp_fuse_env(), f);
|
||||
})
|
||||
|
||||
FSP_FUSE_SYM(
|
||||
int fuse_notify(struct fuse *f, const char *path, uint32_t action),
|
||||
{
|
||||
return FSP_FUSE_API_CALL(fsp_fuse_notify)
|
||||
(fsp_fuse_env(), f, path, action);
|
||||
})
|
||||
|
||||
FSP_FUSE_SYM(
|
||||
struct fuse_context *fuse_get_context(void),
|
||||
{
|
||||
return FSP_FUSE_API_CALL(fsp_fuse_get_context)
|
||||
(fsp_fuse_env());
|
||||
})
|
||||
|
||||
FSP_FUSE_SYM(
|
||||
int fuse_getgroups(int size, fuse_gid_t list[]),
|
||||
{
|
||||
(void)size;
|
||||
(void)list;
|
||||
return -ENOSYS;
|
||||
})
|
||||
|
||||
FSP_FUSE_SYM(
|
||||
int fuse_interrupted(void),
|
||||
{
|
||||
return 0;
|
||||
})
|
||||
|
||||
FSP_FUSE_SYM(
|
||||
int fuse_invalidate(struct fuse *f, const char *path),
|
||||
{
|
||||
return FSP_FUSE_API_CALL(fsp_fuse_notify)
|
||||
(fsp_fuse_env(), f, path, 0);
|
||||
})
|
||||
|
||||
FSP_FUSE_SYM(
|
||||
int fuse_notify_poll(struct fuse_pollhandle *ph),
|
||||
{
|
||||
(void)ph;
|
||||
return 0;
|
||||
})
|
||||
|
||||
FSP_FUSE_SYM(
|
||||
struct fuse_session *fuse_get_session(struct fuse *f),
|
||||
{
|
||||
return (struct fuse_session *)f;
|
||||
})
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
202
support/3rd_party/winfsp-2.0/inc/fuse/fuse_common.h
vendored
Normal file
202
support/3rd_party/winfsp-2.0/inc/fuse/fuse_common.h
vendored
Normal file
@ -0,0 +1,202 @@
|
||||
/**
|
||||
* @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-2022 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
|
133
support/3rd_party/winfsp-2.0/inc/fuse/fuse_opt.h
vendored
Normal file
133
support/3rd_party/winfsp-2.0/inc/fuse/fuse_opt.h
vendored
Normal file
@ -0,0 +1,133 @@
|
||||
/**
|
||||
* @file fuse/fuse_opt.h
|
||||
* WinFsp FUSE compatible API.
|
||||
*
|
||||
* This file is derived from libfuse/include/fuse_opt.h:
|
||||
* FUSE: Filesystem in Userspace
|
||||
* Copyright (C) 2001-2007 Miklos Szeredi <miklos@szeredi.hu>
|
||||
*
|
||||
* @copyright 2015-2022 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_OPT_H_
|
||||
#define FUSE_OPT_H_
|
||||
|
||||
#include "winfsp_fuse.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define FUSE_OPT_KEY(templ, key) { templ, -1, key }
|
||||
#define FUSE_OPT_END { NULL, 0, 0 }
|
||||
|
||||
#define FUSE_OPT_KEY_OPT -1
|
||||
#define FUSE_OPT_KEY_NONOPT -2
|
||||
#define FUSE_OPT_KEY_KEEP -3
|
||||
#define FUSE_OPT_KEY_DISCARD -4
|
||||
|
||||
#define FUSE_ARGS_INIT(argc, argv) { argc, argv, 0 }
|
||||
|
||||
struct fuse_opt
|
||||
{
|
||||
const char *templ;
|
||||
unsigned int offset;
|
||||
int value;
|
||||
};
|
||||
|
||||
struct fuse_args
|
||||
{
|
||||
int argc;
|
||||
char **argv;
|
||||
int allocated;
|
||||
};
|
||||
|
||||
typedef int (*fuse_opt_proc_t)(void *data, const char *arg, int key,
|
||||
struct fuse_args *outargs);
|
||||
|
||||
FSP_FUSE_API int FSP_FUSE_API_NAME(fsp_fuse_opt_parse)(struct fsp_fuse_env *env,
|
||||
struct fuse_args *args, void *data,
|
||||
const struct fuse_opt opts[], fuse_opt_proc_t proc);
|
||||
FSP_FUSE_API int FSP_FUSE_API_NAME(fsp_fuse_opt_add_arg)(struct fsp_fuse_env *env,
|
||||
struct fuse_args *args, const char *arg);
|
||||
FSP_FUSE_API int FSP_FUSE_API_NAME(fsp_fuse_opt_insert_arg)(struct fsp_fuse_env *env,
|
||||
struct fuse_args *args, int pos, const char *arg);
|
||||
FSP_FUSE_API void FSP_FUSE_API_NAME(fsp_fuse_opt_free_args)(struct fsp_fuse_env *env,
|
||||
struct fuse_args *args);
|
||||
FSP_FUSE_API int FSP_FUSE_API_NAME(fsp_fuse_opt_add_opt)(struct fsp_fuse_env *env,
|
||||
char **opts, const char *opt);
|
||||
FSP_FUSE_API int FSP_FUSE_API_NAME(fsp_fuse_opt_add_opt_escaped)(struct fsp_fuse_env *env,
|
||||
char **opts, const char *opt);
|
||||
FSP_FUSE_API int FSP_FUSE_API_NAME(fsp_fuse_opt_match)(struct fsp_fuse_env *env,
|
||||
const struct fuse_opt opts[], const char *opt);
|
||||
|
||||
FSP_FUSE_SYM(
|
||||
int fuse_opt_parse(struct fuse_args *args, void *data,
|
||||
const struct fuse_opt opts[], fuse_opt_proc_t proc),
|
||||
{
|
||||
return FSP_FUSE_API_CALL(fsp_fuse_opt_parse)
|
||||
(fsp_fuse_env(), args, data, opts, proc);
|
||||
})
|
||||
|
||||
FSP_FUSE_SYM(
|
||||
int fuse_opt_add_arg(struct fuse_args *args, const char *arg),
|
||||
{
|
||||
return FSP_FUSE_API_CALL(fsp_fuse_opt_add_arg)
|
||||
(fsp_fuse_env(), args, arg);
|
||||
})
|
||||
|
||||
FSP_FUSE_SYM(
|
||||
int fuse_opt_insert_arg(struct fuse_args *args, int pos, const char *arg),
|
||||
{
|
||||
return FSP_FUSE_API_CALL(fsp_fuse_opt_insert_arg)
|
||||
(fsp_fuse_env(), args, pos, arg);
|
||||
})
|
||||
|
||||
FSP_FUSE_SYM(
|
||||
void fuse_opt_free_args(struct fuse_args *args),
|
||||
{
|
||||
FSP_FUSE_API_CALL(fsp_fuse_opt_free_args)
|
||||
(fsp_fuse_env(), args);
|
||||
})
|
||||
|
||||
FSP_FUSE_SYM(
|
||||
int fuse_opt_add_opt(char **opts, const char *opt),
|
||||
{
|
||||
return FSP_FUSE_API_CALL(fsp_fuse_opt_add_opt)
|
||||
(fsp_fuse_env(), opts, opt);
|
||||
})
|
||||
|
||||
FSP_FUSE_SYM(
|
||||
int fuse_opt_add_opt_escaped(char **opts, const char *opt),
|
||||
{
|
||||
return FSP_FUSE_API_CALL(fsp_fuse_opt_add_opt_escaped)
|
||||
(fsp_fuse_env(), opts, opt);
|
||||
})
|
||||
|
||||
FSP_FUSE_SYM(
|
||||
int fuse_opt_match(const struct fuse_opt opts[], const char *opt),
|
||||
{
|
||||
return FSP_FUSE_API_CALL(fsp_fuse_opt_match)
|
||||
(fsp_fuse_env(), opts, opt);
|
||||
})
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
434
support/3rd_party/winfsp-2.0/inc/fuse/winfsp_fuse.h
vendored
Normal file
434
support/3rd_party/winfsp-2.0/inc/fuse/winfsp_fuse.h
vendored
Normal file
@ -0,0 +1,434 @@
|
||||
/**
|
||||
* @file fuse/winfsp_fuse.h
|
||||
* WinFsp FUSE compatible API.
|
||||
*
|
||||
* @copyright 2015-2022 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_WINFSP_FUSE_H_INCLUDED
|
||||
#define FUSE_WINFSP_FUSE_H_INCLUDED
|
||||
|
||||
#include <errno.h>
|
||||
#include <stdint.h>
|
||||
#if !defined(WINFSP_DLL_INTERNAL)
|
||||
#include <stdlib.h>
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#if !defined(FSP_FUSE_API)
|
||||
#if defined(WINFSP_DLL_INTERNAL)
|
||||
#define FSP_FUSE_API __declspec(dllexport)
|
||||
#else
|
||||
#define FSP_FUSE_API __declspec(dllimport)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if !defined(FSP_FUSE_API_NAME)
|
||||
#define FSP_FUSE_API_NAME(n) (n)
|
||||
#endif
|
||||
|
||||
#if !defined(FSP_FUSE_API_CALL)
|
||||
#define FSP_FUSE_API_CALL(n) (n)
|
||||
#endif
|
||||
|
||||
#if !defined(FSP_FUSE_SYM)
|
||||
#if !defined(CYGFUSE)
|
||||
#define FSP_FUSE_SYM(proto, ...) static inline proto { __VA_ARGS__ }
|
||||
#else
|
||||
#define FSP_FUSE_SYM(proto, ...) proto;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#define FSP_FUSE_DEVICE_TYPE (0x8000 | 'W' | 'F' * 0x100) /* DeviceIoControl -> ioctl */
|
||||
#define FSP_FUSE_CTLCODE_FROM_IOCTL(cmd)\
|
||||
(FSP_FUSE_DEVICE_TYPE << 16) | (((cmd) & 0x0fff) << 2)
|
||||
#define FSP_FUSE_IOCTL(cmd, isiz, osiz) \
|
||||
( \
|
||||
(((osiz) != 0) << 31) | \
|
||||
(((isiz) != 0) << 30) | \
|
||||
(((isiz) | (osiz)) << 16) | \
|
||||
(cmd) \
|
||||
)
|
||||
|
||||
/*
|
||||
* FUSE uses a number of types (notably: struct stat) that are OS specific.
|
||||
* Furthermore there are sometimes multiple definitions of the same type even
|
||||
* within the same OS. This is certainly true on Windows, where these types
|
||||
* are not even native.
|
||||
*
|
||||
* For this reason we will define our own fuse_* types which represent the
|
||||
* types as the WinFsp DLL expects to see them. We will define these types
|
||||
* to be compatible with the equivalent Cygwin types as we want WinFsp-FUSE
|
||||
* to be usable from Cygwin.
|
||||
*/
|
||||
|
||||
#define FSP_FUSE_STAT_FIELD_DEFN \
|
||||
fuse_dev_t st_dev; \
|
||||
fuse_ino_t st_ino; \
|
||||
fuse_mode_t st_mode; \
|
||||
fuse_nlink_t st_nlink; \
|
||||
fuse_uid_t st_uid; \
|
||||
fuse_gid_t st_gid; \
|
||||
fuse_dev_t st_rdev; \
|
||||
fuse_off_t st_size; \
|
||||
struct fuse_timespec st_atim; \
|
||||
struct fuse_timespec st_mtim; \
|
||||
struct fuse_timespec st_ctim; \
|
||||
fuse_blksize_t st_blksize; \
|
||||
fuse_blkcnt_t st_blocks; \
|
||||
struct fuse_timespec st_birthtim;
|
||||
#define FSP_FUSE_STAT_EX_FIELD_DEFN \
|
||||
FSP_FUSE_STAT_FIELD_DEFN \
|
||||
uint32_t st_flags; \
|
||||
uint32_t st_reserved32[3]; \
|
||||
uint64_t st_reserved64[2];
|
||||
|
||||
#if defined(_WIN64) || defined(_WIN32)
|
||||
|
||||
typedef uint32_t fuse_uid_t;
|
||||
typedef uint32_t fuse_gid_t;
|
||||
typedef int32_t fuse_pid_t;
|
||||
|
||||
typedef uint32_t fuse_dev_t;
|
||||
typedef uint64_t fuse_ino_t;
|
||||
typedef uint32_t fuse_mode_t;
|
||||
typedef uint16_t fuse_nlink_t;
|
||||
typedef int64_t fuse_off_t;
|
||||
|
||||
#if defined(_WIN64)
|
||||
typedef uint64_t fuse_fsblkcnt_t;
|
||||
typedef uint64_t fuse_fsfilcnt_t;
|
||||
#else
|
||||
typedef uint32_t fuse_fsblkcnt_t;
|
||||
typedef uint32_t fuse_fsfilcnt_t;
|
||||
#endif
|
||||
typedef int32_t fuse_blksize_t;
|
||||
typedef int64_t fuse_blkcnt_t;
|
||||
|
||||
#if defined(_WIN64)
|
||||
struct fuse_utimbuf
|
||||
{
|
||||
int64_t actime;
|
||||
int64_t modtime;
|
||||
};
|
||||
struct fuse_timespec
|
||||
{
|
||||
int64_t tv_sec;
|
||||
int64_t tv_nsec;
|
||||
};
|
||||
#else
|
||||
struct fuse_utimbuf
|
||||
{
|
||||
int32_t actime;
|
||||
int32_t modtime;
|
||||
};
|
||||
struct fuse_timespec
|
||||
{
|
||||
int32_t tv_sec;
|
||||
int32_t tv_nsec;
|
||||
};
|
||||
#endif
|
||||
|
||||
#if !defined(FSP_FUSE_USE_STAT_EX)
|
||||
struct fuse_stat
|
||||
{
|
||||
FSP_FUSE_STAT_FIELD_DEFN
|
||||
};
|
||||
#else
|
||||
struct fuse_stat
|
||||
{
|
||||
FSP_FUSE_STAT_EX_FIELD_DEFN
|
||||
};
|
||||
#endif
|
||||
|
||||
#if defined(_WIN64)
|
||||
struct fuse_statvfs
|
||||
{
|
||||
uint64_t f_bsize;
|
||||
uint64_t f_frsize;
|
||||
fuse_fsblkcnt_t f_blocks;
|
||||
fuse_fsblkcnt_t f_bfree;
|
||||
fuse_fsblkcnt_t f_bavail;
|
||||
fuse_fsfilcnt_t f_files;
|
||||
fuse_fsfilcnt_t f_ffree;
|
||||
fuse_fsfilcnt_t f_favail;
|
||||
uint64_t f_fsid;
|
||||
uint64_t f_flag;
|
||||
uint64_t f_namemax;
|
||||
};
|
||||
#else
|
||||
struct fuse_statvfs
|
||||
{
|
||||
uint32_t f_bsize;
|
||||
uint32_t f_frsize;
|
||||
fuse_fsblkcnt_t f_blocks;
|
||||
fuse_fsblkcnt_t f_bfree;
|
||||
fuse_fsblkcnt_t f_bavail;
|
||||
fuse_fsfilcnt_t f_files;
|
||||
fuse_fsfilcnt_t f_ffree;
|
||||
fuse_fsfilcnt_t f_favail;
|
||||
uint32_t f_fsid;
|
||||
uint32_t f_flag;
|
||||
uint32_t f_namemax;
|
||||
};
|
||||
#endif
|
||||
|
||||
struct fuse_flock
|
||||
{
|
||||
int16_t l_type;
|
||||
int16_t l_whence;
|
||||
fuse_off_t l_start;
|
||||
fuse_off_t l_len;
|
||||
fuse_pid_t l_pid;
|
||||
};
|
||||
|
||||
#if defined(WINFSP_DLL_INTERNAL)
|
||||
#define FSP_FUSE_ENV_INIT \
|
||||
{ \
|
||||
'W', \
|
||||
MemAlloc, MemFree, \
|
||||
fsp_fuse_daemonize, \
|
||||
fsp_fuse_set_signal_handlers, \
|
||||
0/*conv_to_win_path*/, \
|
||||
0/*winpid_to_pid*/, \
|
||||
{ 0 }, \
|
||||
}
|
||||
#else
|
||||
#define FSP_FUSE_ENV_INIT \
|
||||
{ \
|
||||
'W', \
|
||||
malloc, free, \
|
||||
fsp_fuse_daemonize, \
|
||||
fsp_fuse_set_signal_handlers, \
|
||||
0/*conv_to_win_path*/, \
|
||||
0/*winpid_to_pid*/, \
|
||||
{ 0 }, \
|
||||
}
|
||||
#endif
|
||||
|
||||
#elif defined(__CYGWIN__)
|
||||
|
||||
#include <fcntl.h>
|
||||
#include <pthread.h>
|
||||
#include <signal.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/statvfs.h>
|
||||
#include <sys/types.h>
|
||||
#include <utime.h>
|
||||
|
||||
#define fuse_uid_t uid_t
|
||||
#define fuse_gid_t gid_t
|
||||
#define fuse_pid_t pid_t
|
||||
|
||||
#define fuse_dev_t dev_t
|
||||
#define fuse_ino_t ino_t
|
||||
#define fuse_mode_t mode_t
|
||||
#define fuse_nlink_t nlink_t
|
||||
#define fuse_off_t off_t
|
||||
|
||||
#define fuse_fsblkcnt_t fsblkcnt_t
|
||||
#define fuse_fsfilcnt_t fsfilcnt_t
|
||||
#define fuse_blksize_t blksize_t
|
||||
#define fuse_blkcnt_t blkcnt_t
|
||||
|
||||
#define fuse_utimbuf utimbuf
|
||||
#define fuse_timespec timespec
|
||||
|
||||
#if !defined(FSP_FUSE_USE_STAT_EX)
|
||||
#define fuse_stat stat
|
||||
#else
|
||||
struct fuse_stat
|
||||
{
|
||||
FSP_FUSE_STAT_EX_FIELD_DEFN
|
||||
};
|
||||
#endif
|
||||
#define fuse_statvfs statvfs
|
||||
#define fuse_flock flock
|
||||
|
||||
#define FSP_FUSE_ENV_INIT \
|
||||
{ \
|
||||
'C', \
|
||||
malloc, free, \
|
||||
fsp_fuse_daemonize, \
|
||||
fsp_fuse_set_signal_handlers, \
|
||||
fsp_fuse_conv_to_win_path, \
|
||||
fsp_fuse_winpid_to_pid, \
|
||||
{ 0 }, \
|
||||
}
|
||||
|
||||
/*
|
||||
* Note that long is 8 bytes long in Cygwin64 and 4 bytes long in Win64.
|
||||
* For this reason we avoid using long anywhere in these headers.
|
||||
*/
|
||||
|
||||
#else
|
||||
#error unsupported environment
|
||||
#endif
|
||||
|
||||
struct fuse_stat_ex
|
||||
{
|
||||
FSP_FUSE_STAT_EX_FIELD_DEFN
|
||||
};
|
||||
|
||||
struct fsp_fuse_env
|
||||
{
|
||||
unsigned environment;
|
||||
void *(*memalloc)(size_t);
|
||||
void (*memfree)(void *);
|
||||
int (*daemonize)(int);
|
||||
int (*set_signal_handlers)(void *);
|
||||
char *(*conv_to_win_path)(const char *);
|
||||
fuse_pid_t (*winpid_to_pid)(uint32_t);
|
||||
void (*reserved[2])();
|
||||
};
|
||||
|
||||
FSP_FUSE_API void FSP_FUSE_API_NAME(fsp_fuse_signal_handler)(int sig);
|
||||
|
||||
#if defined(_WIN64) || defined(_WIN32)
|
||||
|
||||
static inline int fsp_fuse_daemonize(int foreground)
|
||||
{
|
||||
(void)foreground;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int fsp_fuse_set_signal_handlers(void *se)
|
||||
{
|
||||
(void)se;
|
||||
return 0;
|
||||
}
|
||||
|
||||
#elif defined(__CYGWIN__)
|
||||
|
||||
static inline int fsp_fuse_daemonize(int foreground)
|
||||
{
|
||||
int daemon(int nochdir, int noclose);
|
||||
int chdir(const char *path);
|
||||
|
||||
if (!foreground)
|
||||
{
|
||||
if (-1 == daemon(0, 0))
|
||||
return -1;
|
||||
}
|
||||
else
|
||||
chdir("/");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void *fsp_fuse_signal_thread(void *psigmask)
|
||||
{
|
||||
int sig;
|
||||
|
||||
if (0 == sigwait((sigset_t *)psigmask, &sig))
|
||||
FSP_FUSE_API_CALL(fsp_fuse_signal_handler)(sig);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int fsp_fuse_set_signal_handlers(void *se)
|
||||
{
|
||||
#define FSP_FUSE_SET_SIGNAL_HANDLER(sig, newha)\
|
||||
if (-1 != sigaction((sig), 0, &oldsa) &&\
|
||||
oldsa.sa_handler == (se ? SIG_DFL : (newha)))\
|
||||
{\
|
||||
newsa.sa_handler = se ? (newha) : SIG_DFL;\
|
||||
sigaction((sig), &newsa, 0);\
|
||||
}
|
||||
#define FSP_FUSE_SIGADDSET(sig)\
|
||||
if (-1 != sigaction((sig), 0, &oldsa) &&\
|
||||
oldsa.sa_handler == SIG_DFL)\
|
||||
sigaddset(&sigmask, (sig));
|
||||
|
||||
static sigset_t sigmask;
|
||||
static pthread_t sigthr;
|
||||
struct sigaction oldsa, newsa;
|
||||
|
||||
// memset instead of initializer to avoid GCC -Wmissing-field-initializers warning
|
||||
memset(&newsa, 0, sizeof newsa);
|
||||
|
||||
if (0 != se)
|
||||
{
|
||||
if (0 == sigthr)
|
||||
{
|
||||
FSP_FUSE_SET_SIGNAL_HANDLER(SIGPIPE, SIG_IGN);
|
||||
|
||||
sigemptyset(&sigmask);
|
||||
FSP_FUSE_SIGADDSET(SIGHUP);
|
||||
FSP_FUSE_SIGADDSET(SIGINT);
|
||||
FSP_FUSE_SIGADDSET(SIGTERM);
|
||||
if (0 != pthread_sigmask(SIG_BLOCK, &sigmask, 0))
|
||||
return -1;
|
||||
|
||||
if (0 != pthread_create(&sigthr, 0, fsp_fuse_signal_thread, &sigmask))
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (0 != sigthr)
|
||||
{
|
||||
pthread_cancel(sigthr);
|
||||
pthread_join(sigthr, 0);
|
||||
sigthr = 0;
|
||||
|
||||
if (0 != pthread_sigmask(SIG_UNBLOCK, &sigmask, 0))
|
||||
return -1;
|
||||
sigemptyset(&sigmask);
|
||||
|
||||
FSP_FUSE_SET_SIGNAL_HANDLER(SIGPIPE, SIG_IGN);
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
#undef FSP_FUSE_SIGADDSET
|
||||
#undef FSP_FUSE_SET_SIGNAL_HANDLER
|
||||
}
|
||||
|
||||
static inline char *fsp_fuse_conv_to_win_path(const char *path)
|
||||
{
|
||||
void *cygwin_create_path(unsigned, const void *);
|
||||
return (char *)cygwin_create_path(
|
||||
0/*CCP_POSIX_TO_WIN_A*/ | 0x100/*CCP_RELATIVE*/,
|
||||
path);
|
||||
}
|
||||
|
||||
static inline fuse_pid_t fsp_fuse_winpid_to_pid(uint32_t winpid)
|
||||
{
|
||||
pid_t cygwin_winpid_to_pid(int winpid);
|
||||
pid_t pid = cygwin_winpid_to_pid(winpid);
|
||||
return -1 != pid ? pid : (fuse_pid_t)winpid;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
static inline struct fsp_fuse_env *fsp_fuse_env(void)
|
||||
{
|
||||
static struct fsp_fuse_env env = FSP_FUSE_ENV_INIT;
|
||||
return &env;
|
||||
}
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
Reference in New Issue
Block a user