Skip to content

Commit b69f9af

Browse files
committed
Respect stream's initial position
Since FSB5 is embedded in the bank, it's not guaranteed passed stream has FSB5 chunk directly at 0
1 parent 26e6570 commit b69f9af

1 file changed

Lines changed: 6 additions & 6 deletions

File tree

Fmod5Sharp/FsbLoader.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
using System;
2-
using System.Collections.Generic;
1+
using System.Collections.Generic;
32
using System.IO;
43
using Fmod5Sharp.FmodTypes;
54
using Fmod5Sharp.Util;
@@ -25,6 +24,7 @@ public static class FsbLoader
2524

2625
private static FmodSoundBank? LoadInternal(Stream stream, bool throwIfError)
2726
{
27+
var savedPos = stream.Position;
2828
using BinaryReader reader = new(stream);
2929

3030
FmodAudioHeader header = new(reader);
@@ -37,7 +37,7 @@ public static class FsbLoader
3737
return null;
3838
}
3939

40-
long dataStartOffset = header.SizeOfThisHeader + header.SizeOfNameTable + header.SizeOfSampleHeaders;
40+
long dataStartOffset = header.SizeOfThisHeader + header.SizeOfNameTable + header.SizeOfSampleHeaders + savedPos;
4141

4242
List<FmodSample> samples = new(header.Samples.Count);
4343
for (var i = 0; i < header.Samples.Count; i++)
@@ -61,10 +61,10 @@ public static class FsbLoader
6161
if (header.SizeOfNameTable > 0)
6262
{
6363
var nameOffsetOffset = header.SizeOfThisHeader + header.SizeOfSampleHeaders + 4 * i;
64-
reader.BaseStream.Position = nameOffsetOffset;
65-
var nameOffset = reader.ReadUInt32();
64+
reader.BaseStream.Position = nameOffsetOffset + savedPos;
65+
var nameOffset = (long)reader.ReadUInt32();
6666

67-
nameOffset += header.SizeOfThisHeader + header.SizeOfSampleHeaders;
67+
nameOffset += header.SizeOfThisHeader + header.SizeOfSampleHeaders + savedPos;
6868

6969
stream.Position = nameOffset;
7070
sample.Name = stream.ReadNullTerminatedString();

0 commit comments

Comments
 (0)