xref: /original-bsd/sys/ufs/lfs/lfs_cksum.c (revision 68d9582f)
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.4 (Berkeley) 05/14/92
8  */
9 
10 #include <sys/param.h>
11 #include <sys/vnode.h>
12 
13 #include <ufs/lfs/lfs.h>
14 #include <ufs/lfs/lfs_extern.h>
15 
16 /*
17  * Simple, general purpose, fast checksum.  Data must be short-aligned.
18  * Returns a u_long in case we ever want to do something more rigorous.
19  *
20  * XXX
21  * Use the TCP/IP checksum instead.
22  */
23 u_long
24 cksum(str, len)
25 	register void *str;
26 	register size_t len;
27 {
28 	register u_long sum;
29 
30 	len &= ~(sizeof(u_short) - 1);
31 	for (sum = 0; len; len -= sizeof(u_short)) {
32 		sum ^= *(u_short *)str;
33 		++(u_short *)str;
34 	}
35 	return (sum);
36 }
37