Beispiel #1
0
        internal Result FindFileSystem(out FileSystemAccessor fileSystem, out U8Span subPath, U8Span path)
        {
            fileSystem = default;
            subPath    = default;

            if (path.IsNull())
            {
                return(ResultFs.NullptrArgument.Log());
            }

            int hostMountNameLen = StringUtils.GetLength(CommonMountNames.HostRootFileSystemMountName);

            if (StringUtils.Compare(path, CommonMountNames.HostRootFileSystemMountName, hostMountNameLen) == 0)
            {
                return(ResultFs.NotMounted.Log());
            }

            Result rc = GetMountNameAndSubPath(out MountName mountName, out subPath, path);

            if (rc.IsFailure())
            {
                return(rc);
            }

            rc = MountTable.Find(StringUtils.Utf8ZToString(mountName.Name), out fileSystem);
            if (rc.IsFailure())
            {
                return(rc);
            }

            return(Result.Success);
        }
Beispiel #2
0
        internal static Result FindFileSystem(this FileSystemClientImpl fs, out FileSystemAccessor fileSystem,
                                              out U8Span subPath, U8Span path)
        {
            UnsafeHelpers.SkipParamInit(out fileSystem);
            subPath = default;

            if (path.IsNull())
            {
                return(ResultFs.NullptrArgument.Log());
            }

            int hostMountNameLen = StringUtils.GetLength(CommonPaths.HostRootFileSystemMountName);

            if (StringUtils.Compare(path, CommonPaths.HostRootFileSystemMountName, hostMountNameLen) == 0)
            {
                return(ResultFs.NotMounted.Log());
            }

            Result rc = GetMountNameAndSubPath(out MountName mountName, out subPath, path);

            if (rc.IsFailure())
            {
                return(rc);
            }

            return(fs.Find(out fileSystem, new U8Span(mountName.Name)));
        }
Beispiel #3
0
        public static Result Register(this FileSystemClient fs, U8Span name, IFileSystem fileSystem)
        {
            var accessor = new FileSystemAccessor(fs, name, null, fileSystem, null, null);

            fs.Impl.Register(accessor);

            return(Result.Success);
        }
Beispiel #4
0
        public void Register(string mountName, IFileSystem fileSystem)
        {
            var accessor = new FileSystemAccessor(mountName, fileSystem, this);

            MountTable.Mount(accessor).ThrowIfFailure();

            accessor.IsAccessLogEnabled = IsEnabledAccessLog();
        }
Beispiel #5
0
        public static Result Register(this FileSystemClient fs, U8Span name, IFileSystem fileSystem,
                                      ICommonMountNameGenerator mountNameGenerator)
        {
            var accessor = new FileSystemAccessor(fs, name, null, fileSystem, mountNameGenerator, null);

            fs.Impl.Register(accessor);

            return(Result.Success);
        }
        public void CopyFile_fails_if_source_does_not_exist()
        {
            // setup
            var wrapper = new FileSystemAccessor();

            // execute
            var t  = wrapper.CopyAsync(_sourceFile, _destinationFile);
            var ex = Assert.Throws <AggregateException>(t.Wait);

            // verify
            ex.InnerExceptions.Single().Should().BeOfType <FileNotFoundException>();
        }
Beispiel #7
0
        public static Result Register(this FileSystemClient fs, U8Span name, IMultiCommitTarget multiCommitTarget,
                                      IFileSystem fileSystem, ICommonMountNameGenerator mountNameGenerator,
                                      ISaveDataAttributeGetter saveAttributeGetter, bool useDataCache, bool usePathCache)
        {
            var accessor = new FileSystemAccessor(fs, name, multiCommitTarget, fileSystem, mountNameGenerator,
                                                  saveAttributeGetter);

            accessor.SetFileDataCacheAttachable(useDataCache);
            accessor.SetPathBasedFileDataCacheAttachable(usePathCache);
            fs.Impl.Register(accessor);

            return(Result.Success);
        }
Beispiel #8
0
        public Result Register(U8Span mountName, IFileSystem fileSystem, ICommonMountNameGenerator nameGenerator)
        {
            var accessor = new FileSystemAccessor(mountName.ToString(), fileSystem, this, nameGenerator);

            Result rc = MountTable.Mount(accessor);

            if (rc.IsFailure())
            {
                return(rc);
            }

            accessor.IsAccessLogEnabled = IsEnabledAccessLog();
            return(Result.Success);
        }
        public void CopyFile_succeeds_if_destination_does_not_exist()
        {
            // setup
            const int size    = 10;
            var       wrapper = new FileSystemAccessor();

            CreateFile(_sourceFile, size);

            // execute
            var t = wrapper.CopyAsync(_sourceFile, _destinationFile);

            t.Wait();

            // verify
            var dest = new FileInfo(_destinationFile);

            dest.Exists.Should().BeTrue();
            dest.Length.Should().Be(size);
        }
Beispiel #10
0
        internal Result FindFileSystem(ReadOnlySpan <char> path, out FileSystemAccessor fileSystem, out ReadOnlySpan <char> subPath)
        {
            fileSystem = default;

            Result result = GetMountName(path, out ReadOnlySpan <char> mountName, out subPath);

            if (result.IsFailure())
            {
                return(result);
            }

            result = MountTable.Find(mountName.ToString(), out fileSystem);
            if (result.IsFailure())
            {
                return(result);
            }

            return(Result.Success);
        }
Beispiel #11
0
            static Result RunCommit(FileSystemClient fs, CommitOption option, FileSystemAccessor fileSystem)
            {
                if ((option.Flags & (CommitOptionFlag.ClearRestoreFlag | CommitOptionFlag.SetRestoreFlag)) == 0)
                {
                    return(fileSystem.Commit());
                }

                if (option.Flags != CommitOptionFlag.ClearRestoreFlag &&
                    option.Flags != CommitOptionFlag.SetRestoreFlag)
                {
                    return(ResultFs.InvalidCommitOption.Log());
                }

                Result rc = fileSystem.GetSaveDataAttribute(out SaveDataAttribute attribute);

                if (rc.IsFailure())
                {
                    return(rc);
                }

                if (attribute.ProgramId == SaveData.InvalidProgramId)
                {
                    attribute.ProgramId = SaveData.AutoResolveCallerProgramId;
                }

                var extraDataMask = new SaveDataExtraData();

                extraDataMask.Flags = SaveDataFlags.Restore;

                var extraData = new SaveDataExtraData();

                extraDataMask.Flags = option.Flags == CommitOptionFlag.SetRestoreFlag
                    ? SaveDataFlags.Restore
                    : SaveDataFlags.None;

                return(fs.Impl.WriteSaveDataFileSystemExtraData(SaveDataSpaceId.User, in attribute, in extraData,
                                                                in extraDataMask));
            }
Beispiel #12
0
 public static Result Find(this FileSystemClientImpl fs, out FileSystemAccessor fileSystem, U8Span name)
 {
     return(fs.Globals.UserMountTable.MountTable.Find(out fileSystem, name));
 }
Beispiel #13
0
 public static Result Register(this FileSystemClientImpl fs, FileSystemAccessor fileSystem)
 {
     return(fs.Globals.UserMountTable.MountTable.Mount(fileSystem));
 }