mirror of
https://github.com/winfsp/winfsp.git
synced 2025-04-22 08:23:05 -05:00
tst: passthrough-fuse: initial checkin
This commit is contained in:
parent
e12e3630bb
commit
473914d45f
6
tst/passthrough-fuse/.gitignore
vendored
Normal file
6
tst/passthrough-fuse/.gitignore
vendored
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
build
|
||||||
|
*.ncb
|
||||||
|
*.suo
|
||||||
|
*.vcproj.*
|
||||||
|
*.vcxproj.user
|
||||||
|
*.exe
|
2
tst/passthrough-fuse/Makefile
Normal file
2
tst/passthrough-fuse/Makefile
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
passthrough-fuse: passthrough-fuse.c
|
||||||
|
gcc $^ -o $@ -g -Wall `pkg-config fuse --cflags --libs`
|
275
tst/passthrough-fuse/passthrough-fuse.c
Normal file
275
tst/passthrough-fuse/passthrough-fuse.c
Normal file
@ -0,0 +1,275 @@
|
|||||||
|
/**
|
||||||
|
* @file passthrough-fuse.c
|
||||||
|
*
|
||||||
|
* @copyright 2015-2017 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 file in
|
||||||
|
* accordance with the commercial license agreement provided with the
|
||||||
|
* software.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <errno.h>
|
||||||
|
#include <limits.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#include <fuse.h>
|
||||||
|
|
||||||
|
#if defined(_WIN64) || defined(_WIN32)
|
||||||
|
#include "winposix.h"
|
||||||
|
#else
|
||||||
|
#include <dirent.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define FSNAME "passthrough"
|
||||||
|
#define PROGNAME "passthrough-fuse"
|
||||||
|
|
||||||
|
#define concat_path(ptfs, fn, fp) (sizeof fp > (unsigned)snprintf(fp, sizeof fp, "%s/%s", ptfs->rootdir, fn))
|
||||||
|
#define ptfs_impl_fullpath(n) \
|
||||||
|
char full ## n[PATH_MAX]; \
|
||||||
|
if (!concat_path(((PTFS *)fuse_get_context()->private_data), n, full ## n))\
|
||||||
|
return -ENAMETOOLONG; \
|
||||||
|
n = full ## n
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
const char *rootdir;
|
||||||
|
} PTFS;
|
||||||
|
|
||||||
|
static int ptfs_getattr(const char *path, struct fuse_stat *stbuf)
|
||||||
|
{
|
||||||
|
ptfs_impl_fullpath(path);
|
||||||
|
|
||||||
|
return -1 != lstat(path, stbuf) ? 0 : -errno;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int ptfs_mkdir(const char *path, fuse_mode_t mode)
|
||||||
|
{
|
||||||
|
ptfs_impl_fullpath(path);
|
||||||
|
|
||||||
|
return -1 != mkdir(path, mode) ? 0 : -errno;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int ptfs_unlink(const char *path)
|
||||||
|
{
|
||||||
|
ptfs_impl_fullpath(path);
|
||||||
|
|
||||||
|
return -1 != unlink(path) ? 0 : -errno;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int ptfs_rmdir(const char *path)
|
||||||
|
{
|
||||||
|
ptfs_impl_fullpath(path);
|
||||||
|
|
||||||
|
return -1 != rmdir(path) ? 0 : -errno;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int ptfs_rename(const char *oldpath, const char *newpath)
|
||||||
|
{
|
||||||
|
ptfs_impl_fullpath(newpath);
|
||||||
|
ptfs_impl_fullpath(oldpath);
|
||||||
|
|
||||||
|
return -1 != rename(oldpath, newpath) ? 0 : -errno;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int ptfs_chmod(const char *path, fuse_mode_t mode)
|
||||||
|
{
|
||||||
|
ptfs_impl_fullpath(path);
|
||||||
|
|
||||||
|
return -1 != chmod(path, mode) ? 0 : -errno;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int ptfs_chown(const char *path, fuse_uid_t uid, fuse_gid_t gid)
|
||||||
|
{
|
||||||
|
ptfs_impl_fullpath(path);
|
||||||
|
|
||||||
|
return -1 != lchown(path, uid, gid) ? 0 : -errno;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int ptfs_truncate(const char *path, fuse_off_t size)
|
||||||
|
{
|
||||||
|
ptfs_impl_fullpath(path);
|
||||||
|
|
||||||
|
return -1 != truncate(path, size) ? 0 : -errno;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int ptfs_utime(const char *path, struct fuse_utimbuf *timbuf)
|
||||||
|
{
|
||||||
|
ptfs_impl_fullpath(path);
|
||||||
|
|
||||||
|
return -1 != utime(path, timbuf) ? 0 : -errno;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int ptfs_open(const char *path, struct fuse_file_info *fi)
|
||||||
|
{
|
||||||
|
ptfs_impl_fullpath(path);
|
||||||
|
|
||||||
|
int fd;
|
||||||
|
return -1 != (fd = open(path, fi->flags)) ? (fi->fh = fd, 0) : -errno;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int ptfs_read(const char *path, char *buf, size_t size, fuse_off_t off,
|
||||||
|
struct fuse_file_info *fi)
|
||||||
|
{
|
||||||
|
int fd = (int)fi->fh;
|
||||||
|
|
||||||
|
int by;
|
||||||
|
return -1 != (by = pread(fd, buf, size, off)) ? by : -errno;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int ptfs_write(const char *path, const char *buf, size_t size, fuse_off_t off,
|
||||||
|
struct fuse_file_info *fi)
|
||||||
|
{
|
||||||
|
int fd = (int)fi->fh;
|
||||||
|
|
||||||
|
int by;
|
||||||
|
return -1 != (by = pwrite(fd, buf, size, off)) ? by : -errno;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int ptfs_statfs(const char *path, struct fuse_statvfs *stbuf)
|
||||||
|
{
|
||||||
|
ptfs_impl_fullpath(path);
|
||||||
|
|
||||||
|
return -1 != statvfs(path, stbuf) ? 0 : -errno;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int ptfs_release(const char *path, struct fuse_file_info *fi)
|
||||||
|
{
|
||||||
|
int fd = (int)fi->fh;
|
||||||
|
|
||||||
|
close(fd);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int ptfs_fsync(const char *path, int datasync, struct fuse_file_info *fi)
|
||||||
|
{
|
||||||
|
int fd = (int)fi->fh;
|
||||||
|
|
||||||
|
return -1 != fsync(fd) ? 0 : -errno;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int ptfs_opendir(const char *path, struct fuse_file_info *fi)
|
||||||
|
{
|
||||||
|
ptfs_impl_fullpath(path);
|
||||||
|
|
||||||
|
DIR *dp;
|
||||||
|
return 0 != (dp = opendir(path)) ? (fi->fh = (intptr_t)dp, 0) : -errno;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int ptfs_readdir(const char *path, void *buf, fuse_fill_dir_t filler, fuse_off_t off,
|
||||||
|
struct fuse_file_info *fi)
|
||||||
|
{
|
||||||
|
DIR *dp = (DIR *)fi->fh;
|
||||||
|
struct dirent *de;
|
||||||
|
|
||||||
|
for (;;)
|
||||||
|
{
|
||||||
|
errno = 0;
|
||||||
|
if (0 == (de = readdir(dp)))
|
||||||
|
break;
|
||||||
|
if (0 != filler(buf, de->d_name, 0, 0))
|
||||||
|
return -ENOMEM;
|
||||||
|
}
|
||||||
|
|
||||||
|
return -errno;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int ptfs_releasedir(const char *path, struct fuse_file_info *fi)
|
||||||
|
{
|
||||||
|
DIR *dp = (DIR *)fi->fh;
|
||||||
|
|
||||||
|
closedir(dp);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int ptfs_create(const char *path, fuse_mode_t mode, struct fuse_file_info *fi)
|
||||||
|
{
|
||||||
|
ptfs_impl_fullpath(path);
|
||||||
|
|
||||||
|
int fd;
|
||||||
|
return -1 != (fd = creat(path, mode)) ? (fi->fh = fd, 0) : -errno;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int ptfs_ftruncate(const char *path, fuse_off_t off, struct fuse_file_info *fi)
|
||||||
|
{
|
||||||
|
int fd = (int)fi->fh;
|
||||||
|
|
||||||
|
return -1 != ftruncate(fd, off) ? 0 : -errno;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int ptfs_fgetattr(const char *path, struct fuse_stat *stbuf, struct fuse_file_info *fi)
|
||||||
|
{
|
||||||
|
int fd = (int)fi->fh;
|
||||||
|
|
||||||
|
return -1 != fstat(fd, stbuf) ? 0 : -errno;
|
||||||
|
}
|
||||||
|
|
||||||
|
static struct fuse_operations ptfs_ops =
|
||||||
|
{
|
||||||
|
ptfs_getattr,
|
||||||
|
0, //getdir
|
||||||
|
0, //readlink
|
||||||
|
0, //mknod
|
||||||
|
ptfs_mkdir,
|
||||||
|
ptfs_unlink,
|
||||||
|
ptfs_rmdir,
|
||||||
|
0, //symlink
|
||||||
|
ptfs_rename,
|
||||||
|
0, //link
|
||||||
|
ptfs_chmod,
|
||||||
|
ptfs_chown,
|
||||||
|
ptfs_truncate,
|
||||||
|
ptfs_utime,
|
||||||
|
ptfs_open,
|
||||||
|
ptfs_read,
|
||||||
|
ptfs_write,
|
||||||
|
ptfs_statfs,
|
||||||
|
0, //flush
|
||||||
|
ptfs_release,
|
||||||
|
ptfs_fsync,
|
||||||
|
0, //setxattr
|
||||||
|
0, //getxattr
|
||||||
|
0, //listxattr
|
||||||
|
0, //removexattr
|
||||||
|
ptfs_opendir,
|
||||||
|
ptfs_readdir,
|
||||||
|
ptfs_releasedir,
|
||||||
|
0, //fsyncdir
|
||||||
|
0, //init
|
||||||
|
0, //destroy
|
||||||
|
0, //access
|
||||||
|
ptfs_create,
|
||||||
|
ptfs_ftruncate,
|
||||||
|
ptfs_fgetattr,
|
||||||
|
};
|
||||||
|
|
||||||
|
static void usage(void)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "usage: " PROGNAME " [FUSE options] rootdir mountpoint\n");
|
||||||
|
exit(2);
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
PTFS ptfs = { 0 };
|
||||||
|
|
||||||
|
if (3 <= argc && '-' != argv[argc - 2][0] && '-' != argv[argc - 1][0])
|
||||||
|
{
|
||||||
|
ptfs.rootdir = realpath(argv[argc - 2], 0); /* memory freed at process end */
|
||||||
|
argv[argc - 2] = argv[argc - 1];
|
||||||
|
argc--;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (0 == ptfs.rootdir)
|
||||||
|
usage();
|
||||||
|
|
||||||
|
return fuse_main(argc, argv, &ptfs_ops, &ptfs);
|
||||||
|
}
|
28
tst/passthrough-fuse/passthrough-fuse.sln
Normal file
28
tst/passthrough-fuse/passthrough-fuse.sln
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
|
||||||
|
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
|
# Visual Studio 14
|
||||||
|
VisualStudioVersion = 14.0.25420.1
|
||||||
|
MinimumVisualStudioVersion = 10.0.40219.1
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "passthrough-fuse", "passthrough-fuse.vcxproj", "{C753851C-142F-4AAD-B2F7-CBF905C2A600}"
|
||||||
|
EndProject
|
||||||
|
Global
|
||||||
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
Debug|x64 = Debug|x64
|
||||||
|
Debug|x86 = Debug|x86
|
||||||
|
Release|x64 = Release|x64
|
||||||
|
Release|x86 = Release|x86
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
|
{C753851C-142F-4AAD-B2F7-CBF905C2A600}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{C753851C-142F-4AAD-B2F7-CBF905C2A600}.Debug|x64.Build.0 = Debug|x64
|
||||||
|
{C753851C-142F-4AAD-B2F7-CBF905C2A600}.Debug|x86.ActiveCfg = Debug|Win32
|
||||||
|
{C753851C-142F-4AAD-B2F7-CBF905C2A600}.Debug|x86.Build.0 = Debug|Win32
|
||||||
|
{C753851C-142F-4AAD-B2F7-CBF905C2A600}.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{C753851C-142F-4AAD-B2F7-CBF905C2A600}.Release|x64.Build.0 = Release|x64
|
||||||
|
{C753851C-142F-4AAD-B2F7-CBF905C2A600}.Release|x86.ActiveCfg = Release|Win32
|
||||||
|
{C753851C-142F-4AAD-B2F7-CBF905C2A600}.Release|x86.Build.0 = Release|Win32
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
|
HideSolutionNode = FALSE
|
||||||
|
EndGlobalSection
|
||||||
|
EndGlobal
|
190
tst/passthrough-fuse/passthrough-fuse.vcxproj
Normal file
190
tst/passthrough-fuse/passthrough-fuse.vcxproj
Normal file
@ -0,0 +1,190 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup Label="ProjectConfigurations">
|
||||||
|
<ProjectConfiguration Include="Debug|Win32">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|Win32">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Debug|x64">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|x64">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
</ItemGroup>
|
||||||
|
<PropertyGroup Label="Globals">
|
||||||
|
<ProjectGuid>{C753851C-142F-4AAD-B2F7-CBF905C2A600}</ProjectGuid>
|
||||||
|
<Keyword>Win32Proj</Keyword>
|
||||||
|
<RootNamespace>passthroughfuse</RootNamespace>
|
||||||
|
<WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<UseDebugLibraries>true</UseDebugLibraries>
|
||||||
|
<PlatformToolset>v140</PlatformToolset>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
|
<PlatformToolset>v140</PlatformToolset>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<UseDebugLibraries>true</UseDebugLibraries>
|
||||||
|
<PlatformToolset>v140</PlatformToolset>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
|
<PlatformToolset>v140</PlatformToolset>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||||
|
<ImportGroup Label="ExtensionSettings">
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="Shared">
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<LinkIncremental>true</LinkIncremental>
|
||||||
|
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir>
|
||||||
|
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\</IntDir>
|
||||||
|
<TargetName>$(ProjectName)-$(PlatformTarget)</TargetName>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||||
|
<LinkIncremental>true</LinkIncremental>
|
||||||
|
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir>
|
||||||
|
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\</IntDir>
|
||||||
|
<TargetName>$(ProjectName)-$(PlatformTarget)</TargetName>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<LinkIncremental>false</LinkIncremental>
|
||||||
|
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir>
|
||||||
|
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\</IntDir>
|
||||||
|
<TargetName>$(ProjectName)-$(PlatformTarget)</TargetName>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
|
<LinkIncremental>false</LinkIncremental>
|
||||||
|
<OutDir>$(SolutionDir)build\$(Configuration)\</OutDir>
|
||||||
|
<IntDir>$(SolutionDir)build\$(ProjectName).build\$(Configuration)\$(PlatformTarget)\</IntDir>
|
||||||
|
<TargetName>$(ProjectName)-$(PlatformTarget)</TargetName>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<PrecompiledHeader>
|
||||||
|
</PrecompiledHeader>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<Optimization>Disabled</Optimization>
|
||||||
|
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<SDLCheck>true</SDLCheck>
|
||||||
|
<AdditionalIncludeDirectories>$(MSBuildProgramFiles32)\WinFsp\inc\fuse</AdditionalIncludeDirectories>
|
||||||
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
|
<DisableSpecificWarnings>4996</DisableSpecificWarnings>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<SubSystem>Console</SubSystem>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<AdditionalDependencies>$(MSBuildProgramFiles32)\WinFsp\lib\winfsp-$(PlatformTarget).lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
|
<DelayLoadDLLs>winfsp-$(PlatformTarget).dll</DelayLoadDLLs>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||||
|
<ClCompile>
|
||||||
|
<PrecompiledHeader>
|
||||||
|
</PrecompiledHeader>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<Optimization>Disabled</Optimization>
|
||||||
|
<PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<SDLCheck>true</SDLCheck>
|
||||||
|
<AdditionalIncludeDirectories>$(MSBuildProgramFiles32)\WinFsp\inc\fuse</AdditionalIncludeDirectories>
|
||||||
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
|
<DisableSpecificWarnings>4996</DisableSpecificWarnings>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<SubSystem>Console</SubSystem>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<AdditionalDependencies>$(MSBuildProgramFiles32)\WinFsp\lib\winfsp-$(PlatformTarget).lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
|
<DelayLoadDLLs>winfsp-$(PlatformTarget).dll</DelayLoadDLLs>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<PrecompiledHeader>
|
||||||
|
</PrecompiledHeader>
|
||||||
|
<Optimization>MaxSpeed</Optimization>
|
||||||
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
|
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<SDLCheck>true</SDLCheck>
|
||||||
|
<AdditionalIncludeDirectories>$(MSBuildProgramFiles32)\WinFsp\inc\fuse</AdditionalIncludeDirectories>
|
||||||
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
|
<DisableSpecificWarnings>4996</DisableSpecificWarnings>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<SubSystem>Console</SubSystem>
|
||||||
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<AdditionalDependencies>$(MSBuildProgramFiles32)\WinFsp\lib\winfsp-$(PlatformTarget).lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
|
<DelayLoadDLLs>winfsp-$(PlatformTarget).dll</DelayLoadDLLs>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
|
<ClCompile>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<PrecompiledHeader>
|
||||||
|
</PrecompiledHeader>
|
||||||
|
<Optimization>MaxSpeed</Optimization>
|
||||||
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
|
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<SDLCheck>true</SDLCheck>
|
||||||
|
<AdditionalIncludeDirectories>$(MSBuildProgramFiles32)\WinFsp\inc\fuse</AdditionalIncludeDirectories>
|
||||||
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
|
<DisableSpecificWarnings>4996</DisableSpecificWarnings>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<SubSystem>Console</SubSystem>
|
||||||
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<AdditionalDependencies>$(MSBuildProgramFiles32)\WinFsp\lib\winfsp-$(PlatformTarget).lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
|
<DelayLoadDLLs>winfsp-$(PlatformTarget).dll</DelayLoadDLLs>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="passthrough-fuse.c" />
|
||||||
|
<ClCompile Include="winposix.c" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="winposix.h" />
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
|
<ImportGroup Label="ExtensionTargets">
|
||||||
|
</ImportGroup>
|
||||||
|
</Project>
|
22
tst/passthrough-fuse/passthrough-fuse.vcxproj.filters
Normal file
22
tst/passthrough-fuse/passthrough-fuse.vcxproj.filters
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup>
|
||||||
|
<Filter Include="Source">
|
||||||
|
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
||||||
|
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
||||||
|
</Filter>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="passthrough-fuse.c">
|
||||||
|
<Filter>Source</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="winposix.c">
|
||||||
|
<Filter>Source</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="winposix.h">
|
||||||
|
<Filter>Source</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
19
tst/passthrough-fuse/winposix.c
Normal file
19
tst/passthrough-fuse/winposix.c
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
/**
|
||||||
|
* @file passthrough-fuse.c
|
||||||
|
*
|
||||||
|
* @copyright 2015-2017 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 file in
|
||||||
|
* accordance with the commercial license agreement provided with the
|
||||||
|
* software.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <fuse.h>
|
||||||
|
#include "winposix.h"
|
56
tst/passthrough-fuse/winposix.h
Normal file
56
tst/passthrough-fuse/winposix.h
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
/**
|
||||||
|
* @file winposix.h
|
||||||
|
*
|
||||||
|
* @copyright 2015-2017 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 file in
|
||||||
|
* accordance with the commercial license agreement provided with the
|
||||||
|
* software.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef WINPOSIX_H_INCLUDED
|
||||||
|
#define WINPOSIX_H_INCLUDED
|
||||||
|
|
||||||
|
#define PATH_MAX 1024
|
||||||
|
|
||||||
|
typedef struct _DIR DIR;
|
||||||
|
struct dirent
|
||||||
|
{
|
||||||
|
char d_name[255];
|
||||||
|
};
|
||||||
|
|
||||||
|
char *realpath(const char *path, char *resolved_path);
|
||||||
|
|
||||||
|
int statvfs(const char *path, struct fuse_statvfs *buf);
|
||||||
|
|
||||||
|
int mkdir(const char *path, fuse_mode_t mode);
|
||||||
|
int rmdir(const char *path);
|
||||||
|
|
||||||
|
int unlink(const char *path);
|
||||||
|
int lstat(const char *path, struct fuse_stat *stbuf);
|
||||||
|
int chmod(const char *path, fuse_mode_t mode);
|
||||||
|
int lchown(const char *path, fuse_uid_t uid, fuse_gid_t gid);
|
||||||
|
int truncate(const char *path, fuse_off_t size);
|
||||||
|
int utime(const char *path, const struct fuse_utimbuf *timbuf);
|
||||||
|
|
||||||
|
int creat(const char *path, fuse_mode_t mode);
|
||||||
|
int open(const char *path, int oflag);
|
||||||
|
int fstat(int fd, struct fuse_stat *stbuf);
|
||||||
|
int ftruncate(int fd, fuse_off_t size);;
|
||||||
|
int pread(int fd, void *buf, size_t nbyte, fuse_off_t offset);
|
||||||
|
int pwrite(int fd, const void *buf, size_t nbyte, fuse_off_t offset);
|
||||||
|
int fsync(int fd);
|
||||||
|
int close(int fd);
|
||||||
|
|
||||||
|
DIR *opendir(const char *path);
|
||||||
|
struct dirent *readdir(DIR *dirp);
|
||||||
|
int closedir(DIR *dp);
|
||||||
|
|
||||||
|
#endif
|
Loading…
x
Reference in New Issue
Block a user