user/ulib.c
161 lines
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"78//9// wrapper so that it's OK if main() does not call exit().10//11void12start(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}1920char*21strcpy(char *s, const char *t)22{23 char *os;2425 os = s;26 while((*s++ = *t++) != 0)27 ;28 return os;29}3031int32strcmp(const char *p, const char *q)33{34 while(*p && *p == *q)35 p++, q++;36 return (uchar)*p - (uchar)*q;37}3839uint40strlen(const char *s)41{42 int n;4344 for(n = 0; s[n]; n++)45 ;46 return n;47}4849void*50memset(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}5960char*61strchr(const char *s, char c)62{63 for(; *s; s++)64 if(*s == c)65 return (char*)s;66 return 0;67}6869char*70gets(char *buf, int max)71{72 int i, cc;73 char c;7475 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}8687int88stat(const char *n, struct stat *st)89{90 int fd;91 int r;9293 fd = open(n, O_RDONLY);94 if(fd < 0)95 return -1;96 r = fstat(fd, st);97 close(fd);98 return r;99}100101int102atoi(const char *s)103{104 int n;105106 n = 0;107 while('0' <= *s && *s <= '9')108 n = n*10 + *s++ - '0';109 return n;110}111112void*113memmove(void *vdst, const void *vsrc, int n)114{115 char *dst;116 const char *src;117118 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}131132int133memcmp(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}145146void *147memcpy(void *dst, const void *src, uint n)148{149 return memmove(dst, src, n);150}151152char *153sbrk(int n) {154 return sys_sbrk(n, SBRK_EAGER);155}156157char *158sbrklazy(int n) {159 return sys_sbrk(n, SBRK_LAZY);160}161162