[ArchiveTools] Fix odd information from certain files

This commit is contained in:
Matt Nadareski
2017-03-16 20:39:05 -07:00
parent a5d09eadc6
commit 0819fc1397

View File

@@ -261,13 +261,26 @@ namespace SabreTools.Helper.Tools
FileStream writeStream = FileTools.TryCreate(Path.Combine(outDir, zf.Entries[i].FileName)); FileStream writeStream = FileTools.TryCreate(Path.Combine(outDir, zf.Entries[i].FileName));
byte[] ibuffer = new byte[_bufferSize]; // If the stream is smaller than the buffer, just run one loop through to avoid issues
int ilen; if (streamsize < _bufferSize)
while ((ilen = readStream.Read(ibuffer, 0, _bufferSize)) > 0)
{ {
byte[] ibuffer = new byte[streamsize];
int ilen = readStream.Read(ibuffer, 0, (int)streamsize);
writeStream.Write(ibuffer, 0, ilen); writeStream.Write(ibuffer, 0, ilen);
writeStream.Flush(); writeStream.Flush();
} }
// Otherwise, we do the normal loop
else
{
int realBufferSize = (streamsize < _bufferSize ? (int)streamsize : _bufferSize);
byte[] ibuffer = new byte[realBufferSize];
int ilen;
while ((ilen = readStream.Read(ibuffer, 0, realBufferSize)) > 0)
{
writeStream.Write(ibuffer, 0, ilen);
writeStream.Flush();
}
}
zr = zf.CloseReadStream(); zr = zf.CloseReadStream();
writeStream.Dispose(); writeStream.Dispose();
@@ -443,14 +456,26 @@ namespace SabreTools.Helper.Tools
realEntry = zf.Entries[i].FileName; realEntry = zf.Entries[i].FileName;
zr = zf.OpenReadStream(i, false, out Stream readStream, out ulong streamsize, out SabreTools.Helper.Data.CompressionMethod cm, out uint lastMod); zr = zf.OpenReadStream(i, false, out Stream readStream, out ulong streamsize, out SabreTools.Helper.Data.CompressionMethod cm, out uint lastMod);
// Write the file out // If the stream is smaller than the buffer, just run one loop through to avoid issues
byte[] zbuffer = new byte[_bufferSize]; if (streamsize < _bufferSize)
int zlen;
while ((zlen = readStream.Read(zbuffer, 0, _bufferSize)) > 0)
{ {
ms.Write(zbuffer, 0, zlen); byte[] ibuffer = new byte[streamsize];
int ilen = readStream.Read(ibuffer, 0, (int)streamsize);
ms.Write(ibuffer, 0, ilen);
ms.Flush(); ms.Flush();
} }
// Otherwise, we do the normal loop
else
{
int realBufferSize = (streamsize < _bufferSize ? (int)streamsize : _bufferSize);
byte[] ibuffer = new byte[realBufferSize];
int ilen;
while ((ilen = readStream.Read(ibuffer, 0, realBufferSize)) > 0)
{
ms.Write(ibuffer, 0, ilen);
ms.Flush();
}
}
zr = zf.CloseReadStream(); zr = zf.CloseReadStream();
} }
@@ -893,13 +918,26 @@ namespace SabreTools.Helper.Tools
{ {
MemoryStream entryStream = new MemoryStream(); MemoryStream entryStream = new MemoryStream();
byte[] ibuffer = new byte[_bufferSize]; // If the stream is smaller than the buffer, just run one loop through to avoid issues
int ilen; if (streamsize < _bufferSize)
while ((ilen = readStream.Read(ibuffer, 0, _bufferSize)) > 0)
{ {
byte[] ibuffer = new byte[streamsize];
int ilen = readStream.Read(ibuffer, 0, (int)streamsize);
entryStream.Write(ibuffer, 0, ilen); entryStream.Write(ibuffer, 0, ilen);
entryStream.Flush(); entryStream.Flush();
} }
// Otherwise, we do the normal loop
else
{
int realBufferSize = (streamsize < _bufferSize ? (int)streamsize : _bufferSize);
byte[] ibuffer = new byte[realBufferSize];
int ilen;
while ((ilen = readStream.Read(ibuffer, 0, realBufferSize)) > 0)
{
entryStream.Write(ibuffer, 0, ilen);
entryStream.Flush();
}
}
zr = zf.CloseReadStream(); zr = zf.CloseReadStream();
// Get and add the extended Rom information // Get and add the extended Rom information