xref: /xv6-public/ulib.c (revision 308a3b88)
1d15f0d10Skaashoek #include "types.h"
2d15f0d10Skaashoek #include "stat.h"
3d15f0d10Skaashoek #include "fcntl.h"
49b37d1bfSrsc #include "user.h"
582201353Srsc #include "x86.h"
69b37d1bfSrsc 
7b75c11b2Srsc char*
strcpy(char * s,const char * t)8*308a3b88SFrans Kaashoek strcpy(char *s, const char *t)
9b75c11b2Srsc {
10b75c11b2Srsc   char *os;
11b75c11b2Srsc 
12b75c11b2Srsc   os = s;
13b75c11b2Srsc   while((*s++ = *t++) != 0)
14b75c11b2Srsc     ;
15b75c11b2Srsc   return os;
16b75c11b2Srsc }
1717a85657Srtm 
188b58e810Skaashoek int
strcmp(const char * p,const char * q)198b58e810Skaashoek strcmp(const char *p, const char *q)
208b58e810Skaashoek {
218b58e810Skaashoek   while(*p && *p == *q)
228b58e810Skaashoek     p++, q++;
23115e1774Srsc   return (uchar)*p - (uchar)*q;
248b58e810Skaashoek }
258b58e810Skaashoek 
26115e1774Srsc uint
strlen(const char * s)27*308a3b88SFrans Kaashoek strlen(const char *s)
2817a85657Srtm {
29dca5b5caSrsc   int n;
30dca5b5caSrsc 
3117a85657Srtm   for(n = 0; s[n]; n++)
3217a85657Srtm     ;
3317a85657Srtm   return n;
3417a85657Srtm }
3517a85657Srtm 
3643572072Srtm void*
memset(void * dst,int c,uint n)37115e1774Srsc memset(void *dst, int c, uint n)
3843572072Srtm {
3982201353Srsc   stosb(dst, c, n);
4043572072Srtm   return dst;
4143572072Srtm }
4243572072Srtm 
4317a85657Srtm char*
strchr(const char * s,char c)448b58e810Skaashoek strchr(const char *s, char c)
458b58e810Skaashoek {
468b58e810Skaashoek   for(; *s; s++)
478b58e810Skaashoek     if(*s == c)
488b58e810Skaashoek       return (char*)s;
498b58e810Skaashoek   return 0;
508b58e810Skaashoek }
518b58e810Skaashoek 
528b58e810Skaashoek char*
gets(char * buf,int max)5317a85657Srtm gets(char *buf, int max)
5417a85657Srtm {
55dca5b5caSrsc   int i, cc;
5617a85657Srtm   char c;
5717a85657Srtm 
58dca5b5caSrsc   for(i=0; i+1 < max; ){
5917a85657Srtm     cc = read(0, &c, 1);
6017a85657Srtm     if(cc < 1)
6117a85657Srtm       break;
62a059f025Srsc     buf[i++] = c;
6317a85657Srtm     if(c == '\n' || c == '\r')
6417a85657Srtm       break;
6517a85657Srtm   }
6617a85657Srtm   buf[i] = '\0';
6717a85657Srtm   return buf;
6817a85657Srtm }
69d15f0d10Skaashoek 
70d15f0d10Skaashoek int
stat(const char * n,struct stat * st)71*308a3b88SFrans Kaashoek stat(const char *n, struct stat *st)
72d15f0d10Skaashoek {
73bdb66433Skaashoek   int fd;
74d15f0d10Skaashoek   int r;
75d15f0d10Skaashoek 
76bdb66433Skaashoek   fd = open(n, O_RDONLY);
7748b82470Srsc   if(fd < 0)
7848b82470Srsc     return -1;
79d15f0d10Skaashoek   r = fstat(fd, st);
80d15f0d10Skaashoek   close(fd);
81d15f0d10Skaashoek   return r;
82d15f0d10Skaashoek }
83e204d0a1Srsc 
84e204d0a1Srsc int
atoi(const char * s)85e204d0a1Srsc atoi(const char *s)
86e204d0a1Srsc {
87e204d0a1Srsc   int n;
88e204d0a1Srsc 
89e204d0a1Srsc   n = 0;
90e204d0a1Srsc   while('0' <= *s && *s <= '9')
91e204d0a1Srsc     n = n*10 + *s++ - '0';
92e204d0a1Srsc   return n;
93e204d0a1Srsc }
94eaea18cbSrsc 
95eaea18cbSrsc void*
memmove(void * vdst,const void * vsrc,int n)96*308a3b88SFrans Kaashoek memmove(void *vdst, const void *vsrc, int n)
97eaea18cbSrsc {
98*308a3b88SFrans Kaashoek   char *dst;
99*308a3b88SFrans Kaashoek   const char *src;
100eaea18cbSrsc 
101eaea18cbSrsc   dst = vdst;
102eaea18cbSrsc   src = vsrc;
103eaea18cbSrsc   while(n-- > 0)
104eaea18cbSrsc     *dst++ = *src++;
105eaea18cbSrsc   return vdst;
106eaea18cbSrsc }
107