private static IvffResult CheckBlockNext( Stream stream, ref IvCommonCheckWork checkWork, ref IvCommonBlockHeader common) { int val2 = Math.Min(checkWork.DivideSize, checkWork.RemainSize); checkWork.RemainSize -= val2; ++checkWork.NowCount; int size; for (; 0 < val2; val2 -= size) { size = Math.Min(16777216, val2); byte[] bytes = new byte[size]; int readSize; if (Ivff.IsResultError(Ivff.ReadNext(stream, bytes, size, out readSize)) || size != readSize) { return(IvffResult.READ_ERROR); } checkWork.CurSum = IvaUtils.CalcSum32(checkWork.CurSum, bytes, size); } if (0 < checkWork.RemainSize) { return(IvffResult.CONTINUE); } return((int)common.BlockDataSum == (int)checkWork.CurSum ? IvffResult.OK : IvffResult.INVALID); }
public static ushort CalcSum <T>(ushort sum, ref T structure) where T : struct { int size = Marshal.SizeOf(typeof(T)); return((ushort)IvaUtils.CalcSum32(0U, IvaUtils.StructureToBytes <T>(ref structure), size)); }