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