private static IvffResult LoadBlock <T>(Stream stream, ref T structure, long position) where T : struct { int count = Marshal.SizeOf(typeof(T)); byte[] numArray = new byte[count]; try { stream.Seek(position, SeekOrigin.Begin); stream.Read(numArray, 0, count); IvaUtils.BytesToStructure <T>(ref structure, numArray); } catch (Exception ex) { return(IvffResult.ACCESS_ERROR); } return(IvffResult.OK); }
private static IvffResult LoadBlockHeader <T>(Stream stream, ref T structure) where T : struct { int length = Marshal.SizeOf(typeof(T)); int num1 = Marshal.SizeOf(typeof(IvCommonBlockHeader)); byte[] bytes1 = new byte[length]; int readSize; if (Ivff.IsResultError(Ivff.ReadNext(stream, bytes1, num1, out readSize)) || num1 != readSize) { return(IvffResult.READ_ERROR); } IvCommonBlockHeader commonBlockHeader = new IvCommonBlockHeader(); IvaUtils.BytesToStructure <IvCommonBlockHeader>(ref commonBlockHeader, bytes1); IvffResult result = Ivff.CheckIvCommonBlockHeader(ref commonBlockHeader); if (Ivff.IsResultError(result)) { return(result); } if ((int)commonBlockHeader.BlockHeaderSize > num1) { ushort num2 = Math.Min((ushort)((uint)commonBlockHeader.BlockHeaderSize - (uint)num1), (ushort)(length - num1)); if ((ushort)0 < num2) { byte[] bytes2 = new byte[(int)num2]; if (Ivff.IsResultError(Ivff.ReadNext(stream, bytes2, (int)num2, out readSize)) || (int)num2 != readSize) { return(IvffResult.READ_ERROR); } bytes2.CopyTo((Array)bytes1, num1); } } IvaUtils.BytesToStructure <T>(ref structure, bytes1); return(IvffResult.OK); }