diff --git a/SabreTools.Helper/Data/Structs.cs b/SabreTools.Helper/Data/Structs.cs index 0baf8d42..703891e7 100644 --- a/SabreTools.Helper/Data/Structs.cs +++ b/SabreTools.Helper/Data/Structs.cs @@ -6,23 +6,42 @@ namespace SabreTools.Helper /// /// Intermediate struct for holding and processing hash data /// - public struct HashData : IComparable, IEquatable + public struct HashData : IEquatable { public long Size; public string CRC; public string MD5; public string SHA1; - // Needs implementation - public int CompareTo(object obj) - { - return 0; - } - - // Needs implementation public bool Equals(HashData other) { - return true; + if ((this.Size == other.Size) && + ((String.IsNullOrEmpty(this.CRC) || String.IsNullOrEmpty(other.CRC)) || this.CRC == other.CRC) && + ((String.IsNullOrEmpty(this.MD5) || String.IsNullOrEmpty(other.MD5)) || this.MD5 == other.MD5) && + ((String.IsNullOrEmpty(this.SHA1) || String.IsNullOrEmpty(other.SHA1)) || this.SHA1 == other.SHA1)) + { + return true; + } + + return false; + } + + public bool Equals(HashData other, bool IsDisk) + { + if (IsDisk) + { + HashData newthis = this; + newthis.Size = Constants.SizeZero; + newthis.CRC = Constants.CRCZero; + + HashData newother = other; + newother.Size = Constants.SizeZero; + newother.CRC = Constants.CRCZero; + + return newthis.Equals(newother); + } + + return this.Equals(other); } } diff --git a/SabreTools.Helper/Tools/RomTools.cs b/SabreTools.Helper/Tools/RomTools.cs index 20ecf11b..a8799dd7 100644 --- a/SabreTools.Helper/Tools/RomTools.cs +++ b/SabreTools.Helper/Tools/RomTools.cs @@ -251,17 +251,11 @@ namespace SabreTools.Helper if (rom.Type == "rom" && lastrom.Type == "rom") { - dupefound = ((rom.HashData.Size == lastrom.HashData.Size) && - ((String.IsNullOrEmpty(rom.HashData.CRC) || String.IsNullOrEmpty(lastrom.HashData.CRC)) || rom.HashData.CRC == lastrom.HashData.CRC) && - ((String.IsNullOrEmpty(rom.HashData.MD5) || String.IsNullOrEmpty(lastrom.HashData.MD5)) || rom.HashData.MD5 == lastrom.HashData.MD5) && - ((String.IsNullOrEmpty(rom.HashData.SHA1) || String.IsNullOrEmpty(lastrom.HashData.SHA1)) || rom.HashData.SHA1 == lastrom.HashData.SHA1) - ); + dupefound = rom.HashData.Equals(lastrom.HashData, false); } else if (rom.Type == "disk" && lastrom.Type == "disk") { - dupefound = (((String.IsNullOrEmpty(rom.HashData.MD5) || String.IsNullOrEmpty(lastrom.HashData.MD5)) || rom.HashData.MD5 == lastrom.HashData.MD5) && - ((String.IsNullOrEmpty(rom.HashData.SHA1) || String.IsNullOrEmpty(lastrom.HashData.SHA1)) || rom.HashData.SHA1 == lastrom.HashData.SHA1) - ); + dupefound = rom.HashData.Equals(lastrom.HashData, true); } // More wonderful SHA-1 logging that has to be done