Skip to content

Commit 9f0060b

Browse files
committed
ArchiveFileSystem bugfixes
1 parent 2b3cae0 commit 9f0060b

File tree

2 files changed

+7
-6
lines changed

2 files changed

+7
-6
lines changed

XbTool/XbTool/Xb2/ArchiveFile.cs

+4-3
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,9 @@ public class ArchiveFile : FileBase
1212
private bool IsCompressed { get; set; }
1313
private byte[] FileData { get; set; }
1414

15-
public ArchiveFile(byte[] file)
15+
public ArchiveFile(byte[] file, OpenMode mode)
1616
{
17+
Mode = mode;
1718
FileData = file;
1819
IsCompressed = true;
1920
Size = file.Length;
@@ -33,7 +34,7 @@ public override int Read(Span<byte> destination, long offset)
3334

3435
if (IsCompressed)
3536
{
36-
FileData.CopyTo(destination.Slice((int)offset, toRead));
37+
FileData.AsSpan((int)offset, toRead).CopyTo(destination);
3738
}
3839
else
3940
{
@@ -45,9 +46,9 @@ public override int Read(Span<byte> destination, long offset)
4546
}
4647

4748
public override long GetSize() => Size;
49+
public override void Flush() { }
4850

4951
public override void Write(ReadOnlySpan<byte> source, long offset) => throw new NotSupportedException();
50-
public override void Flush() => throw new NotSupportedException();
5152
public override void SetSize(long size) => throw new NotSupportedException();
5253
}
5354
}

XbTool/XbTool/Xb2/ArchiveFileSystem.cs

+3-3
Original file line numberDiff line numberDiff line change
@@ -118,16 +118,16 @@ public IFile OpenFile(string path, OpenMode mode)
118118
{
119119
case 2:
120120
var decompData = new byte[fileInfo.UncompressedSize];
121-
Stream compStream = DataFile.Slice(fileInfo.Offset + 0x30, fileInfo.CompressedSize).AsStream();
121+
Stream compStream = DataFile.Slice(fileInfo.Offset + 0x30).AsStream();
122122

123123
using (var deflate = new ZlibStream(compStream, CompressionMode.Decompress, true))
124124
{
125125
deflate.CopyTo(new MemoryStream(decompData), fileInfo.UncompressedSize);
126126
}
127127

128-
return new ArchiveFile(decompData);
128+
return new ArchiveFile(decompData, OpenMode.Read);
129129
case 0:
130-
return new ArchiveFile(DataFile, fileInfo.Offset, fileInfo.UncompressedSize);
130+
return new ArchiveFile(DataFile, fileInfo.Offset, fileInfo.CompressedSize);
131131
default:
132132
throw new InvalidDataException();
133133
}

0 commit comments

Comments
 (0)