Commit | Line | Data |
---|---|---|
252b5132 RH |
1 | /* memcmp -- compare two memory regions. |
2 | This function is in the public domain. */ | |
3 | ||
4 | /* | |
252b5132 | 5 | |
39423523 DD |
6 | @deftypefn Supplemental int memcmp (const void *@var{x}, const void *@var{y}, size_t @var{count}) |
7 | ||
8 | Compares the first @var{count} bytes of two areas of memory. Returns | |
9 | zero if they are the same, a value less than zero if @var{x} is | |
10 | lexically less than @var{y}, or a value greater than zero if @var{x} | |
11 | is lexically greater than @var{y}. Note that lexical order is determined | |
12 | as if comparing unsigned char arrays. | |
13 | ||
14 | @end deftypefn | |
252b5132 | 15 | |
252b5132 RH |
16 | */ |
17 | ||
18 | #include <ansidecl.h> | |
19 | #ifdef __STDC__ | |
20 | #include <stddef.h> | |
21 | #else | |
22 | #define size_t unsigned long | |
23 | #endif | |
24 | ||
25 | int | |
26 | DEFUN(memcmp, (str1, str2, count), | |
27 | const PTR str1 AND const PTR str2 AND size_t count) | |
28 | { | |
eb383413 L |
29 | register const unsigned char *s1 = (const unsigned char*)str1; |
30 | register const unsigned char *s2 = (const unsigned char*)str2; | |
252b5132 RH |
31 | |
32 | while (count-- > 0) | |
33 | { | |
34 | if (*s1++ != *s2++) | |
35 | return s1[-1] < s2[-1] ? -1 : 1; | |
36 | } | |
37 | return 0; | |
38 | } | |
39 |