mirror of
				https://github.com/winfsp/winfsp.git
				synced 2025-11-04 04:58:05 -06:00 
			
		
		
		
	tst: passthrough-fuse: initial checkin
This commit is contained in:
		
							
								
								
									
										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
 | 
			
		||||
		Reference in New Issue
	
	Block a user