xref: /netbsd-src/external/gpl3/binutils.old/dist/libiberty/memcmp.c (revision e992f068c547fd6e84b3f104dc2340adcc955732)
116dce513Schristos /* memcmp -- compare two memory regions.
216dce513Schristos    This function is in the public domain.  */
316dce513Schristos 
416dce513Schristos /*
516dce513Schristos 
616dce513Schristos @deftypefn Supplemental int memcmp (const void *@var{x}, const void *@var{y}, @
716dce513Schristos   size_t @var{count})
816dce513Schristos 
916dce513Schristos Compares the first @var{count} bytes of two areas of memory.  Returns
1016dce513Schristos zero if they are the same, a value less than zero if @var{x} is
1116dce513Schristos lexically less than @var{y}, or a value greater than zero if @var{x}
1216dce513Schristos is lexically greater than @var{y}.  Note that lexical order is determined
1316dce513Schristos as if comparing unsigned char arrays.
1416dce513Schristos 
1516dce513Schristos @end deftypefn
1616dce513Schristos 
1716dce513Schristos */
1816dce513Schristos 
1916dce513Schristos #include <ansidecl.h>
2016dce513Schristos #include <stddef.h>
2116dce513Schristos 
2216dce513Schristos int
memcmp(const void * str1,const void * str2,size_t count)23*e992f068Schristos memcmp (const void *str1, const void *str2, size_t count)
2416dce513Schristos {
2516dce513Schristos   register const unsigned char *s1 = (const unsigned char*)str1;
2616dce513Schristos   register const unsigned char *s2 = (const unsigned char*)str2;
2716dce513Schristos 
2816dce513Schristos   while (count-- > 0)
2916dce513Schristos     {
3016dce513Schristos       if (*s1++ != *s2++)
3116dce513Schristos 	  return s1[-1] < s2[-1] ? -1 : 1;
3216dce513Schristos     }
3316dce513Schristos   return 0;
3416dce513Schristos }
3516dce513Schristos 
36