xref: /xv6-public/string.c (revision 7e89fb90)
1a4c03deaSrtm #include "types.h"
2a4c03deaSrtm #include "defs.h"
3a4c03deaSrtm 
455e95b16Srtm void*
5b5ee5165Srsc 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
16b5ee5165Srsc memcmp(const void *v1, const void *v2, uint n)
177baa34a4Skaashoek {
1829270816Srtm   const uchar *s1 = (const uchar*) v1;
1929270816Srtm   const uchar *s2 = (const uchar*) 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*
31b5ee5165Srsc 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
51b5ee5165Srsc 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
5829270816Srtm     return (int) ((uchar) *p - (uchar) *q);
59b22d8982Skaashoek }
60*7e89fb90Srsc 
61*7e89fb90Srsc // Like strncpy but guaranteed to NUL-terminate.
62*7e89fb90Srsc char*
63*7e89fb90Srsc safestrcpy(char *s, const char *t, int n)
64*7e89fb90Srsc {
65*7e89fb90Srsc   char *os;
66*7e89fb90Srsc 
67*7e89fb90Srsc   os = s;
68*7e89fb90Srsc   if(n <= 0)
69*7e89fb90Srsc     return os;
70*7e89fb90Srsc   while(--n > 0 && (*s++ = *t++) != 0)
71*7e89fb90Srsc     ;
72*7e89fb90Srsc   *s = 0;
73*7e89fb90Srsc   return os;
74*7e89fb90Srsc }
75*7e89fb90Srsc 
76