162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only
262306a36Sopenharmony_ci/* crc32hash.c - derived from linux/lib/crc32.c, GNU GPL v2 */
362306a36Sopenharmony_ci/* Usage example:
462306a36Sopenharmony_ci$ ./crc32hash "Dual Speed"
562306a36Sopenharmony_ci*/
662306a36Sopenharmony_ci
762306a36Sopenharmony_ci#include <string.h>
862306a36Sopenharmony_ci#include <stdio.h>
962306a36Sopenharmony_ci#include <ctype.h>
1062306a36Sopenharmony_ci#include <stdlib.h>
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_cistatic unsigned int crc32(unsigned char const *p, unsigned int len)
1362306a36Sopenharmony_ci{
1462306a36Sopenharmony_ci	int i;
1562306a36Sopenharmony_ci	unsigned int crc = 0;
1662306a36Sopenharmony_ci	while (len--) {
1762306a36Sopenharmony_ci		crc ^= *p++;
1862306a36Sopenharmony_ci		for (i = 0; i < 8; i++)
1962306a36Sopenharmony_ci			crc = (crc >> 1) ^ ((crc & 1) ? 0xedb88320 : 0);
2062306a36Sopenharmony_ci	}
2162306a36Sopenharmony_ci	return crc;
2262306a36Sopenharmony_ci}
2362306a36Sopenharmony_ci
2462306a36Sopenharmony_ciint main(int argc, char **argv) {
2562306a36Sopenharmony_ci	unsigned int result;
2662306a36Sopenharmony_ci	if (argc != 2) {
2762306a36Sopenharmony_ci		printf("no string passed as argument\n");
2862306a36Sopenharmony_ci		return -1;
2962306a36Sopenharmony_ci	}
3062306a36Sopenharmony_ci	result = crc32((unsigned char const *)argv[1], strlen(argv[1]));
3162306a36Sopenharmony_ci	printf("0x%x\n", result);
3262306a36Sopenharmony_ci	return 0;
3362306a36Sopenharmony_ci}
34