mirror of
https://github.com/winfsp/winfsp.git
synced 2025-04-23 00:43:00 -05:00
Merge branch 'master' into pvt-wsl
This commit is contained in:
commit
9d8ff57be7
@ -1,6 +1,18 @@
|
|||||||
= Changelog
|
= Changelog
|
||||||
|
|
||||||
|
|
||||||
|
v1.5B2 (2019.3 B2)::
|
||||||
|
|
||||||
|
Changes since v1.4:
|
||||||
|
|
||||||
|
* Extended attribute support has been added for all WinFsp API's: native, .NET, FUSE2 and FUSE3.
|
||||||
|
* Initial FastIO support has been added. FastIO operations are enabled on cache-enabled file systems with the notable exception of `FastIoQueryOpen`, which allows opening files in kernel mode; this operation requires the file system to specify the `FSP_FSCTL_VOLUME_PARAMS::AllowOpenInKernelMode` flag.
|
||||||
|
* FUSE has new `-o dothidden` option that is used to add the Windows hidden file attribute to files that start with a dot.
|
||||||
|
* Fixes for very large (> 4GiB) files. (Thanks @dworkin.)
|
||||||
|
* A fix for an invalid UID to SID mapping on domains with a lot of users. (Thanks @sganis.)
|
||||||
|
* A fix on the C++ layer. (Thanks @colatkinson.)
|
||||||
|
|
||||||
|
|
||||||
v1.5B1 (2019.3 B1)::
|
v1.5B1 (2019.3 B1)::
|
||||||
|
|
||||||
Changes since v1.4:
|
Changes since v1.4:
|
||||||
@ -11,6 +23,7 @@ Changes since v1.4:
|
|||||||
* A fix for an invalid UID to SID mapping on domains with a lot of users. (Thanks @sganis.)
|
* A fix for an invalid UID to SID mapping on domains with a lot of users. (Thanks @sganis.)
|
||||||
* A fix on the C++ layer. (Thanks @colatkinson.)
|
* A fix on the C++ layer. (Thanks @colatkinson.)
|
||||||
|
|
||||||
|
|
||||||
v1.4.19049 (2019.2)::
|
v1.4.19049 (2019.2)::
|
||||||
|
|
||||||
Changes since v1.3:
|
Changes since v1.3:
|
||||||
|
@ -54,6 +54,10 @@ static struct fuse_opt fsp_fuse_core_opts[] =
|
|||||||
FSP_FUSE_CORE_OPT("umask=%o", umask, 0),
|
FSP_FUSE_CORE_OPT("umask=%o", umask, 0),
|
||||||
FSP_FUSE_CORE_OPT("create_umask=", set_create_umask, 1),
|
FSP_FUSE_CORE_OPT("create_umask=", set_create_umask, 1),
|
||||||
FSP_FUSE_CORE_OPT("create_umask=%o", create_umask, 0),
|
FSP_FUSE_CORE_OPT("create_umask=%o", create_umask, 0),
|
||||||
|
FSP_FUSE_CORE_OPT("create_file_umask=", set_create_file_umask, 1),
|
||||||
|
FSP_FUSE_CORE_OPT("create_file_umask=%o", create_file_umask, 0),
|
||||||
|
FSP_FUSE_CORE_OPT("create_dir_umask=", set_create_dir_umask, 1),
|
||||||
|
FSP_FUSE_CORE_OPT("create_dir_umask=%o", create_dir_umask, 0),
|
||||||
FSP_FUSE_CORE_OPT("uid=", set_uid, 1),
|
FSP_FUSE_CORE_OPT("uid=", set_uid, 1),
|
||||||
FSP_FUSE_CORE_OPT("uid=%d", uid, 0),
|
FSP_FUSE_CORE_OPT("uid=%d", uid, 0),
|
||||||
FSP_FUSE_CORE_OPT("gid=", set_gid, 1),
|
FSP_FUSE_CORE_OPT("gid=", set_gid, 1),
|
||||||
@ -71,6 +75,9 @@ static struct fuse_opt fsp_fuse_core_opts[] =
|
|||||||
FSP_FUSE_CORE_OPT("rellinks", rellinks, 1),
|
FSP_FUSE_CORE_OPT("rellinks", rellinks, 1),
|
||||||
FSP_FUSE_CORE_OPT("norellinks", rellinks, 0),
|
FSP_FUSE_CORE_OPT("norellinks", rellinks, 0),
|
||||||
|
|
||||||
|
FSP_FUSE_CORE_OPT("dothidden", dothidden, 1),
|
||||||
|
FSP_FUSE_CORE_OPT("nodothidden", dothidden, 0),
|
||||||
|
|
||||||
FUSE_OPT_KEY("fstypename=", 'F'),
|
FUSE_OPT_KEY("fstypename=", 'F'),
|
||||||
FUSE_OPT_KEY("volname=", 'v'),
|
FUSE_OPT_KEY("volname=", 'v'),
|
||||||
|
|
||||||
@ -241,9 +248,12 @@ static int fsp_fuse_core_opt_proc(void *opt_data0, const char *arg, int key,
|
|||||||
FSP_FUSE_LIBRARY_NAME " options:\n"
|
FSP_FUSE_LIBRARY_NAME " options:\n"
|
||||||
" -o umask=MASK set file permissions (octal)\n"
|
" -o umask=MASK set file permissions (octal)\n"
|
||||||
" -o create_umask=MASK set newly created file permissions (octal)\n"
|
" -o create_umask=MASK set newly created file permissions (octal)\n"
|
||||||
|
" -o create_file_umask=MASK for files only\n"
|
||||||
|
" -o create_dir_umask=MASK for directories only\n"
|
||||||
" -o uid=N set file owner (-1 for mounting user id)\n"
|
" -o uid=N set file owner (-1 for mounting user id)\n"
|
||||||
" -o gid=N set file group (-1 for mounting user group)\n"
|
" -o gid=N set file group (-1 for mounting user group)\n"
|
||||||
" -o rellinks interpret absolute symlinks as volume relative\n"
|
" -o rellinks interpret absolute symlinks as volume relative\n"
|
||||||
|
" -o dothidden dot files have the Windows hidden file attrib\n"
|
||||||
" -o volname=NAME set volume label\n"
|
" -o volname=NAME set volume label\n"
|
||||||
" -o VolumePrefix=UNC set UNC prefix (/Server/Share)\n"
|
" -o VolumePrefix=UNC set UNC prefix (/Server/Share)\n"
|
||||||
" --VolumePrefix=UNC set UNC prefix (\\Server\\Share)\n"
|
" --VolumePrefix=UNC set UNC prefix (\\Server\\Share)\n"
|
||||||
@ -422,9 +432,12 @@ FSP_FUSE_API struct fuse *fsp_fuse_new(struct fsp_fuse_env *env,
|
|||||||
f->env = env;
|
f->env = env;
|
||||||
f->set_umask = opt_data.set_umask; f->umask = opt_data.umask;
|
f->set_umask = opt_data.set_umask; f->umask = opt_data.umask;
|
||||||
f->set_create_umask = opt_data.set_create_umask; f->create_umask = opt_data.create_umask;
|
f->set_create_umask = opt_data.set_create_umask; f->create_umask = opt_data.create_umask;
|
||||||
|
f->set_create_file_umask = opt_data.set_create_file_umask; f->create_file_umask = opt_data.create_file_umask;
|
||||||
|
f->set_create_dir_umask = opt_data.set_create_dir_umask; f->create_dir_umask = opt_data.create_dir_umask;
|
||||||
f->set_uid = opt_data.set_uid; f->uid = opt_data.uid;
|
f->set_uid = opt_data.set_uid; f->uid = opt_data.uid;
|
||||||
f->set_gid = opt_data.set_gid; f->gid = opt_data.gid;
|
f->set_gid = opt_data.set_gid; f->gid = opt_data.gid;
|
||||||
f->rellinks = opt_data.rellinks;
|
f->rellinks = opt_data.rellinks;
|
||||||
|
f->dothidden = opt_data.dothidden;
|
||||||
f->ThreadCount = opt_data.ThreadCount;
|
f->ThreadCount = opt_data.ThreadCount;
|
||||||
memcpy(&f->ops, ops, opsize);
|
memcpy(&f->ops, ops, opsize);
|
||||||
f->data = data;
|
f->data = data;
|
||||||
|
@ -429,6 +429,15 @@ static NTSTATUS fsp_fuse_intf_GetFileInfoFunnel(FSP_FILE_SYSTEM *FileSystem,
|
|||||||
}
|
}
|
||||||
if (StatEx)
|
if (StatEx)
|
||||||
FileInfo->FileAttributes |= fsp_fuse_intf_MapFlagsToFileAttributes(stbuf.st_flags);
|
FileInfo->FileAttributes |= fsp_fuse_intf_MapFlagsToFileAttributes(stbuf.st_flags);
|
||||||
|
if (f->dothidden)
|
||||||
|
{
|
||||||
|
const char *basename = PosixPath;
|
||||||
|
for (const char *p = PosixPath; '\0' != *p; p++)
|
||||||
|
if ('/' == *p)
|
||||||
|
basename = p + 1;
|
||||||
|
if ('.' == basename[0])
|
||||||
|
FileInfo->FileAttributes |= FILE_ATTRIBUTE_HIDDEN;
|
||||||
|
}
|
||||||
FileInfo->FileSize = stbuf.st_size;
|
FileInfo->FileSize = stbuf.st_size;
|
||||||
FileInfo->AllocationSize =
|
FileInfo->AllocationSize =
|
||||||
(FileInfo->FileSize + AllocationUnit - 1) / AllocationUnit * AllocationUnit;
|
(FileInfo->FileSize + AllocationUnit - 1) / AllocationUnit * AllocationUnit;
|
||||||
@ -785,8 +794,22 @@ static NTSTATUS fsp_fuse_intf_Create(FSP_FILE_SYSTEM *FileSystem,
|
|||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
Mode &= ~context->umask;
|
Mode &= ~context->umask;
|
||||||
|
if (CreateOptions & FILE_DIRECTORY_FILE)
|
||||||
|
{
|
||||||
|
if (f->set_create_dir_umask)
|
||||||
|
Mode = 0777 & ~f->create_dir_umask;
|
||||||
|
else
|
||||||
if (f->set_create_umask)
|
if (f->set_create_umask)
|
||||||
Mode = 0777 & ~f->create_umask;
|
Mode = 0777 & ~f->create_umask;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (f->set_create_file_umask)
|
||||||
|
Mode = 0777 & ~f->create_file_umask;
|
||||||
|
else
|
||||||
|
if (f->set_create_umask)
|
||||||
|
Mode = 0777 & ~f->create_umask;
|
||||||
|
}
|
||||||
|
|
||||||
memset(&fi, 0, sizeof fi);
|
memset(&fi, 0, sizeof fi);
|
||||||
if ('C' == f->env->environment) /* Cygwin */
|
if ('C' == f->env->environment) /* Cygwin */
|
||||||
@ -1712,7 +1735,7 @@ int fsp_fuse_intf_AddDirInfo(void *buf, const char *name,
|
|||||||
UINT32 Uid, Gid, Mode;
|
UINT32 Uid, Gid, Mode;
|
||||||
NTSTATUS Result0;
|
NTSTATUS Result0;
|
||||||
|
|
||||||
Result0 = fsp_fuse_intf_GetFileInfoFunnel(dh->FileSystem, 0, 0, stbuf,
|
Result0 = fsp_fuse_intf_GetFileInfoFunnel(dh->FileSystem, name, 0, stbuf,
|
||||||
&Uid, &Gid, &Mode, 0, &DirInfo->FileInfo);
|
&Uid, &Gid, &Mode, 0, &DirInfo->FileInfo);
|
||||||
if (NT_SUCCESS(Result0))
|
if (NT_SUCCESS(Result0))
|
||||||
DirInfo->Padding[0] = 1; /* HACK: remember that the FileInfo is valid */
|
DirInfo->Padding[0] = 1; /* HACK: remember that the FileInfo is valid */
|
||||||
|
@ -50,9 +50,12 @@ struct fuse
|
|||||||
struct fsp_fuse_env *env;
|
struct fsp_fuse_env *env;
|
||||||
int set_umask, umask;
|
int set_umask, umask;
|
||||||
int set_create_umask, create_umask;
|
int set_create_umask, create_umask;
|
||||||
|
int set_create_file_umask, create_file_umask;
|
||||||
|
int set_create_dir_umask, create_dir_umask;
|
||||||
int set_uid, uid;
|
int set_uid, uid;
|
||||||
int set_gid, gid;
|
int set_gid, gid;
|
||||||
int rellinks;
|
int rellinks;
|
||||||
|
int dothidden;
|
||||||
unsigned ThreadCount;
|
unsigned ThreadCount;
|
||||||
struct fuse_operations ops;
|
struct fuse_operations ops;
|
||||||
void *data;
|
void *data;
|
||||||
@ -137,10 +140,13 @@ struct fsp_fuse_core_opt_data
|
|||||||
HANDLE DebugLogHandle;
|
HANDLE DebugLogHandle;
|
||||||
int set_umask, umask,
|
int set_umask, umask,
|
||||||
set_create_umask, create_umask,
|
set_create_umask, create_umask,
|
||||||
|
set_create_file_umask, create_file_umask,
|
||||||
|
set_create_dir_umask, create_dir_umask,
|
||||||
set_uid, uid,
|
set_uid, uid,
|
||||||
set_gid, gid,
|
set_gid, gid,
|
||||||
set_attr_timeout, attr_timeout,
|
set_attr_timeout, attr_timeout,
|
||||||
rellinks;
|
rellinks,
|
||||||
|
dothidden;
|
||||||
int set_FileInfoTimeout,
|
int set_FileInfoTimeout,
|
||||||
set_DirInfoTimeout,
|
set_DirInfoTimeout,
|
||||||
set_EaTimeout,
|
set_EaTimeout,
|
||||||
|
@ -4,7 +4,7 @@ setlocal
|
|||||||
|
|
||||||
set DebugWorkspace=winfsp
|
set DebugWorkspace=winfsp
|
||||||
set DebugPort=50000
|
set DebugPort=50000
|
||||||
set DebugKey=win8.debug.net.key
|
set DebugKey=1.1.1.1
|
||||||
|
|
||||||
set RegKey="HKLM\SOFTWARE\Microsoft\Windows Kits\Installed Roots"
|
set RegKey="HKLM\SOFTWARE\Microsoft\Windows Kits\Installed Roots"
|
||||||
set RegVal="KitsRoot10"
|
set RegVal="KitsRoot10"
|
||||||
|
@ -5,6 +5,7 @@ setlocal
|
|||||||
set CONFIG=Debug
|
set CONFIG=Debug
|
||||||
set SUFFIX=x64
|
set SUFFIX=x64
|
||||||
set TARGET_MACHINE=WIN8DBG
|
set TARGET_MACHINE=WIN8DBG
|
||||||
|
if not X%1==X set TARGET_MACHINE=%1
|
||||||
set TARGET_ACCOUNT=\Users\%USERNAME%\Downloads\winfsp\
|
set TARGET_ACCOUNT=\Users\%USERNAME%\Downloads\winfsp\
|
||||||
set TARGET=\\%TARGET_MACHINE%%TARGET_ACCOUNT%
|
set TARGET=\\%TARGET_MACHINE%%TARGET_ACCOUNT%
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user