xref: /xv6-public/string.c (revision f32f3638)
1a4c03deaSrtm #include "types.h"
2a4c03deaSrtm #include "defs.h"
3a4c03deaSrtm 
455e95b16Srtm void*
5b5ee5165Srsc memset(void *dst, int c, uint n)
655e95b16Srtm {
7dca5b5caSrsc   char *d;
855e95b16Srtm 
9dca5b5caSrsc   d = (char*)dst;
1055e95b16Srtm   while(n-- > 0)
1155e95b16Srtm     *d++ = c;
1255e95b16Srtm 
1355e95b16Srtm   return dst;
1455e95b16Srtm }
157baa34a4Skaashoek 
167baa34a4Skaashoek int
17b5ee5165Srsc memcmp(const void *v1, const void *v2, uint n)
187baa34a4Skaashoek {
19dca5b5caSrsc   const uchar *s1, *s2;
207baa34a4Skaashoek 
21dca5b5caSrsc   s1 = v1;
22dca5b5caSrsc   s2 = v2;
237baa34a4Skaashoek   while(n-- > 0) {
247baa34a4Skaashoek     if(*s1 != *s2)
25dca5b5caSrsc       return *s1 - *s2;
267baa34a4Skaashoek     s1++, s2++;
277baa34a4Skaashoek   }
287baa34a4Skaashoek 
297baa34a4Skaashoek   return 0;
307baa34a4Skaashoek }
3121a88fd4Skaashoek 
3221a88fd4Skaashoek void*
33b5ee5165Srsc memmove(void *dst, const void *src, uint n)
3421a88fd4Skaashoek {
3521a88fd4Skaashoek   const char *s;
3621a88fd4Skaashoek   char *d;
3721a88fd4Skaashoek 
3821a88fd4Skaashoek   s = src;
3921a88fd4Skaashoek   d = dst;
4021a88fd4Skaashoek   if(s < d && s + n > d) {
4121a88fd4Skaashoek     s += n;
4221a88fd4Skaashoek     d += n;
4321a88fd4Skaashoek     while(n-- > 0)
4421a88fd4Skaashoek       *--d = *--s;
4521a88fd4Skaashoek   } else
4621a88fd4Skaashoek     while(n-- > 0)
4721a88fd4Skaashoek       *d++ = *s++;
4821a88fd4Skaashoek 
4921a88fd4Skaashoek   return dst;
5021a88fd4Skaashoek }
51b22d8982Skaashoek 
52b22d8982Skaashoek int
53b5ee5165Srsc strncmp(const char *p, const char *q, uint n)
54b22d8982Skaashoek {
55b22d8982Skaashoek   while(n > 0 && *p && *p == *q)
56b22d8982Skaashoek     n--, p++, q++;
57b22d8982Skaashoek   if(n == 0)
58b22d8982Skaashoek     return 0;
59b22d8982Skaashoek   else
6029270816Srtm     return (int) ((uchar) *p - (uchar) *q);
61b22d8982Skaashoek }
627e89fb90Srsc 
637e89fb90Srsc // Like strncpy but guaranteed to NUL-terminate.
647e89fb90Srsc char*
657e89fb90Srsc safestrcpy(char *s, const char *t, int n)
667e89fb90Srsc {
677e89fb90Srsc   char *os;
687e89fb90Srsc 
697e89fb90Srsc   os = s;
707e89fb90Srsc   if(n <= 0)
717e89fb90Srsc     return os;
727e89fb90Srsc   while(--n > 0 && (*s++ = *t++) != 0)
737e89fb90Srsc     ;
747e89fb90Srsc   *s = 0;
757e89fb90Srsc   return os;
767e89fb90Srsc }
777e89fb90Srsc 
78*f32f3638Srsc int
79*f32f3638Srsc strlen(const char *s)
80*f32f3638Srsc {
81*f32f3638Srsc   int n;
82*f32f3638Srsc 
83*f32f3638Srsc   for(n = 0; s[n]; n++)
84*f32f3638Srsc     ;
85*f32f3638Srsc   return n;
86*f32f3638Srsc }
87*f32f3638Srsc 
88