xref: /original-bsd/sys/ufs/lfs/lfs_cksum.c (revision 948d00a2)
1 /*-
2  * Copyright (c) 1991, 1993
3  *	The Regents of the University of California.  All rights reserved.
4  *
5  * %sccs.include.redist.c%
6  *
7  *	@(#)lfs_cksum.c	8.2 (Berkeley) 10/09/94
8  */
9 
10 #include <sys/types.h>
11 
12 /*
13  * Simple, general purpose, fast checksum.  Data must be short-aligned.
14  * Returns a u_long in case we ever want to do something more rigorous.
15  *
16  * XXX
17  * Use the TCP/IP checksum instead.
18  */
19 u_long
20 cksum(str, len)
21 	register void *str;
22 	register size_t len;
23 {
24 	register u_long sum;
25 
26 	len &= ~(sizeof(u_short) - 1);
27 	for (sum = 0; len; len -= sizeof(u_short)) {
28 		sum ^= *(u_short *)str;
29 		str = (void *)((u_short *)str + 1);
30 	}
31 	return (sum);
32 }
33