This source file includes following definitions.
- memset
 
- memcmp
 
- memmove
 
- memcpy
 
- strncmp
 
- strncpy
 
- safestrcpy
 
- strlen
 
   1 #include "types.h"
   2 
   3 void*
   4 memset(void *dst, int c, uint n)
   5 {
   6   char *cdst = (char *) dst;
   7   int i;
   8   for(i = 0; i < n; i++){
   9     cdst[i] = c;
  10   }
  11   return dst;
  12 }
  13 
  14 int
  15 memcmp(const void *v1, const void *v2, uint n)
  16 {
  17   const uchar *s1, *s2;
  18 
  19   s1 = v1;
  20   s2 = v2;
  21   while(n-- > 0){
  22     if(*s1 != *s2)
  23       return *s1 - *s2;
  24     s1++, s2++;
  25   }
  26 
  27   return 0;
  28 }
  29 
  30 void*
  31 memmove(void *dst, const void *src, uint n)
  32 {
  33   const char *s;
  34   char *d;
  35 
  36   if(n == 0)
  37     return dst;
  38   
  39   s = src;
  40   d = dst;
  41   if(s < d && s + n > d){
  42     s += n;
  43     d += n;
  44     while(n-- > 0)
  45       *--d = *--s;
  46   } else
  47     while(n-- > 0)
  48       *d++ = *s++;
  49 
  50   return dst;
  51 }
  52 
  53 
  54 void*
  55 memcpy(void *dst, const void *src, uint n)
  56 {
  57   return memmove(dst, src, n);
  58 }
  59 
  60 int
  61 strncmp(const char *p, const char *q, uint n)
  62 {
  63   while(n > 0 && *p && *p == *q)
  64     n--, p++, q++;
  65   if(n == 0)
  66     return 0;
  67   return (uchar)*p - (uchar)*q;
  68 }
  69 
  70 char*
  71 strncpy(char *s, const char *t, int n)
  72 {
  73   char *os;
  74 
  75   os = s;
  76   while(n-- > 0 && (*s++ = *t++) != 0)
  77     ;
  78   while(n-- > 0)
  79     *s++ = 0;
  80   return os;
  81 }
  82 
  83 
  84 char*
  85 safestrcpy(char *s, const char *t, int n)
  86 {
  87   char *os;
  88 
  89   os = s;
  90   if(n <= 0)
  91     return os;
  92   while(--n > 0 && (*s++ = *t++) != 0)
  93     ;
  94   *s = 0;
  95   return os;
  96 }
  97 
  98 int
  99 strlen(const char *s)
 100 {
 101   int n;
 102 
 103   for(n = 0; s[n]; n++)
 104     ;
 105   return n;
 106 }
 107