1a4c03deaSrtm #include "types.h" 2a4c03deaSrtm #include "defs.h" 3a4c03deaSrtm 455e95b16Srtm void * 5*b5ee5165Srsc memset(void *dst, int c, uint n) 655e95b16Srtm { 755e95b16Srtm char *d = (char *) dst; 855e95b16Srtm 955e95b16Srtm while(n-- > 0) 1055e95b16Srtm *d++ = c; 1155e95b16Srtm 1255e95b16Srtm return dst; 1355e95b16Srtm } 147baa34a4Skaashoek 157baa34a4Skaashoek int 16*b5ee5165Srsc memcmp(const void *v1, const void *v2, uint n) 177baa34a4Skaashoek { 187baa34a4Skaashoek const uint8_t *s1 = (const uint8_t *) v1; 197baa34a4Skaashoek const uint8_t *s2 = (const uint8_t *) v2; 207baa34a4Skaashoek 217baa34a4Skaashoek while (n-- > 0) { 227baa34a4Skaashoek if (*s1 != *s2) 237baa34a4Skaashoek return (int) *s1 - (int) *s2; 247baa34a4Skaashoek s1++, s2++; 257baa34a4Skaashoek } 267baa34a4Skaashoek 277baa34a4Skaashoek return 0; 287baa34a4Skaashoek } 2921a88fd4Skaashoek 3021a88fd4Skaashoek void * 31*b5ee5165Srsc memmove(void *dst, const void *src, uint n) 3221a88fd4Skaashoek { 3321a88fd4Skaashoek const char *s; 3421a88fd4Skaashoek char *d; 3521a88fd4Skaashoek 3621a88fd4Skaashoek s = src; 3721a88fd4Skaashoek d = dst; 3821a88fd4Skaashoek if (s < d && s + n > d) { 3921a88fd4Skaashoek s += n; 4021a88fd4Skaashoek d += n; 4121a88fd4Skaashoek while (n-- > 0) 4221a88fd4Skaashoek *--d = *--s; 4321a88fd4Skaashoek } else 4421a88fd4Skaashoek while (n-- > 0) 4521a88fd4Skaashoek *d++ = *s++; 4621a88fd4Skaashoek 4721a88fd4Skaashoek return dst; 4821a88fd4Skaashoek } 49b22d8982Skaashoek 50b22d8982Skaashoek int 51*b5ee5165Srsc strncmp(const char *p, const char *q, uint n) 52b22d8982Skaashoek { 53b22d8982Skaashoek while (n > 0 && *p && *p == *q) 54b22d8982Skaashoek n--, p++, q++; 55b22d8982Skaashoek if (n == 0) 56b22d8982Skaashoek return 0; 57b22d8982Skaashoek else 58*b5ee5165Srsc return (int) ((uint8_t) *p - (uint8_t) *q); 59b22d8982Skaashoek } 60856e1fc1Srsc 61856e1fc1Srsc // Memcpy is deprecated and should NOT be called. 62856e1fc1Srsc // Use memmove instead, which has defined semantics 63856e1fc1Srsc // when the two memory ranges overlap. 64856e1fc1Srsc // Memcpy is here only because gcc compiles some 65856e1fc1Srsc // structure assignments into calls to memcpy. 66856e1fc1Srsc void * 67*b5ee5165Srsc memcpy(void *dst, void *src, uint n) 68856e1fc1Srsc { 69856e1fc1Srsc char *d = (char *) dst; 70856e1fc1Srsc char *s = (char *) src; 71856e1fc1Srsc 72856e1fc1Srsc while(n-- > 0) 73856e1fc1Srsc *d++ = *s++; 74856e1fc1Srsc 75856e1fc1Srsc return dst; 76856e1fc1Srsc } 77856e1fc1Srsc 78