From 88f643452c46ce95e496c1ff35496a5c30a850af Mon Sep 17 00:00:00 2001 From: "Chloe M." Date: Fri, 10 Jul 2026 03:46:56 +0000 Subject: [PATCH] spkg: strlib: Add RtlMemCmp() to string lib Signed-off-by: Chloe M. --- service/spkg/head/string.h | 11 +++++++++++ service/spkg/strlib/memcmp.c | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 service/spkg/strlib/memcmp.c 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; +}