mirror of
https://github.com/ksherlock/profuse.git
synced 2024-12-23 11:31:43 +00:00
Add checksumming
git-svn-id: https://profuse.googlecode.com/svn/trunk@48 aa027e90-d47c-11dd-86d7-074df07e0730
This commit is contained in:
parent
2458262bac
commit
bfe481b412
@ -11,6 +11,29 @@
|
||||
#include <string.h>
|
||||
|
||||
|
||||
uint32_t DiskCopy42::CheckSum(uint8_t *buffer, unsigned length)
|
||||
{
|
||||
uint32_t checksum = 0;
|
||||
if (length & 0x01) return -1;
|
||||
|
||||
/*
|
||||
* checksum starts at 0
|
||||
* foreach big-endian 16-bit word w:
|
||||
* checksum += w
|
||||
* checksum = checksum rotate right 1 (bit 0 --> bit 31)
|
||||
*/
|
||||
|
||||
for(unsigned i = 0; i < length; i += 2)
|
||||
{
|
||||
checksum += (buffer[i] << 8);
|
||||
checksum += buffer[i + 1];
|
||||
checksum = (checksum >> 1) | (checksum << 31);
|
||||
//if (checksum & 0x01) checksum = (checksum >> 1) | 0x80000000;
|
||||
//else checksum >>= 1;
|
||||
}
|
||||
return checksum;
|
||||
|
||||
}
|
||||
|
||||
bool DiskCopy42::Load(const uint8_t *buffer)
|
||||
{
|
||||
|
@ -15,6 +15,7 @@
|
||||
struct DiskCopy42
|
||||
{
|
||||
bool Load(const uint8_t *buffer);
|
||||
static uint32_t CheckSum(uint8_t *buffer, unsigned length);
|
||||
|
||||
char disk_name[64];
|
||||
uint32_t data_size;
|
||||
|
Loading…
Reference in New Issue
Block a user