Skip to content
Snippets Groups Projects
image.c 28.3 KiB
Newer Older
		image->sections = NULL;
	}
drath's avatar
drath committed
	
	return ERROR_OK;
}
ntfreak's avatar
ntfreak committed

static u32 crc32_table[256] = {0, 0};

int image_calculate_checksum(u8* buffer, u32 nbytes, u32* checksum)
{
	u32 crc = 0xffffffff;
	
	if (!crc32_table[1])
	{
		/* Initialize the CRC table and the decoding table.  */
		int i, j;
		unsigned int c;
		for (i = 0; i < 256; i++)
		{
			/* as per gdb */
			for (c = i << 24, j = 8; j > 0; --j)
				c = c & 0x80000000 ? (c << 1) ^ 0x04c11db7 : (c << 1);
			crc32_table[i] = c;
		}
	}
	
	while (nbytes--)
	{
		/* as per gdb */
		crc = (crc << 8) ^ crc32_table[((crc >> 24) ^ *buffer++) & 255];
	}
	
	*checksum = crc;
	return ERROR_OK;
}