Пример #1
0
        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);
        }
Пример #2
0
        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);
        }