private static Result MountCodeImpl(this FileSystemClient fs, out CodeVerificationData verificationData, U8Span mountName, U8Span path, ProgramId programId) { Unsafe.SkipInit(out verificationData); Result rc = MountHelpers.CheckMountName(mountName); if (rc.IsFailure()) { return(rc); } rc = FspPath.FromSpan(out FspPath fsPath, path); if (rc.IsFailure()) { return(rc); } IFileSystemProxyForLoader fsProxy = fs.GetFileSystemProxyForLoaderServiceObject(); rc = fsProxy.OpenCodeFileSystem(out IFileSystem codeFs, out verificationData, in fsPath, programId); if (rc.IsFailure()) { return(rc); } return(fs.Register(mountName, codeFs)); }
public static Result MountCode(this FileSystemClient fs, out CodeVerificationData verificationData, U8Span mountName, U8Span path, ProgramId programId) { Result rc; if (fs.IsEnabledAccessLog(AccessLogTarget.System)) { TimeSpan startTime = fs.Time.GetCurrent(); rc = MountCodeImpl(fs, out verificationData, mountName, path, programId); TimeSpan endTime = fs.Time.GetCurrent(); fs.OutputAccessLog(rc, startTime, endTime, $", name: \"{mountName.ToString()}\", name: \"{path.ToString()}\", programid: 0x{programId}"); } else { rc = MountCodeImpl(fs, out verificationData, mountName, path, programId); } if (rc.IsSuccess() && fs.IsEnabledAccessLog(AccessLogTarget.System)) { fs.EnableFileSystemAccessorAccessLog(mountName); } return(rc); }
static Result Mount(FileSystemClient fs, out CodeVerificationData verificationData, U8Span mountName, U8Span path, ProgramId programId) { UnsafeHelpers.SkipParamInit(out verificationData); Result rc = fs.Impl.CheckMountName(mountName); if (rc.IsFailure()) { return(rc); } if (path.IsNull()) { return(ResultFs.NullptrArgument.Log()); } rc = FspPath.FromSpan(out FspPath fsPath, path); if (rc.IsFailure()) { return(rc); } using ReferenceCountedDisposable <IFileSystemProxyForLoader> fsProxy = fs.Impl.GetFileSystemProxyForLoaderServiceObject(); ReferenceCountedDisposable <IFileSystemSf> fileSystem = null; try { rc = fsProxy.Target.OpenCodeFileSystem(out fileSystem, out verificationData, in fsPath, programId); if (rc.IsFailure()) { return(rc); } var fileSystemAdapter = new FileSystemServiceObjectAdapter(fileSystem); return(fs.Register(mountName, fileSystemAdapter)); } finally { fileSystem?.Dispose(); } }
public static Result MountCode(this FileSystemClient fs, out CodeVerificationData verificationData, U8Span mountName, U8Span path, ProgramId programId) { Result rc; if (fs.Impl.IsEnabledAccessLog(AccessLogTarget.System)) { Tick start = fs.Hos.Os.GetSystemTick(); rc = Mount(fs, out verificationData, mountName, path, programId); Tick end = fs.Hos.Os.GetSystemTick(); Span <byte> logBuffer = stackalloc byte[0x300]; var sb = new U8StringBuilder(logBuffer, true); sb.Append(LogName).Append(mountName).Append(LogQuote) .Append(LogPath).Append(path).Append(LogQuote) .Append(LogProgramId).AppendFormat(programId.Value, 'X'); fs.Impl.OutputAccessLog(rc, start, end, null, new U8Span(sb.Buffer)); } else { rc = Mount(fs, out verificationData, mountName, path, programId); } fs.Impl.AbortIfNeeded(rc); if (rc.IsFailure()) { return(rc); } if (fs.Impl.IsEnabledAccessLog(AccessLogTarget.System)) { fs.Impl.EnableFileSystemAccessorAccessLog(mountName); } return(Result.Success);
public Result OpenCodeFileSystem(out ReferenceCountedDisposable <IFileSystem> fileSystem, out CodeVerificationData verificationData, in FspPath path, ProgramId programId)