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> | |
7ec2fc6f | 19 | #ifdef ANSI_PROTOTYPES |
252b5132 RH |
20 | #include <stddef.h> |
21 | #else | |
22 | #define size_t unsigned long | |
23 | #endif | |
24 | ||
25 | int | |
7ec2fc6f DD |
26 | memcmp (str1, str2, count) |
27 | const PTR str1; | |
28 | const PTR str2; | |
29 | size_t count; | |
252b5132 | 30 | { |
eb383413 L |
31 | register const unsigned char *s1 = (const unsigned char*)str1; |
32 | register const unsigned char *s2 = (const unsigned char*)str2; | |
252b5132 RH |
33 | |
34 | while (count-- > 0) | |
35 | { | |
36 | if (*s1++ != *s2++) | |
37 | return s1[-1] < s2[-1] ? -1 : 1; | |
38 | } | |
39 | return 0; | |
40 | } | |
41 |