static Result Mount(FileSystemClientImpl fs, U8Span mountName, BisPartitionId partitionId) { Result rc = fs.CheckMountNameAcceptingReservedMountName(mountName); if (rc.IsFailure()) { return(rc); } using ReferenceCountedDisposable <IFileSystemProxy> fsProxy = fs.GetFileSystemProxyServiceObject(); // Nintendo doesn't use the provided rootPath FspPath.CreateEmpty(out FspPath sfPath); ReferenceCountedDisposable <IFileSystemSf> fileSystem = null; try { rc = fsProxy.Target.OpenBisFileSystem(out fileSystem, in sfPath, partitionId); if (rc.IsFailure()) { return(rc); } var nameGenerator = new BisCommonMountNameGenerator(partitionId); var fileSystemAdapter = new FileSystemServiceObjectAdapter(fileSystem); return(fs.Fs.Register(mountName, fileSystemAdapter, nameGenerator)); } finally { fileSystem?.Dispose(); } }
private static Result MountSaveDataImpl(this FileSystemClientImpl fs, U8Span mountName, SaveDataSpaceId spaceId, ProgramId programId, UserId userId, SaveDataType type, bool openReadOnly, ushort index) { Result rc = fs.CheckMountName(mountName); if (rc.IsFailure()) { return(rc); } using ReferenceCountedDisposable <IFileSystemProxy> fsProxy = fs.GetFileSystemProxyServiceObject(); rc = SaveDataAttribute.Make(out SaveDataAttribute attribute, programId, type, userId, 0, index); if (rc.IsFailure()) { return(rc); } ReferenceCountedDisposable <IFileSystemSf> fileSystem = null; try { if (openReadOnly) { rc = fsProxy.Target.OpenReadOnlySaveDataFileSystem(out fileSystem, spaceId, in attribute); if (rc.IsFailure()) { return(rc); } } else { rc = fsProxy.Target.OpenSaveDataFileSystem(out fileSystem, spaceId, in attribute); if (rc.IsFailure()) { return(rc); } } var fileSystemAdapter = new FileSystemServiceObjectAdapter(fileSystem); return(fs.Fs.Register(mountName, fileSystemAdapter, fileSystemAdapter, null, false, true)); } finally { fileSystem?.Dispose(); } }