xref: /xv6-public/ulib.c (revision dca5b5ca)
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++;
28115e1774Srsc   return (uchar)*p - (uchar)*q;
298b58e810Skaashoek }
308b58e810Skaashoek 
31115e1774Srsc uint
3217a85657Srtm strlen(char *s)
3317a85657Srtm {
34*dca5b5caSrsc   int n;
35*dca5b5caSrsc 
3617a85657Srtm   for(n = 0; s[n]; n++)
3717a85657Srtm     ;
3817a85657Srtm   return n;
3917a85657Srtm }
4017a85657Srtm 
4143572072Srtm void*
42115e1774Srsc memset(void *dst, int c, uint n)
4343572072Srtm {
44*dca5b5caSrsc   char *d;
4543572072Srtm 
46*dca5b5caSrsc   d = dst;
4743572072Srtm   while(n-- > 0)
4843572072Srtm     *d++ = c;
4943572072Srtm   return dst;
5043572072Srtm }
5143572072Srtm 
5217a85657Srtm char*
538b58e810Skaashoek strchr(const char *s, char c)
548b58e810Skaashoek {
558b58e810Skaashoek   for(; *s; s++)
568b58e810Skaashoek     if(*s == c)
578b58e810Skaashoek       return (char*) s;
588b58e810Skaashoek   return 0;
598b58e810Skaashoek }
608b58e810Skaashoek 
618b58e810Skaashoek char*
6217a85657Srtm gets(char *buf, int max)
6317a85657Srtm {
64*dca5b5caSrsc   int i, cc;
6517a85657Srtm   char c;
6617a85657Srtm 
67*dca5b5caSrsc   for(i=0; i+1 < max; ){
6817a85657Srtm     cc = read(0, &c, 1);
6917a85657Srtm     if(cc < 1)
7017a85657Srtm       break;
71a059f025Srsc     buf[i++] = c;
7217a85657Srtm     if(c == '\n' || c == '\r')
7317a85657Srtm       break;
7417a85657Srtm   }
7517a85657Srtm   buf[i] = '\0';
7617a85657Srtm   return buf;
7717a85657Srtm }
78d15f0d10Skaashoek 
79d15f0d10Skaashoek int
80d15f0d10Skaashoek stat(char *n, struct stat *st)
81d15f0d10Skaashoek {
82bdb66433Skaashoek   int fd;
83d15f0d10Skaashoek   int r;
84d15f0d10Skaashoek 
85bdb66433Skaashoek   fd = open(n, O_RDONLY);
8648b82470Srsc   if(fd < 0)
8748b82470Srsc     return -1;
88d15f0d10Skaashoek   r = fstat(fd, st);
89d15f0d10Skaashoek   close(fd);
90d15f0d10Skaashoek   return r;
91d15f0d10Skaashoek }
92e204d0a1Srsc 
93e204d0a1Srsc int
94e204d0a1Srsc atoi(const char *s)
95e204d0a1Srsc {
96e204d0a1Srsc   int n;
97e204d0a1Srsc 
98e204d0a1Srsc   n = 0;
99e204d0a1Srsc   while('0' <= *s && *s <= '9')
100e204d0a1Srsc     n = n*10 + *s++ - '0';
101e204d0a1Srsc   return n;
102e204d0a1Srsc }
103