mirror of
https://git.openldap.org/openldap/openldap.git
synced 2024-12-21 03:10:25 +08:00
Compact memnrcmp, just for fun
This commit is contained in:
parent
ab0d6fa05e
commit
aed36f5780
@ -346,25 +346,19 @@ memncmp(const void *s1, size_t n1, const void *s2, size_t n2)
|
||||
static int
|
||||
memnrcmp(const void *s1, size_t n1, const void *s2, size_t n2)
|
||||
{
|
||||
const unsigned char *p1;
|
||||
const unsigned char *p2;
|
||||
|
||||
if (n1 == 0)
|
||||
return n2 == 0 ? 0 : -1;
|
||||
const unsigned char *p1, *p2, *p1_lim;
|
||||
|
||||
if (n2 == 0)
|
||||
return n1 == 0 ? 0 : 1;
|
||||
return n1 != 0;
|
||||
if (n1 == 0)
|
||||
return -1;
|
||||
|
||||
p1 = (const unsigned char *)s1 + n1 - 1;
|
||||
p2 = (const unsigned char *)s2 + n2 - 1;
|
||||
|
||||
while (*p1 == *p2) {
|
||||
if (p1 == s1)
|
||||
return (p2 == s2) ? 0 : -1;
|
||||
if (p2 == s2)
|
||||
return (p1 == p2) ? 0 : 1;
|
||||
p1--;
|
||||
p2--;
|
||||
for (p1_lim = (n1 <= n2 ? s1 : s2); *p1 == *p2; p1--, p2--) {
|
||||
if (p1 == p1_lim)
|
||||
return (p1 != s1) ? (p1 != p2) : (p2 != s2) ? -1 : 0;
|
||||
}
|
||||
return *p1 - *p2;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user