diff --git a/ROMVault2/SupportedFiles/Files/UnCompFiles.cs b/ROMVault2/SupportedFiles/Files/UnCompFiles.cs index 11bc1fb..c0f157b 100644 --- a/ROMVault2/SupportedFiles/Files/UnCompFiles.cs +++ b/ROMVault2/SupportedFiles/Files/UnCompFiles.cs @@ -26,11 +26,7 @@ namespace ROMVault2.SupportedFiles.Files bSHA1 = null; crc = null; - Stream ds; - int errorCode = IO.FileStream.OpenFileRead(filename, out ds); - if (errorCode != 0) - return errorCode; - + Stream ds=null; CRC32Hash crc32 = new CRC32Hash(); MD5 md5 = null; @@ -38,24 +34,39 @@ namespace ROMVault2.SupportedFiles.Files SHA1 sha1 = null; if (testDeep) sha1 = SHA1.Create(); - long sizetogo = ds.Length; - - while (sizetogo > 0) + try { - int sizenow = sizetogo > Buffersize ? Buffersize : (int)sizetogo; + int errorCode = IO.FileStream.OpenFileRead(filename, out ds); + if (errorCode != 0) + return errorCode; - ds.Read(Buffer, 0, sizenow); - crc32.TransformBlock(Buffer, 0, sizenow, null, 0); - if (testDeep) md5.TransformBlock(Buffer, 0, sizenow, null, 0); - if (testDeep) sha1.TransformBlock(Buffer, 0, sizenow, null, 0); - sizetogo -= sizenow; + long sizetogo = ds.Length; + + while (sizetogo > 0) + { + int sizenow = sizetogo > Buffersize ? Buffersize : (int)sizetogo; + + ds.Read(Buffer, 0, sizenow); + crc32.TransformBlock(Buffer, 0, sizenow, null, 0); + if (testDeep) md5.TransformBlock(Buffer, 0, sizenow, null, 0); + if (testDeep) sha1.TransformBlock(Buffer, 0, sizenow, null, 0); + sizetogo -= sizenow; + } + + crc32.TransformFinalBlock(Buffer, 0, 0); + if (testDeep) md5.TransformFinalBlock(Buffer, 0, 0); + if (testDeep) sha1.TransformFinalBlock(Buffer, 0, 0); + + ds.Close(); + } + catch + { + if (ds != null) + ds.Close(); + + return 0x17; } - crc32.TransformFinalBlock(Buffer, 0, 0); - if (testDeep) md5.TransformFinalBlock(Buffer, 0, 0); - if (testDeep) sha1.TransformFinalBlock(Buffer, 0, 0); - - ds.Close(); crc = crc32.Hash; if (testDeep) bMD5 = md5.Hash;