memcmp.c 876 B

123456789101112131415161718192021222324252627282930313233343536
  1. /* memcmp -- compare two memory regions.
  2. This function is in the public domain. */
  3. /*
  4. @deftypefn Supplemental int memcmp (const void *@var{x}, const void *@var{y}, @
  5. size_t @var{count})
  6. Compares the first @var{count} bytes of two areas of memory. Returns
  7. zero if they are the same, a value less than zero if @var{x} is
  8. lexically less than @var{y}, or a value greater than zero if @var{x}
  9. is lexically greater than @var{y}. Note that lexical order is determined
  10. as if comparing unsigned char arrays.
  11. @end deftypefn
  12. */
  13. #include <ansidecl.h>
  14. #include <stddef.h>
  15. int
  16. memcmp (const PTR str1, const PTR str2, size_t count)
  17. {
  18. register const unsigned char *s1 = (const unsigned char*)str1;
  19. register const unsigned char *s2 = (const unsigned char*)str2;
  20. while (count-- > 0)
  21. {
  22. if (*s1++ != *s2++)
  23. return s1[-1] < s2[-1] ? -1 : 1;
  24. }
  25. return 0;
  26. }