Skip to content

Commit

Permalink
Merge pull request #3342 from baxtor/setup-z-fix
Browse files Browse the repository at this point in the history
Fixes #2216 InstallShield .Z package decompression
  • Loading branch information
chrisforbes committed May 26, 2013
2 parents 33376b5 + 629fe95 commit 2958c80
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 7 deletions.
1 change: 1 addition & 0 deletions AUTHORS
Expand Up @@ -12,6 +12,7 @@ The OpenRA developers are:
Also thanks to:
* Akseli Virtanen (RAGEQUIT)
* Andrew Riedi
* Andreas Beck (baxtor)
* Barnaby Smith (mvi)
* Bellator
* Bugra Cuhadaroglu (BugraC)
Expand Down
21 changes: 14 additions & 7 deletions OpenRA.FileFormats/Filesystem/InstallShieldPackage.cs
Expand Up @@ -49,11 +49,20 @@ public InstallShieldPackage(string filename, int priority)
// Parse the directory list
s.Seek(TOCAddress, SeekOrigin.Begin);
BinaryReader TOCreader = new BinaryReader(s);

var fileCountInDirs = new List<uint>();
// Parse directories
for (var i = 0; i < DirCount; i++)
ParseDirectory(TOCreader);
fileCountInDirs.Add(ParseDirectory(TOCreader));

// Parse files
foreach (var fileCount in fileCountInDirs)
for (var i = 0; i < fileCount; i++)
ParseFile(reader);

}

void ParseDirectory(BinaryReader reader)
uint ParseDirectory(BinaryReader reader)
{
// Parse directory header
var FileCount = reader.ReadUInt16();
Expand All @@ -63,10 +72,7 @@ void ParseDirectory(BinaryReader reader)

// Skip to the end of the chunk
reader.ReadBytes(ChunkSize - NameLength - 6);

// Parse files
for (var i = 0; i < FileCount; i++)
ParseFile(reader);
return FileCount;
}

uint AccumulatedData = 0;
Expand All @@ -81,7 +87,8 @@ void ParseFile(BinaryReader reader)
var FileName = new String(reader.ReadChars(NameLength));

var hash = PackageEntry.HashFilename(FileName, PackageHashType.Classic);
index.Add(hash, new PackageEntry(hash, AccumulatedData, CompressedSize));
if(!index.ContainsKey(hash))
index.Add(hash, new PackageEntry(hash,AccumulatedData, CompressedSize));
filenames.Add(FileName);
AccumulatedData += CompressedSize;

Expand Down

0 comments on commit 2958c80

Please sign in to comment.