diff --git a/service/spkg/head/string.h b/service/spkg/head/string.h index e56260c..43adfa7 100644 --- a/service/spkg/head/string.h +++ b/service/spkg/head/string.h @@ -18,4 +18,15 @@ */ USIZE RtlStrLen(const CHAR *String); +/* + * Compare the differences between two strings + * + * @Buffer1: First buffer to compare + * @Buffer2: Second buffer to compare + * @Length: Number of bytes to compare + * + * Returns the differences + */ +LONG RtlMemCmp(const VOID *Buffer1, const VOID *Buffer2, USIZE Length); + #endif /* !_SPKG_STRING_H_ */ diff --git a/service/spkg/strlib/memcmp.c b/service/spkg/strlib/memcmp.c new file mode 100644 index 0000000..5b57ec8 --- /dev/null +++ b/service/spkg/strlib/memcmp.c @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2026, Chloe M. + * Provided under the BSD-3 clause. + * + * Description: RtlMemCmp() implementation + * Author: Chloe M. + */ + +#include + +LONG +RtlMemCmp(const VOID *Buffer1, const VOID *Buffer2, USIZE Length) +{ + const UCHAR *Ptr1 = Buffer1; + const UCHAR *Ptr2 = Buffer2; + + if (Buffer1 == NULL || Buffer2 == NULL) { + return 0; + } + + if (Length == 0) { + return 0; + } + + do { + if (*Ptr1++ != *Ptr2++) { + return (*--Ptr1 - *--Ptr2); + } + } while (--Length != 0); + + return 0; +}