⛏️ index : haiku.git

/*
 * Copyright 2025, Haiku, Inc. All rights reserved.
 * Copyright 2008, Axel DΓΆrfler, axeld@pinc-software.de.
 * Distributed under the terms of the MIT license.
 */


#include <stdint.h>
#include <string.h>


#define MISALIGNMENT(PTR, TYPE) ((addr_t)(PTR) & (sizeof(TYPE) - 1))

int
memcmp(const void *_a, const void *_b, size_t count)
{
	const unsigned char *a = (const unsigned char *)_a;
	const unsigned char *b = (const unsigned char *)_b;

	if (MISALIGNMENT(a, size_t) == 0 && MISALIGNMENT(b, size_t) == 0) {
		size_t *asz = (size_t *)a;
		size_t *bsz = (size_t *)b;

		while (count >= sizeof(size_t) && *asz == *bsz) {
			asz++;
			bsz++;
			count -= sizeof(size_t);
		}
		a = (const unsigned char *)asz;
		b = (const unsigned char *)bsz;
	}

	while (count > 0 && *a == *b) {
		a++;
		b++;
		count--;
	}

	if (count == 0)
		return 0;

	return *a - *b;
}