protected override Result CreateFileImpl(string path, long size, CreateFileOptions options) { path = PathTools.Normalize(path); if (size == 0) { var emptyFileEntry = new SaveFileInfo { StartBlock = int.MinValue, Length = size }; FileTable.AddFile(path, ref emptyFileEntry); return(Result.Success); } int blockCount = (int)Util.DivideByRoundUp(size, AllocationTable.Header.BlockSize); int startBlock = AllocationTable.Allocate(blockCount); if (startBlock == -1) { return(ResultFs.AllocationTableInsufficientFreeBlocks.Log()); } var fileEntry = new SaveFileInfo { StartBlock = startBlock, Length = size }; FileTable.AddFile(path, ref fileEntry); return(Result.Success); }
protected override Result DoCreateFile(U8Span path, long size, CreateFileOptions options) { FsPath normalizedPath; unsafe { _ = &normalizedPath; } // workaround for CS0165 Result rc = PathTool.Normalize(normalizedPath.Str, out _, path, false, false); if (rc.IsFailure()) { return(rc); } if (size == 0) { var emptyFileEntry = new SaveFileInfo { StartBlock = int.MinValue, Length = size }; FileTable.AddFile(normalizedPath, ref emptyFileEntry); return(Result.Success); } int blockCount = (int)Utilities.DivideByRoundUp(size, AllocationTable.Header.BlockSize); int startBlock = AllocationTable.Allocate(blockCount); if (startBlock == -1) { return(ResultFs.AllocationTableInsufficientFreeBlocks.Log()); } var fileEntry = new SaveFileInfo { StartBlock = startBlock, Length = size }; FileTable.AddFile(normalizedPath, ref fileEntry); return(Result.Success); }
protected override Result DoCreateFile(U8Span path, long size, CreateFileOptions options) { Unsafe.SkipInit(out FsPath normalizedPath); Result rc = PathNormalizer.Normalize(normalizedPath.Str, out _, path, false, false); if (rc.IsFailure()) { return(rc); } if (size == 0) { var emptyFileEntry = new SaveFileInfo { StartBlock = int.MinValue, Length = size }; FileTable.AddFile(normalizedPath, ref emptyFileEntry); return(Result.Success); } int blockCount = (int)BitUtil.DivideUp(size, AllocationTable.Header.BlockSize); int startBlock = AllocationTable.Allocate(blockCount); if (startBlock == -1) { return(ResultFs.AllocationTableFull.Log()); } var fileEntry = new SaveFileInfo { StartBlock = startBlock, Length = size }; FileTable.AddFile(normalizedPath, ref fileEntry); return(Result.Success); }