From 7ed24ce6dea9f89ae3776bd6b1c564a310aabe3f Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Sat, 16 Jan 2016 20:28:59 +0000 Subject: [PATCH] Remove legacy hashing from BagFile. --- OpenRA.Game/FileSystem/BagFile.cs | 49 +++--------------------- OpenRA.Game/FileSystem/IdxEntry.cs | 61 +++--------------------------- 2 files changed, 12 insertions(+), 98 deletions(-) diff --git a/OpenRA.Game/FileSystem/BagFile.cs b/OpenRA.Game/FileSystem/BagFile.cs index 341435230d..6fe5287a31 100644 --- a/OpenRA.Game/FileSystem/BagFile.cs +++ b/OpenRA.Game/FileSystem/BagFile.cs @@ -24,14 +24,12 @@ namespace OpenRA.FileSystem readonly string bagFilename; readonly Stream s; readonly int bagFilePriority; - readonly Dictionary index; - readonly FileSystem context; + readonly Dictionary index; public BagFile(FileSystem context, string filename, int priority) { bagFilename = filename; bagFilePriority = priority; - this.context = context; // A bag file is always accompanied with an .idx counterpart // For example: audio.bag requires the audio.idx file @@ -42,7 +40,7 @@ namespace OpenRA.FileSystem using (var indexStream = context.Open(indexFilename)) entries = new IdxReader(indexStream).Entries; - index = entries.ToDictionaryWithConflictLog(x => x.Hash, + index = entries.ToDictionaryWithConflictLog(x => x.Filename, "{0} (bag format)".F(filename), null, x => "(offs={0}, len={1})".F(x.Offset, x.Length)); @@ -52,10 +50,10 @@ namespace OpenRA.FileSystem public int Priority { get { return 1000 + bagFilePriority; } } public string Name { get { return bagFilename; } } - public Stream GetContent(uint hash) + public Stream GetContent(string filename) { IdxEntry entry; - if (!index.TryGetValue(hash, out entry)) + if (!index.TryGetValue(filename, out entry)) return null; s.Seek(entry.Offset, SeekOrigin.Begin); @@ -118,49 +116,14 @@ namespace OpenRA.FileSystem return mergedStream; } - uint? FindMatchingHash(string filename) - { - var hash = IdxEntry.HashFilename(filename, PackageHashType.CRC32); - if (index.ContainsKey(hash)) - return hash; - - // Maybe we were given a raw hash? - uint raw; - if (!uint.TryParse(filename, NumberStyles.AllowHexSpecifier, CultureInfo.InvariantCulture, out raw)) - return null; - - if ("{0:X}".F(raw) == filename && index.ContainsKey(raw)) - return raw; - - return null; - } - - public Stream GetContent(string filename) - { - var hash = FindMatchingHash(filename); - return hash.HasValue ? GetContent(hash.Value) : null; - } - public bool Exists(string filename) { - return FindMatchingHash(filename).HasValue; + return index.ContainsKey(filename); } public IEnumerable AllFileNames() { - var lookup = new Dictionary(); - if (context.Exists("global mix database.dat")) - { - var db = new XccGlobalDatabase(context.Open("global mix database.dat")); - foreach (var e in db.Entries) - { - var hash = IdxEntry.HashFilename(e, PackageHashType.CRC32); - if (!lookup.ContainsKey(hash)) - lookup.Add(hash, e); - } - } - - return index.Keys.Select(k => lookup.ContainsKey(k) ? lookup[k] : "{0:X}".F(k)); + return index.Keys; } public void Dispose() diff --git a/OpenRA.Game/FileSystem/IdxEntry.cs b/OpenRA.Game/FileSystem/IdxEntry.cs index 8b71792379..c8fb088aba 100644 --- a/OpenRA.Game/FileSystem/IdxEntry.cs +++ b/OpenRA.Game/FileSystem/IdxEntry.cs @@ -15,80 +15,31 @@ namespace OpenRA.FileSystem { public class IdxEntry { - public const string DefaultExtension = "wav"; - - public readonly uint Hash; - public readonly string Name; - public readonly string Extension; + public readonly string Filename; public readonly uint Offset; public readonly uint Length; public readonly uint SampleRate; public readonly uint Flags; public readonly uint ChunkSize; - public IdxEntry(uint hash, uint offset, uint length, uint sampleRate, uint flags, uint chuckSize) - { - Hash = hash; - Offset = offset; - Length = length; - SampleRate = sampleRate; - Flags = flags; - ChunkSize = chuckSize; - } - public IdxEntry(Stream s) { - var asciiname = s.ReadASCII(16); - - var pos = asciiname.IndexOf('\0'); + var name = s.ReadASCII(16); + var pos = name.IndexOf('\0'); if (pos != 0) - asciiname = asciiname.Substring(0, pos); + name = name.Substring(0, pos); - Name = asciiname; - Extension = DefaultExtension; + Filename = string.Concat(name, ".wav"); Offset = s.ReadUInt32(); Length = s.ReadUInt32(); SampleRate = s.ReadUInt32(); Flags = s.ReadUInt32(); ChunkSize = s.ReadUInt32(); - Hash = HashFilename(string.Concat(Name, ".", Extension), PackageHashType.CRC32); - } - - public void Write(BinaryWriter w) - { - w.Write(Name.PadRight(16, '\0')); - w.Write(Offset); - w.Write(Length); - w.Write(SampleRate); - w.Write(Flags); - w.Write(ChunkSize); } public override string ToString() { - string filename; - if (names.TryGetValue(Hash, out filename)) - return "{0} - offset 0x{1:x8} - length 0x{2:x8}".F(filename, Offset, Length); - else - return "0x{0:x8} - offset 0x{1:x8} - length 0x{2:x8}".F(Hash, Offset, Length); - } - - public static uint HashFilename(string name, PackageHashType type) - { - return PackageEntry.HashFilename(name, type); - } - - static Dictionary names = new Dictionary(); - - public static void AddStandardName(string s) - { - // RA1 and TD - var hash = HashFilename(s, PackageHashType.Classic); - names.Add(hash, s); - - // TS - var crcHash = HashFilename(s, PackageHashType.CRC32); - names.Add(crcHash, s); + return "{0} - offset 0x{1:x8} - length 0x{2:x8}".F(Filename, Offset, Length); } } }