dll: fuse: ensure compatibility between winfsp and cygwin stat, etc. definitions

This commit is contained in:
Bill Zissimopoulos
2016-06-02 14:07:29 -07:00
parent 6910b67982
commit 190e2320c0
4 changed files with 59 additions and 156 deletions

View File

@ -24,133 +24,6 @@
#define FSP_FUSE_LIBRARY_NAME LIBRARY_NAME "-FUSE"
#if defined(_WIN64)
struct cyg_timespec
{
int64_t tv_sec;
int64_t tv_nsec;
};
#else
struct cyg_timespec
{
int32_t tv_sec;
int32_t tv_nsec;
};
#endif
struct cyg_stat
{
uint32_t st_dev;
uint64_t st_ino;
uint32_t st_mode;
uint16_t st_nlink;
uint32_t st_uid;
uint32_t st_gid;
uint32_t st_rdev;
int64_t st_size;
struct cyg_timespec st_atim;
struct cyg_timespec st_mtim;
struct cyg_timespec st_ctim;
int32_t st_blksize;
int64_t st_blocks;
struct cyg_timespec st_birthtim;
};
#if defined(_WIN64)
struct cyg_statvfs
{
uint64_t f_bsize;
uint64_t f_frsize;
uint64_t f_blocks;
uint64_t f_bfree;
uint64_t f_bavail;
uint64_t f_files;
uint64_t f_ffree;
uint64_t f_favail;
uint64_t f_fsid;
uint64_t f_flag;
uint64_t f_namemax;
};
#else
struct cyg_statvfs
{
uint32_t f_bsize;
uint32_t f_frsize;
uint32_t f_blocks;
uint32_t f_bfree;
uint32_t f_bavail;
uint32_t f_files;
uint32_t f_ffree;
uint32_t f_favail;
uint32_t f_fsid;
uint32_t f_flag;
uint32_t f_namemax;
};
#endif
static inline void fsp_fuse_get_stat_buf(
struct fsp_fuse_env *env,
const void *buf, struct fuse_stat *fspbuf)
{
switch (env->environment)
{
case 'C':
{
const struct cyg_stat *cygbuf = buf;
fspbuf->st_dev = cygbuf->st_dev;
fspbuf->st_ino = cygbuf->st_ino;
fspbuf->st_mode = cygbuf->st_mode;
fspbuf->st_nlink = cygbuf->st_nlink;
fspbuf->st_uid = cygbuf->st_uid;
fspbuf->st_gid = cygbuf->st_gid;
fspbuf->st_rdev = cygbuf->st_rdev;
fspbuf->st_size = cygbuf->st_size;
fspbuf->st_atim.tv_sec = cygbuf->st_atim.tv_sec;
fspbuf->st_atim.tv_nsec = (int)cygbuf->st_atim.tv_nsec;
fspbuf->st_mtim.tv_sec = cygbuf->st_mtim.tv_sec;
fspbuf->st_mtim.tv_nsec = (int)cygbuf->st_mtim.tv_nsec;
fspbuf->st_ctim.tv_sec = cygbuf->st_ctim.tv_sec;
fspbuf->st_ctim.tv_nsec = (int)cygbuf->st_ctim.tv_nsec;
fspbuf->st_blksize = cygbuf->st_blksize;
fspbuf->st_blocks = cygbuf->st_blocks;
fspbuf->st_birthtim.tv_sec = cygbuf->st_birthtim.tv_sec;
fspbuf->st_birthtim.tv_nsec = (int)cygbuf->st_birthtim.tv_nsec;
}
break;
default:
memcpy(fspbuf, buf, sizeof *fspbuf);
break;
}
}
static inline void fsp_fuse_get_statvfs_buf(
struct fsp_fuse_env *env,
const void *buf, struct fuse_statvfs *fspbuf)
{
switch (env->environment)
{
case 'C':
{
const struct cyg_statvfs *cygbuf = buf;
fspbuf->f_bsize = cygbuf->f_bsize;
fspbuf->f_frsize = cygbuf->f_frsize;
fspbuf->f_blocks = cygbuf->f_blocks;
fspbuf->f_bfree = cygbuf->f_bfree;
fspbuf->f_bavail = cygbuf->f_bavail;
fspbuf->f_files = cygbuf->f_files;
fspbuf->f_ffree = cygbuf->f_ffree;
fspbuf->f_favail = cygbuf->f_favail;
fspbuf->f_fsid = cygbuf->f_fsid;
fspbuf->f_flag = cygbuf->f_flag;
fspbuf->f_namemax = cygbuf->f_namemax;
}
break;
default:
memcpy(fspbuf, buf, sizeof *fspbuf);
break;
}
}
struct fuse
{
struct fsp_fuse_env *env;