This source file includes following definitions.
- start
- strcpy
- strcmp
- strlen
- memset
- strchr
- gets
- stat
- atoi
- memmove
- memcmp
- memcpy
- sbrk
- sbrklazy
   1 #include "kernel/types.h"
   2 #include "kernel/stat.h"
   3 #include "kernel/fcntl.h"
   4 #include "kernel/riscv.h"
   5 #include "kernel/vm.h"
   6 #include "user/user.h"
   7 
   8 
   9 
  10 
  11 void
  12 start(int argc, char **argv)
  13 {
  14   int r;
  15   extern int main(int argc, char **argv);
  16   r = main(argc, argv);
  17   exit(r);
  18 }
  19 
  20 char*
  21 strcpy(char *s, const char *t)
  22 {
  23   char *os;
  24 
  25   os = s;
  26   while((*s++ = *t++) != 0)
  27     ;
  28   return os;
  29 }
  30 
  31 int
  32 strcmp(const char *p, const char *q)
  33 {
  34   while(*p && *p == *q)
  35     p++, q++;
  36   return (uchar)*p - (uchar)*q;
  37 }
  38 
  39 uint
  40 strlen(const char *s)
  41 {
  42   int n;
  43 
  44   for(n = 0; s[n]; n++)
  45     ;
  46   return n;
  47 }
  48 
  49 void*
  50 memset(void *dst, int c, uint n)
  51 {
  52   char *cdst = (char *) dst;
  53   int i;
  54   for(i = 0; i < n; i++){
  55     cdst[i] = c;
  56   }
  57   return dst;
  58 }
  59 
  60 char*
  61 strchr(const char *s, char c)
  62 {
  63   for(; *s; s++)
  64     if(*s == c)
  65       return (char*)s;
  66   return 0;
  67 }
  68 
  69 char*
  70 gets(char *buf, int max)
  71 {
  72   int i, cc;
  73   char c;
  74 
  75   for(i=0; i+1 < max; ){
  76     cc = read(0, &c, 1);
  77     if(cc < 1)
  78       break;
  79     buf[i++] = c;
  80     if(c == '\n' || c == '\r')
  81       break;
  82   }
  83   buf[i] = '\0';
  84   return buf;
  85 }
  86 
  87 int
  88 stat(const char *n, struct stat *st)
  89 {
  90   int fd;
  91   int r;
  92 
  93   fd = open(n, O_RDONLY);
  94   if(fd < 0)
  95     return -1;
  96   r = fstat(fd, st);
  97   close(fd);
  98   return r;
  99 }
 100 
 101 int
 102 atoi(const char *s)
 103 {
 104   int n;
 105 
 106   n = 0;
 107   while('0' <= *s && *s <= '9')
 108     n = n*10 + *s++ - '0';
 109   return n;
 110 }
 111 
 112 void*
 113 memmove(void *vdst, const void *vsrc, int n)
 114 {
 115   char *dst;
 116   const char *src;
 117 
 118   dst = vdst;
 119   src = vsrc;
 120   if (src > dst) {
 121     while(n-- > 0)
 122       *dst++ = *src++;
 123   } else {
 124     dst += n;
 125     src += n;
 126     while(n-- > 0)
 127       *--dst = *--src;
 128   }
 129   return vdst;
 130 }
 131 
 132 int
 133 memcmp(const void *s1, const void *s2, uint n)
 134 {
 135   const char *p1 = s1, *p2 = s2;
 136   while (n-- > 0) {
 137     if (*p1 != *p2) {
 138       return *p1 - *p2;
 139     }
 140     p1++;
 141     p2++;
 142   }
 143   return 0;
 144 }
 145 
 146 void *
 147 memcpy(void *dst, const void *src, uint n)
 148 {
 149   return memmove(dst, src, n);
 150 }
 151 
 152 char *
 153 sbrk(int n) {
 154   return sys_sbrk(n, SBRK_EAGER);
 155 }
 156 
 157 char *
 158 sbrklazy(int n) {
 159   return sys_sbrk(n, SBRK_LAZY);
 160 }
 161