Commit | Line | Data |
---|---|---|
e4c3f0d8 KB |
1 | /*- |
2 | * Copyright (c) 1991 The Regents of the University of California. | |
3 | * All rights reserved. | |
4 | * | |
5 | * %sccs.include.redist.c% | |
6 | * | |
de24a38d | 7 | * @(#)lfs_cksum.c 7.2 (Berkeley) %G% |
e4c3f0d8 KB |
8 | */ |
9 | ||
f6437c6d KB |
10 | #include <sys/param.h> |
11 | ||
7688a3ec KB |
12 | #include <ufs/lfs/lfs.h> |
13 | #include <ufs/lfs/lfs_extern.h> | |
e4c3f0d8 KB |
14 | |
15 | /* | |
275ca4f0 KB |
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. | |
f6437c6d KB |
18 | * |
19 | * XXX | |
20 | * Use the TCP/IP checksum instead. | |
e4c3f0d8 KB |
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 | return (sum); | |
33 | } |