Mercurial > hg > Members > innparusu > xv6-rpi
diff src/usr/ulib.c @ 0:83c23a36980d
Init
author | Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 26 May 2017 23:11:05 +0900 |
parents | |
children | 2617849843ec |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/usr/ulib.c Fri May 26 23:11:05 2017 +0900 @@ -0,0 +1,131 @@ +#include "types.h" +#include "stat.h" +#include "fcntl.h" +#include "user.h" + +char* +strcpy(char *s, char *t) +{ + char *os; + + os = s; + while((*s++ = *t++) != 0) + ; + return os; +} + +int +strcmp(const char *p, const char *q) +{ + while(*p && *p == *q) + p++, q++; + return (uchar)*p - (uchar)*q; +} + +uint +strlen(char *s) +{ + int n; + + for(n = 0; s[n]; n++) + ; + return n; +} + +void* +memset(void *dst, int v, uint n) +{ + uint8 *p; + uint8 c; + uint32 val; + uint32 *p4; + + p = dst; + c = v & 0xff; + val = (c << 24) | (c << 16) | (c << 8) | c; + + // set bytes before whole uint32 + for (; (n > 0) && ((uint)p % 4); n--, p++){ + *p = c; + } + + // set memory 4 bytes a time + p4 = (uint*)p; + + for (; n >= 4; n -= 4, p4++) { + *p4 = val; + } + + // set leftover one byte a time + p = (uint8*)p4; + + for (; n > 0; n--, p++) { + *p = c; + } + + return dst; +} + +char* +strchr(const char *s, char c) +{ + for(; *s; s++) + if(*s == c) + return (char*)s; + return 0; +} + +char* +gets(char *buf, int max) +{ + int i, cc; + char c; + + for(i=0; i+1 < max; ){ + cc = read(0, &c, 1); + if(cc < 1) + break; + buf[i++] = c; + if(c == '\n' || c == '\r') + break; + } + buf[i] = '\0'; + return buf; +} + +int +stat(char *n, struct stat *st) +{ + int fd; + int r; + + fd = open(n, O_RDONLY); + if(fd < 0) + return -1; + r = fstat(fd, st); + close(fd); + return r; +} + +int +atoi(const char *s) +{ + int n; + + n = 0; + while('0' <= *s && *s <= '9') + n = n*10 + *s++ - '0'; + return n; +} + +void* +memmove(void *vdst, void *vsrc, int n) +{ + char *dst, *src; + + dst = vdst; + src = vsrc; + while(n-- > 0) + *dst++ = *src++; + return vdst; +}