dll: fuse: optimize symlinks aways when readlink returns -ENOSYS

This commit is contained in:
Bill Zissimopoulos 2018-05-08 10:51:29 -07:00
parent 7aadf259d9
commit 1123e7b0ef
No known key found for this signature in database
GPG Key ID: 3D4F95D52C7B3EA3
2 changed files with 11 additions and 1 deletions

View File

@ -376,6 +376,15 @@ static NTSTATUS fsp_fuse_svcstart(FSP_SERVICE *Service, ULONG argc, PWSTR *argv)
&f->VolumeParams.VolumeCreationTime);
}
}
if (0 != f->ops.readlink)
{
char buf[FSP_FSCTL_TRANSACT_PATH_SIZEMAX / sizeof(WCHAR)];
int err;
/* this should always fail with ENOSYS or EINVAL */
err = f->ops.readlink("/", buf, sizeof buf);
f->has_symlinks = -ENOSYS != err;
}
/* the FSD does not currently limit these VolumeParams fields; do so here! */
if (f->VolumeParams.SectorSize < FSP_FUSE_SECTORSIZE_MIN ||

View File

@ -29,7 +29,7 @@
#define FSP_FUSE_CONTEXT_FROM_HDR(h) \
(struct fuse_context *)((PUINT8)(h) + sizeof(struct fsp_fuse_context_header))
#define FSP_FUSE_HAS_SYMLINKS(f) (0 != (f)->ops.readlink)
#define FSP_FUSE_HAS_SYMLINKS(f) ((f)->has_symlinks)
struct fuse
{
@ -44,6 +44,7 @@ struct fuse
void *data;
unsigned conn_want;
BOOLEAN fsinit;
BOOLEAN has_symlinks;
UINT32 DebugLog;
FSP_FILE_SYSTEM_OPERATION_GUARD_STRATEGY OpGuardStrategy;
FSP_FSCTL_VOLUME_PARAMS VolumeParams;