/*====================================================================*
 *
 *   uint32_t fdchecksum32 (int fd, size_t extent, uint32_t checksum);
 *
 *   memory.h
 *
 *   return the 32-bit checksum of a file region starting from the
 *   current file position; extent is specified in bytes but will be
 *   rounded to a multiple of four bytes;
 *
 *   Motley Tools by Charles Maier <cmaier@cmassoc.net>;
 *   Copyright (c) 2001-2006 by Charles Maier Associates;
 *   Licensed under the Internet Software Consortium License;
 *
 *--------------------------------------------------------------------*/

#ifndef FDCHECKSUM32_SOURCE
#define FDCHECKSUM32_SOURCE

#include <stdio.h>
#include <unistd.h>
#include <errno.h>

#include "../tools/memory.h"

uint32_t fdchecksum32 (int fd, register size_t extent, register uint32_t checksum)

{
	uint32_t memory;
	while (extent >= sizeof (memory))
	{
		if (read (fd, &memory, sizeof (memory)) != sizeof (memory))
		{
			return (-1);
		}
		extent -= sizeof (memory);
		checksum ^= memory;
	}
	return (~checksum);
}

#endif