xref: /OK3568_Linux_fs/kernel/tools/pcmcia/crc32hash.c (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun // SPDX-License-Identifier: GPL-2.0-only
2*4882a593Smuzhiyun /* crc32hash.c - derived from linux/lib/crc32.c, GNU GPL v2 */
3*4882a593Smuzhiyun /* Usage example:
4*4882a593Smuzhiyun $ ./crc32hash "Dual Speed"
5*4882a593Smuzhiyun */
6*4882a593Smuzhiyun 
7*4882a593Smuzhiyun #include <string.h>
8*4882a593Smuzhiyun #include <stdio.h>
9*4882a593Smuzhiyun #include <ctype.h>
10*4882a593Smuzhiyun #include <stdlib.h>
11*4882a593Smuzhiyun 
crc32(unsigned char const * p,unsigned int len)12*4882a593Smuzhiyun static unsigned int crc32(unsigned char const *p, unsigned int len)
13*4882a593Smuzhiyun {
14*4882a593Smuzhiyun 	int i;
15*4882a593Smuzhiyun 	unsigned int crc = 0;
16*4882a593Smuzhiyun 	while (len--) {
17*4882a593Smuzhiyun 		crc ^= *p++;
18*4882a593Smuzhiyun 		for (i = 0; i < 8; i++)
19*4882a593Smuzhiyun 			crc = (crc >> 1) ^ ((crc & 1) ? 0xedb88320 : 0);
20*4882a593Smuzhiyun 	}
21*4882a593Smuzhiyun 	return crc;
22*4882a593Smuzhiyun }
23*4882a593Smuzhiyun 
main(int argc,char ** argv)24*4882a593Smuzhiyun int main(int argc, char **argv) {
25*4882a593Smuzhiyun 	unsigned int result;
26*4882a593Smuzhiyun 	if (argc != 2) {
27*4882a593Smuzhiyun 		printf("no string passed as argument\n");
28*4882a593Smuzhiyun 		return -1;
29*4882a593Smuzhiyun 	}
30*4882a593Smuzhiyun 	result = crc32((unsigned char const *)argv[1], strlen(argv[1]));
31*4882a593Smuzhiyun 	printf("0x%x\n", result);
32*4882a593Smuzhiyun 	return 0;
33*4882a593Smuzhiyun }
34