xref: /xv6-public/ulib.c (revision e204d0a1)
1d15f0d10Skaashoek #include "types.h"
2d15f0d10Skaashoek #include "stat.h"
3d15f0d10Skaashoek #include "fcntl.h"
49b37d1bfSrsc #include "user.h"
59b37d1bfSrsc 
6c41f1de5Srtm int
7c41f1de5Srtm puts(char *s)
8c41f1de5Srtm {
917a85657Srtm   return write(1, s, strlen(s));
10c41f1de5Srtm }
11c41f1de5Srtm 
12b75c11b2Srsc char*
13b75c11b2Srsc strcpy(char *s, char *t)
14b75c11b2Srsc {
15b75c11b2Srsc   char *os;
16b75c11b2Srsc 
17b75c11b2Srsc   os = s;
18b75c11b2Srsc   while((*s++ = *t++) != 0)
19b75c11b2Srsc     ;
20b75c11b2Srsc   return os;
21b75c11b2Srsc }
2217a85657Srtm 
238b58e810Skaashoek int
248b58e810Skaashoek strcmp(const char *p, const char *q)
258b58e810Skaashoek {
268b58e810Skaashoek   while(*p && *p == *q)
278b58e810Skaashoek     p++, q++;
288b58e810Skaashoek   return (int) ((unsigned char) *p - (unsigned char) *q);
298b58e810Skaashoek }
308b58e810Skaashoek 
3117a85657Srtm unsigned int
3217a85657Srtm strlen(char *s)
3317a85657Srtm {
3417a85657Srtm   int n = 0;
3517a85657Srtm   for(n = 0; s[n]; n++)
3617a85657Srtm     ;
3717a85657Srtm   return n;
3817a85657Srtm }
3917a85657Srtm 
4043572072Srtm void*
4143572072Srtm memset(void *dst, int c, unsigned int n)
4243572072Srtm {
4343572072Srtm   char *d = (char*) dst;
4443572072Srtm 
4543572072Srtm   while(n-- > 0)
4643572072Srtm     *d++ = c;
4743572072Srtm 
4843572072Srtm   return dst;
4943572072Srtm }
5043572072Srtm 
5117a85657Srtm char*
528b58e810Skaashoek strchr(const char *s, char c)
538b58e810Skaashoek {
548b58e810Skaashoek   for(; *s; s++)
558b58e810Skaashoek     if(*s == c)
568b58e810Skaashoek       return (char*) s;
578b58e810Skaashoek   return 0;
588b58e810Skaashoek }
598b58e810Skaashoek 
608b58e810Skaashoek char*
6117a85657Srtm gets(char *buf, int max)
6217a85657Srtm {
6317a85657Srtm   int i = 0, cc;
6417a85657Srtm   char c;
6517a85657Srtm 
6617a85657Srtm   while(i+1 < max){
6717a85657Srtm     cc = read(0, &c, 1);
6817a85657Srtm     if(cc < 1)
6917a85657Srtm       break;
70a059f025Srsc     buf[i++] = c;
7117a85657Srtm     if(c == '\n' || c == '\r')
7217a85657Srtm       break;
7317a85657Srtm   }
7417a85657Srtm   buf[i] = '\0';
7517a85657Srtm   return buf;
7617a85657Srtm }
77d15f0d10Skaashoek 
78d15f0d10Skaashoek int
79d15f0d10Skaashoek stat(char *n, struct stat *st)
80d15f0d10Skaashoek {
81bdb66433Skaashoek   int fd;
82d15f0d10Skaashoek   int r;
83d15f0d10Skaashoek 
84bdb66433Skaashoek   fd = open(n, O_RDONLY);
8548b82470Srsc   if(fd < 0)
8648b82470Srsc     return -1;
87d15f0d10Skaashoek   r = fstat(fd, st);
88d15f0d10Skaashoek   close(fd);
89d15f0d10Skaashoek   return r;
90d15f0d10Skaashoek }
91*e204d0a1Srsc 
92*e204d0a1Srsc int
93*e204d0a1Srsc atoi(const char *s)
94*e204d0a1Srsc {
95*e204d0a1Srsc   int n;
96*e204d0a1Srsc 
97*e204d0a1Srsc   n = 0;
98*e204d0a1Srsc   while('0' <= *s && *s <= '9')
99*e204d0a1Srsc     n = n*10 + *s++ - '0';
100*e204d0a1Srsc   return n;
101*e204d0a1Srsc }
102