18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only
28c2ecf20Sopenharmony_ci/* crc32hash.c - derived from linux/lib/crc32.c, GNU GPL v2 */
38c2ecf20Sopenharmony_ci/* Usage example:
48c2ecf20Sopenharmony_ci$ ./crc32hash "Dual Speed"
58c2ecf20Sopenharmony_ci*/
68c2ecf20Sopenharmony_ci
78c2ecf20Sopenharmony_ci#include <string.h>
88c2ecf20Sopenharmony_ci#include <stdio.h>
98c2ecf20Sopenharmony_ci#include <ctype.h>
108c2ecf20Sopenharmony_ci#include <stdlib.h>
118c2ecf20Sopenharmony_ci
128c2ecf20Sopenharmony_cistatic unsigned int crc32(unsigned char const *p, unsigned int len)
138c2ecf20Sopenharmony_ci{
148c2ecf20Sopenharmony_ci	int i;
158c2ecf20Sopenharmony_ci	unsigned int crc = 0;
168c2ecf20Sopenharmony_ci	while (len--) {
178c2ecf20Sopenharmony_ci		crc ^= *p++;
188c2ecf20Sopenharmony_ci		for (i = 0; i < 8; i++)
198c2ecf20Sopenharmony_ci			crc = (crc >> 1) ^ ((crc & 1) ? 0xedb88320 : 0);
208c2ecf20Sopenharmony_ci	}
218c2ecf20Sopenharmony_ci	return crc;
228c2ecf20Sopenharmony_ci}
238c2ecf20Sopenharmony_ci
248c2ecf20Sopenharmony_ciint main(int argc, char **argv) {
258c2ecf20Sopenharmony_ci	unsigned int result;
268c2ecf20Sopenharmony_ci	if (argc != 2) {
278c2ecf20Sopenharmony_ci		printf("no string passed as argument\n");
288c2ecf20Sopenharmony_ci		return -1;
298c2ecf20Sopenharmony_ci	}
308c2ecf20Sopenharmony_ci	result = crc32((unsigned char const *)argv[1], strlen(argv[1]));
318c2ecf20Sopenharmony_ci	printf("0x%x\n", result);
328c2ecf20Sopenharmony_ci	return 0;
338c2ecf20Sopenharmony_ci}
34