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