diff --git a/BurnOutSharp/External/libmspack/CAB/DataBlockHeader.cs b/BurnOutSharp/External/libmspack/CAB/DataBlockHeader.cs deleted file mode 100644 index 42471e8a..00000000 --- a/BurnOutSharp/External/libmspack/CAB/DataBlockHeader.cs +++ /dev/null @@ -1,58 +0,0 @@ -/* This file is part of libmspack. - * (C) 2003-2018 Stuart Caie. - * - * libmspack is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License (LGPL) version 2.1 - * - * For further details, see the file COPYING.LIB distributed with libmspack - */ - -using System; - -namespace LibMSPackSharp.CAB -{ - public class DataBlockHeader - { - #region Fields - - /// - /// CRC32 checksum of the data - /// - public uint Checksum { get; private set; } - - /// - /// Compressed size of the data - /// - public ushort CompressedSize { get; private set; } - - /// - /// Uncompressed size of the data - /// - public ushort UncompressedSize { get; private set; } - - #endregion - - /// - /// Private constructor - /// - private DataBlockHeader() { } - - /// - /// Constructor - /// - public static Error Create(byte[] data, out DataBlockHeader header) - { - header = null; - if (data == null || data.Length < 0x08) - return Error.MSPACK_ERR_READ; - - header = new DataBlockHeader(); - - header.Checksum = BitConverter.ToUInt32(data, 0x00); - header.CompressedSize = BitConverter.ToUInt16(data, 0x04); - header.UncompressedSize = BitConverter.ToUInt16(data, 0x06); - - return Error.MSPACK_ERR_OK; - } - } -} diff --git a/BurnOutSharp/External/libmspack/CAB/Decompressor.cs b/BurnOutSharp/External/libmspack/CAB/Decompressor.cs index f5e1677a..4df5b439 100644 --- a/BurnOutSharp/External/libmspack/CAB/Decompressor.cs +++ b/BurnOutSharp/External/libmspack/CAB/Decompressor.cs @@ -23,8 +23,8 @@ namespace LibMSPackSharp.CAB /// /// All fields are READ ONLY. /// - /// - /// + /// + /// public class Decompressor { /// diff --git a/BurnOutSharp/External/libmspack/CAB/Implementation.cs b/BurnOutSharp/External/libmspack/CAB/Implementation.cs index b11b2367..7c6b1deb 100644 --- a/BurnOutSharp/External/libmspack/CAB/Implementation.cs +++ b/BurnOutSharp/External/libmspack/CAB/Implementation.cs @@ -142,7 +142,7 @@ namespace LibMSPackSharp.CAB /// public static CabinetImpl Open(Decompressor d, string filename) { - DecompressorImpl self = (DecompressorImpl)d; + DecompressorImpl self = d as DecompressorImpl; CabinetImpl cab = null; if (self == null) @@ -181,7 +181,7 @@ namespace LibMSPackSharp.CAB /// public static void Close(Decompressor d, Cabinet origcab) { - DecompressorImpl self = (DecompressorImpl)d; + DecompressorImpl self = d as DecompressorImpl; FolderData dat, ndat; Cabinet cab, ncab; @@ -222,7 +222,7 @@ namespace LibMSPackSharp.CAB } // Free folder data segments - for (dat = ((FolderImpl)fol).Data.Next; dat != null; dat = ndat) + for (dat = (fol as FolderImpl).Data.Next; dat != null; dat = ndat) { ndat = dat.Next; sys.Free(dat); @@ -472,7 +472,7 @@ namespace LibMSPackSharp.CAB file.Folder = ifol; // Set "merge next" pointer - fol = (FolderImpl)ifol; + fol = ifol as FolderImpl; if (fol.MergeNext == null) fol.MergeNext = file; } @@ -483,7 +483,7 @@ namespace LibMSPackSharp.CAB file.Folder = cab.Folders; // Set "merge prev" pointer - fol = (FolderImpl)file.Folder; + fol = file.Folder as FolderImpl; if (fol.MergePrev == null) fol.MergePrev = file; } @@ -594,7 +594,7 @@ namespace LibMSPackSharp.CAB /// public static Cabinet Search(Decompressor d, string filename) { - DecompressorImpl self = (DecompressorImpl)d; + DecompressorImpl self = d as DecompressorImpl; if (self == null) return null; @@ -839,7 +839,7 @@ namespace LibMSPackSharp.CAB /// public static Error Merge(Decompressor d, Cabinet lcab, Cabinet rcab) { - DecompressorImpl self = (DecompressorImpl)d; + DecompressorImpl self = d as DecompressorImpl; FolderData data, ndata; FolderImpl lfol, rfol; @@ -891,11 +891,11 @@ namespace LibMSPackSharp.CAB sys.Message(null, "WARNING; merged cabinets with odd order."); // Merging the last folder in lcab with the first folder in rcab - lfol = (FolderImpl)lcab.Folders; - rfol = (FolderImpl)rcab.Folders; + lfol = lcab.Folders as FolderImpl; + rfol = rcab.Folders as FolderImpl; while (lfol.Next != null) { - lfol = (FolderImpl)lfol.Next; + lfol = lfol.Next as FolderImpl; } // Do we need to merge folders? @@ -1086,7 +1086,7 @@ namespace LibMSPackSharp.CAB /// public static Error Extract(Decompressor d, InternalFile file, string filename) { - DecompressorImpl self = (DecompressorImpl)d; + DecompressorImpl self = d as DecompressorImpl; object fh; if (self == null) @@ -1095,7 +1095,7 @@ namespace LibMSPackSharp.CAB return self.Error = Error.MSPACK_ERR_ARGS; SystemImpl sys = self.System; - FolderImpl fol = (FolderImpl)file.Folder; + FolderImpl fol = file.Folder as FolderImpl; // If offset is beyond 2GB, nothing can be extracted if (file.Offset > CAB_LENGTHMAX) @@ -1278,19 +1278,19 @@ namespace LibMSPackSharp.CAB switch (self.State.CompressionType & CompressionType.COMPTYPE_MASK) { case CompressionType.COMPTYPE_NONE: - NoneFree((NoneState)self.State.DecompressorState); + NoneFree(self.State.DecompressorState); break; case CompressionType.COMPTYPE_MSZIP: - MSZIP.Free((MSZIPDStream)self.State.DecompressorState); + MSZIP.Free(self.State.DecompressorState); break; case CompressionType.COMPTYPE_QUANTUM: - QTM.Free((QTMDStream)self.State.DecompressorState); + QTM.Free(self.State.DecompressorState); break; case CompressionType.COMPTYPE_LZX: - LZX.Free((LZXDStream)self.State.DecompressorState); + LZX.Free(self.State.DecompressorState); break; } @@ -1309,7 +1309,7 @@ namespace LibMSPackSharp.CAB /// private static int SysRead(object file, byte[] buffer, int pointer, int bytes) { - DecompressorImpl self = (DecompressorImpl)file; + DecompressorImpl self = file as DecompressorImpl; SystemImpl sys = self.System; int avail, todo, outlen = 0; @@ -1370,7 +1370,7 @@ namespace LibMSPackSharp.CAB { // Special LZX hack -- on the last block, inform LZX of the // size of the output data stream. - LZX.SetOutputLength((LZXDStream)self.State.DecompressorState, self.State.Outlen); + LZX.SetOutputLength(self.State.DecompressorState as LZXDStream, self.State.Outlen); } } } @@ -1387,7 +1387,7 @@ namespace LibMSPackSharp.CAB /// private static int SysWrite(object file, byte[] buffer, int pointer, int bytes) { - DecompressorImpl self = (DecompressorImpl)file; + DecompressorImpl self = file as DecompressorImpl; self.State.Offset += (uint)bytes; if (self.State.OutputFileHandle != null) return self.System.Write(self.State.OutputFileHandle, buffer, pointer, bytes); @@ -1576,7 +1576,7 @@ namespace LibMSPackSharp.CAB internal static void NoneFree(object s) { - NoneState state = (NoneState)s; + NoneState state = s as NoneState; if (state != null) { SystemImpl sys = state.Sys; @@ -1594,7 +1594,7 @@ namespace LibMSPackSharp.CAB /// public static Error Param(Decompressor d, Parameters param, int value) { - DecompressorImpl self = (DecompressorImpl)d; + DecompressorImpl self = d as DecompressorImpl; if (self == null) return Error.MSPACK_ERR_ARGS; @@ -1638,7 +1638,7 @@ namespace LibMSPackSharp.CAB /// public static Error LastError(Decompressor d) { - DecompressorImpl self = (DecompressorImpl)d; + DecompressorImpl self = d as DecompressorImpl; return (self != null) ? self.Error : Error.MSPACK_ERR_ARGS; } diff --git a/BurnOutSharp/External/libmspack/CHM/Implementation.cs b/BurnOutSharp/External/libmspack/CHM/Implementation.cs index 3f5f990e..2b114e3f 100644 --- a/BurnOutSharp/External/libmspack/CHM/Implementation.cs +++ b/BurnOutSharp/External/libmspack/CHM/Implementation.cs @@ -144,7 +144,7 @@ namespace LibMSPackSharp.CHM /// private static Header RealOpen(Decompressor d, string filename, bool entire) { - DecompressorImpl self = (DecompressorImpl)d; + DecompressorImpl self = d as DecompressorImpl; Header chm = null; if (d == null) @@ -194,7 +194,7 @@ namespace LibMSPackSharp.CHM /// public static void Close(Decompressor d, Header chm) { - DecompressorImpl self = (DecompressorImpl)d; + DecompressorImpl self = d as DecompressorImpl; DecompressFile fi, nfi; uint i; @@ -529,7 +529,7 @@ namespace LibMSPackSharp.CHM fi.Next = null; fi.Filename = Encoding.UTF8.GetString(chunk, name, (int)nameLen) + "\0"; - fi.Section = (section == 0) ? (Section)chm.Sec0 : (Section)chm.Sec1; + fi.Section = (section == 0) ? chm.Sec0 as Section : chm.Sec1 as Section; fi.Offset = offset; fi.Length = length; @@ -590,7 +590,7 @@ namespace LibMSPackSharp.CHM /// public static Error FastFind(Decompressor d, Header chm, string filename, DecompressFile f_ptr) { - DecompressorImpl self = (DecompressorImpl)d; + DecompressorImpl self = d as DecompressorImpl; SystemImpl sys; object fh; @@ -682,7 +682,7 @@ namespace LibMSPackSharp.CHM sec = (uint)((sec << 7) | (chunk[p] & 0x7F)); } while ((chunk[p++] & 0x80) != 0); - f_ptr.Section = (sec == 0) ? (Section)chm.Sec0 : (Section)chm.Sec1; + f_ptr.Section = sec == 0 ? chm.Sec0 as Section : chm.Sec1 as Section; // READ_ENCINT(f_ptr.Offset) f_ptr.Offset = 0; @@ -996,7 +996,7 @@ namespace LibMSPackSharp.CHM /// public static Error Extract(Decompressor d, DecompressFile file, string filename) { - DecompressorImpl self = (DecompressorImpl)d; + DecompressorImpl self = d as DecompressorImpl; if (self == null) return Error.MSPACK_ERR_ARGS; @@ -1154,7 +1154,7 @@ namespace LibMSPackSharp.CHM /// private static int SysWrite(object file, byte[] buffer, int offset, int bytes) { - DecompressorImpl self = (DecompressorImpl)file; + DecompressorImpl self = file as DecompressorImpl; self.State.Offset += bytes; if (self.State.OutputFileHandle != null) return self.System.Write(self.State.OutputFileHandle, buffer, offset, bytes); @@ -1175,10 +1175,9 @@ namespace LibMSPackSharp.CHM { int window_size, window_bits, reset_interval, entry; SystemImpl sys = self.System; - MSCompressedSection sec; byte[] data; - sec = (MSCompressedSection)file.Section; + MSCompressedSection sec = file.Section as MSCompressedSection; // Ensure we have a mscompressed content section DecompressFile contentFile = null; @@ -1531,7 +1530,7 @@ namespace LibMSPackSharp.CHM /// public static Error LastError(Decompressor d) { - DecompressorImpl self = (DecompressorImpl)d; + DecompressorImpl self = d as DecompressorImpl; return (self != null ? self.Error : Error.MSPACK_ERR_ARGS); } diff --git a/BurnOutSharp/External/libmspack/Compression/DES.cs b/BurnOutSharp/External/libmspack/Compression/DES.cs index 46e49ed9..384ac8c6 100644 --- a/BurnOutSharp/External/libmspack/Compression/DES.cs +++ b/BurnOutSharp/External/libmspack/Compression/DES.cs @@ -9,7 +9,7 @@ namespace LibMSPackSharp.Compression { - public class des + public class DES { } } diff --git a/BurnOutSharp/External/libmspack/Compression/LZX.cs b/BurnOutSharp/External/libmspack/Compression/LZX.cs index 1946c7c2..550a12df 100644 --- a/BurnOutSharp/External/libmspack/Compression/LZX.cs +++ b/BurnOutSharp/External/libmspack/Compression/LZX.cs @@ -426,7 +426,7 @@ namespace LibMSPackSharp.Compression /// an error code, or MSPACK_ERR_OK if successful public static Error Decompress(object o, long outBytes) { - LZXDStream lzx = (LZXDStream)o; + LZXDStream lzx = o as LZXDStream; if (lzx == null) return Error.MSPACK_ERR_ARGS; @@ -1055,8 +1055,9 @@ namespace LibMSPackSharp.Compression /// system.free() using the system pointer given in lzxd_init(). /// /// LZX decompression state to free. - public static void Free(LZXDStream lzx) + public static void Free(object s) { + LZXDStream lzx = s as LZXDStream; if (lzx != null) { SystemImpl sys = lzx.Sys; diff --git a/BurnOutSharp/External/libmspack/Compression/MSZIP.cs b/BurnOutSharp/External/libmspack/Compression/MSZIP.cs index ad441606..61403587 100644 --- a/BurnOutSharp/External/libmspack/Compression/MSZIP.cs +++ b/BurnOutSharp/External/libmspack/Compression/MSZIP.cs @@ -162,7 +162,7 @@ namespace LibMSPackSharp.Compression /// public static Error Decompress(object o, long out_bytes) { - MSZIPDStream zip = (MSZIPDStream)o; + MSZIPDStream zip = o as MSZIPDStream; if (zip == null) return Error.MSPACK_ERR_ARGS; @@ -328,8 +328,9 @@ namespace LibMSPackSharp.Compression /// /// - calls system.free() using the system pointer given in mszipd_init() /// - public static void Free(MSZIPDStream zip) + public static void Free(object s) { + MSZIPDStream zip = s as MSZIPDStream; if (zip != null) { SystemImpl sys = zip.Sys; diff --git a/BurnOutSharp/External/libmspack/Compression/QTM.cs b/BurnOutSharp/External/libmspack/Compression/QTM.cs index d649355c..463cf025 100644 --- a/BurnOutSharp/External/libmspack/Compression/QTM.cs +++ b/BurnOutSharp/External/libmspack/Compression/QTM.cs @@ -171,7 +171,7 @@ namespace LibMSPackSharp.Compression /// public static Error Decompress(object o, long out_bytes) { - QTMDStream qtm = (QTMDStream)o; + QTMDStream qtm = o as QTMDStream; if (qtm == null) return Error.MSPACK_ERR_ARGS; @@ -466,8 +466,9 @@ namespace LibMSPackSharp.Compression /// Frees all state associated with a Quantum data stream /// - calls system.free() using the system pointer given in qtmd_init() /// - public static void Free(QTMDStream qtm) + public static void Free(object s) { + QTMDStream qtm = s as QTMDStream; if (qtm != null) { SystemImpl sys = qtm.Sys; @@ -489,28 +490,28 @@ namespace LibMSPackSharp.Compression ref int i_ptr, ref int i_end, ref uint bit_buffer, ref uint bits_left) { range = (uint)(((high - low) & 0xFFFF) + 1); - symf = (ushort)(((((current - low + 1) * model.Syms[0].CumFreq) - 1) / range) & 0xFFFF); + symf = (ushort)(((((current - low + 1) * model.Syms[0].CumulativeFrequency) - 1) / range) & 0xFFFF); int i; for (i = 1; i < model.Entries; i++) { - if (model.Syms[i].CumFreq <= symf) + if (model.Syms[i].CumulativeFrequency <= symf) break; } var = model.Syms[i - 1].Sym; range = (ushort)((high - low) + 1); - symf = model.Syms[0].CumFreq; - high = (ushort)(low + ((model.Syms[i - 1].CumFreq * range) / symf) - 1); - low = (ushort)(low + ((model.Syms[i].CumFreq * range) / symf)); + symf = model.Syms[0].CumulativeFrequency; + high = (ushort)(low + ((model.Syms[i - 1].CumulativeFrequency * range) / symf) - 1); + low = (ushort)(low + ((model.Syms[i].CumulativeFrequency * range) / symf)); do { - model.Syms[--i].CumFreq += 8; + model.Syms[--i].CumulativeFrequency += 8; } while (i > 0); - if (model.Syms[0].CumFreq > 3800) + if (model.Syms[0].CumulativeFrequency > 3800) UpdateModel(model); while (true) @@ -548,10 +549,10 @@ namespace LibMSPackSharp.Compression for (i = model.Entries - 1; i >= 0; i--) { /* -1, not -2; the 0 entry saves this */ - model.Syms[i].CumFreq >>= 1; - if (model.Syms[i].CumFreq <= model.Syms[i + 1].CumFreq) + model.Syms[i].CumulativeFrequency >>= 1; + if (model.Syms[i].CumulativeFrequency <= model.Syms[i + 1].CumulativeFrequency) { - model.Syms[i].CumFreq = (ushort)(model.Syms[i + 1].CumFreq + 1); + model.Syms[i].CumulativeFrequency = (ushort)(model.Syms[i + 1].CumulativeFrequency + 1); } } } @@ -563,9 +564,9 @@ namespace LibMSPackSharp.Compression // No -1, want to include the 0 entry // This converts CumFreqs into frequencies, then shifts right - model.Syms[i].CumFreq -= model.Syms[i + 1].CumFreq; - model.Syms[i].CumFreq++; // Avoid losing things entirely - model.Syms[i].CumFreq >>= 1; + model.Syms[i].CumulativeFrequency -= model.Syms[i + 1].CumulativeFrequency; + model.Syms[i].CumulativeFrequency++; // Avoid losing things entirely + model.Syms[i].CumulativeFrequency >>= 1; } // Now sort by frequencies, decreasing order -- this must be an @@ -575,7 +576,7 @@ namespace LibMSPackSharp.Compression { for (j = i + 1; j < model.Entries; j++) { - if (model.Syms[i].CumFreq < model.Syms[j].CumFreq) + if (model.Syms[i].CumulativeFrequency < model.Syms[j].CumulativeFrequency) { tmp = model.Syms[i]; model.Syms[i] = model.Syms[j]; @@ -587,7 +588,7 @@ namespace LibMSPackSharp.Compression // Then convert frequencies back to CumFreq for (i = model.Entries - 1; i >= 0; i--) { - model.Syms[i].CumFreq += model.Syms[i + 1].CumFreq; + model.Syms[i].CumulativeFrequency += model.Syms[i + 1].CumulativeFrequency; } } } @@ -604,7 +605,7 @@ namespace LibMSPackSharp.Compression syms[i].Sym = (ushort)(start + i); // Current frequency of that symbol - syms[i].CumFreq = (ushort)(len - i); + syms[i].CumulativeFrequency = (ushort)(len - i); } } } diff --git a/BurnOutSharp/External/libmspack/Compression/QTMDModelSym.cs b/BurnOutSharp/External/libmspack/Compression/QTMDModelSym.cs index b01da6e6..75af0fda 100644 --- a/BurnOutSharp/External/libmspack/Compression/QTMDModelSym.cs +++ b/BurnOutSharp/External/libmspack/Compression/QTMDModelSym.cs @@ -16,6 +16,6 @@ namespace LibMSPackSharp.Compression { public ushort Sym { get; set; } - public ushort CumFreq { get; set; } + public ushort CumulativeFrequency { get; set; } } } diff --git a/BurnOutSharp/External/libmspack/KWAJ/Implementation.cs b/BurnOutSharp/External/libmspack/KWAJ/Implementation.cs index 36214146..448f659f 100644 --- a/BurnOutSharp/External/libmspack/KWAJ/Implementation.cs +++ b/BurnOutSharp/External/libmspack/KWAJ/Implementation.cs @@ -109,7 +109,7 @@ namespace LibMSPackSharp.KWAJ /// public static Header Open(Decompressor d, string filename) { - DecompressorImpl self = (DecompressorImpl)d; + DecompressorImpl self = d as DecompressorImpl; if (self == null) return null; @@ -151,10 +151,10 @@ namespace LibMSPackSharp.KWAJ /// public static void Close(Decompressor d, Header hdr) { - DecompressorImpl self = (DecompressorImpl)d; - HeaderImpl hdr_p = (HeaderImpl)hdr; + DecompressorImpl self = d as DecompressorImpl; + HeaderImpl hdr_p = hdr as HeaderImpl; - if (self == null || self.System == null) + if (self?.System == null || hdr_p == null) return; // Close the file handle associated @@ -319,14 +319,16 @@ namespace LibMSPackSharp.KWAJ /// public static Error Extract(Decompressor d, Header hdr, string filename) { - DecompressorImpl self = (DecompressorImpl)d; + DecompressorImpl self = d as DecompressorImpl; if (self == null) return Error.MSPACK_ERR_ARGS; if (hdr == null) return self.Error = Error.MSPACK_ERR_ARGS; SystemImpl sys = self.System; - object fh = ((HeaderImpl)hdr).FileHandle; + object fh = (hdr as HeaderImpl)?.FileHandle; + if (fh == null) + return Error.MSPACK_ERR_ARGS; // Seek to the compressed data if (sys.Seek(fh, hdr.DataOffset, SeekMode.MSPACK_SYS_SEEK_START)) @@ -405,7 +407,7 @@ namespace LibMSPackSharp.KWAJ /// public static Error Decompress(Decompressor d, string input, string output) { - DecompressorImpl self = (DecompressorImpl)d; + DecompressorImpl self = d as DecompressorImpl; if (self == null) return Error.MSPACK_ERR_ARGS; @@ -427,7 +429,7 @@ namespace LibMSPackSharp.KWAJ /// public static Error LastError(Decompressor d) { - DecompressorImpl self = (DecompressorImpl)d; + DecompressorImpl self = d as DecompressorImpl; return (self != null) ? self.Error : Error.MSPACK_ERR_ARGS; } diff --git a/BurnOutSharp/External/libmspack/Library.cs b/BurnOutSharp/External/libmspack/Library.cs index 31b5ed33..f24e5c80 100644 --- a/BurnOutSharp/External/libmspack/Library.cs +++ b/BurnOutSharp/External/libmspack/Library.cs @@ -196,7 +196,7 @@ namespace LibMSPackSharp /// the to destroy public static void DestroyCABDecompressor(CAB.Decompressor d) { - CAB.DecompressorImpl self = (CAB.DecompressorImpl)d; + CAB.DecompressorImpl self = d as CAB.DecompressorImpl; if (self != null) { SystemImpl sys = self.System; @@ -269,7 +269,7 @@ namespace LibMSPackSharp /// the to destroy public static void DestroyCHMDecompressor(CHM.Decompressor d) { - CHM.DecompressorImpl self = (CHM.DecompressorImpl)d; + CHM.DecompressorImpl self = d as CHM.DecompressorImpl; if (self != null) { SystemImpl sys = self.System; @@ -429,7 +429,7 @@ namespace LibMSPackSharp /// the to destroy public static void DestroySZDDDecompressor(SZDD.Decompressor d) { - SZDD.DecompressorImpl self = (SZDD.DecompressorImpl)d; + SZDD.DecompressorImpl self = d as SZDD.DecompressorImpl; if (self != null) { SystemImpl sys = self.System; @@ -491,7 +491,7 @@ namespace LibMSPackSharp /// the to destroy public static void DestroyKWAJDecompressor(KWAJ.Decompressor d) { - KWAJ.DecompressorImpl self = (KWAJ.DecompressorImpl)d; + KWAJ.DecompressorImpl self = d as KWAJ.DecompressorImpl; if (self != null) { SystemImpl sys = self.System; @@ -551,7 +551,7 @@ namespace LibMSPackSharp /// the to destroy public static void DestroyOABDecompressor(OAB.Decompressor d) { - OAB.DecompressorImpl self = (OAB.DecompressorImpl)d; + OAB.DecompressorImpl self = d as OAB.DecompressorImpl; if (self != null) { SystemImpl sys = self.System; diff --git a/BurnOutSharp/External/libmspack/OAB/Implementation.cs b/BurnOutSharp/External/libmspack/OAB/Implementation.cs index f0a2fb7f..b185bb4c 100644 --- a/BurnOutSharp/External/libmspack/OAB/Implementation.cs +++ b/BurnOutSharp/External/libmspack/OAB/Implementation.cs @@ -62,7 +62,10 @@ namespace LibMSPackSharp.OAB private static int SysRead(object baseFile, byte[] buf, int pointer, int size) { - InternalFile file = (InternalFile)baseFile; + InternalFile file = baseFile as InternalFile; + if (file == null) + return 0; + int bytes_read; if (size > file.Available) @@ -82,7 +85,10 @@ namespace LibMSPackSharp.OAB private static int SysWrite(object baseFile, byte[] buf, int pointer, int size) { - InternalFile file = (InternalFile)baseFile; + InternalFile file = baseFile as InternalFile; + if (file == null) + return 0; + int bytes_written = file.OrigSys.Write(file.OrigFile, buf, pointer, size); if (bytes_written > 0) @@ -97,7 +103,7 @@ namespace LibMSPackSharp.OAB public static Error Decompress(Decompressor d, string input, string output) { - DecompressorImpl self = (DecompressorImpl)d; + DecompressorImpl self = d as DecompressorImpl; byte[] hdrbuf = new byte[oabhead_SIZEOF]; LZXDStream lzx = null; Error ret = Error.MSPACK_ERR_OK; @@ -332,7 +338,7 @@ namespace LibMSPackSharp.OAB public static Error DecompressIncremental(Decompressor d, string input, string basePath, string output) { - DecompressorImpl self = (DecompressorImpl)d; + DecompressorImpl self = d as DecompressorImpl; byte[] hdrbuf = new byte[patchhead_SIZEOF]; LZXDStream lzx = null; int window_bits; @@ -604,7 +610,7 @@ namespace LibMSPackSharp.OAB public static Error Param(Decompressor d, Parameters param, int value) { - DecompressorImpl self = (DecompressorImpl)d; + DecompressorImpl self = d as DecompressorImpl; if (self != null && param == Parameters.MSOABD_PARAM_DECOMPBUF && value >= 16) { // must be at least 16 bytes (patchblk_SIZEOF, oabblk_SIZEOF) diff --git a/BurnOutSharp/External/libmspack/SZDD/Implementation.cs b/BurnOutSharp/External/libmspack/SZDD/Implementation.cs index e9b4f4bd..c069b14e 100644 --- a/BurnOutSharp/External/libmspack/SZDD/Implementation.cs +++ b/BurnOutSharp/External/libmspack/SZDD/Implementation.cs @@ -27,7 +27,7 @@ namespace LibMSPackSharp.SZDD /// public static Header Open(Decompressor d, string filename) { - DecompressorImpl self = (DecompressorImpl)d; + DecompressorImpl self = d as DecompressorImpl; if (self == null) return null; @@ -69,10 +69,10 @@ namespace LibMSPackSharp.SZDD /// public static void Close(Decompressor d, Header hdr) { - DecompressorImpl self = (DecompressorImpl)d; - HeaderImpl hdr_p = (HeaderImpl)hdr; + DecompressorImpl self = d as DecompressorImpl; + HeaderImpl hdr_p = hdr as HeaderImpl; - if (self == null || self.System == null) + if (self?.System == null || hdr == null) return; // Close the file handle associated @@ -150,7 +150,7 @@ namespace LibMSPackSharp.SZDD /// public static Error Extract(Decompressor d, Header hdr, string filename) { - DecompressorImpl self = (DecompressorImpl)d; + DecompressorImpl self = d as DecompressorImpl; if (self == null) return Error.MSPACK_ERR_ARGS; if (hdr == null) @@ -158,7 +158,9 @@ namespace LibMSPackSharp.SZDD SystemImpl sys = self.System; - object fh = ((HeaderImpl)hdr).FileHandle; + object fh = (hdr as HeaderImpl)?.FileHandle; + if (fh == null) + return Error.MSPACK_ERR_ARGS; // Seek to the compressed data long dataOffset = (hdr.Format == Format.MSSZDD_FMT_NORMAL) ? 14 : 12; @@ -195,7 +197,7 @@ namespace LibMSPackSharp.SZDD /// public static Error Decompress(Decompressor d, string input, string output) { - DecompressorImpl self = (DecompressorImpl)d; + DecompressorImpl self = d as DecompressorImpl; if (self == null) return Error.MSPACK_ERR_ARGS; @@ -217,7 +219,7 @@ namespace LibMSPackSharp.SZDD /// public static Error LastError(Decompressor d) { - DecompressorImpl self = (DecompressorImpl)d; + DecompressorImpl self = d as DecompressorImpl; return (self != null) ? self.Error : Error.MSPACK_ERR_ARGS; } diff --git a/BurnOutSharp/External/libmspack/SystemImpl.cs b/BurnOutSharp/External/libmspack/SystemImpl.cs index 26cbaa7e..dcb09f7a 100644 --- a/BurnOutSharp/External/libmspack/SystemImpl.cs +++ b/BurnOutSharp/External/libmspack/SystemImpl.cs @@ -261,19 +261,19 @@ namespace LibMSPackSharp switch (mode) { case OpenMode.MSPACK_SYS_OPEN_READ: - fileHandle.FileHandle = File.Open(filename, FileMode.Open, FileAccess.Read); + fileHandle.FileHandle = File.Open(filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); break; case OpenMode.MSPACK_SYS_OPEN_WRITE: - fileHandle.FileHandle = File.Open(filename, FileMode.Open, FileAccess.Write); + fileHandle.FileHandle = File.Open(filename, FileMode.OpenOrCreate, FileAccess.Write, FileShare.ReadWrite); break; case OpenMode.MSPACK_SYS_OPEN_UPDATE: - fileHandle.FileHandle = File.Open(filename, FileMode.Open, FileAccess.ReadWrite); + fileHandle.FileHandle = File.Open(filename, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite); break; case OpenMode.MSPACK_SYS_OPEN_APPEND: - fileHandle.FileHandle = File.Open(filename, FileMode.Append); + fileHandle.FileHandle = File.Open(filename, FileMode.Append, FileAccess.ReadWrite, FileShare.ReadWrite); break; default: