xref: /xv6-public/ulib.c (revision 308a3b88)
1 #include "types.h"
2 #include "stat.h"
3 #include "fcntl.h"
4 #include "user.h"
5 #include "x86.h"
6 
7 char*
strcpy(char * s,const char * t)8 strcpy(char *s, const char *t)
9 {
10   char *os;
11 
12   os = s;
13   while((*s++ = *t++) != 0)
14     ;
15   return os;
16 }
17 
18 int
strcmp(const char * p,const char * q)19 strcmp(const char *p, const char *q)
20 {
21   while(*p && *p == *q)
22     p++, q++;
23   return (uchar)*p - (uchar)*q;
24 }
25 
26 uint
strlen(const char * s)27 strlen(const char *s)
28 {
29   int n;
30 
31   for(n = 0; s[n]; n++)
32     ;
33   return n;
34 }
35 
36 void*
memset(void * dst,int c,uint n)37 memset(void *dst, int c, uint n)
38 {
39   stosb(dst, c, n);
40   return dst;
41 }
42 
43 char*
strchr(const char * s,char c)44 strchr(const char *s, char c)
45 {
46   for(; *s; s++)
47     if(*s == c)
48       return (char*)s;
49   return 0;
50 }
51 
52 char*
gets(char * buf,int max)53 gets(char *buf, int max)
54 {
55   int i, cc;
56   char c;
57 
58   for(i=0; i+1 < max; ){
59     cc = read(0, &c, 1);
60     if(cc < 1)
61       break;
62     buf[i++] = c;
63     if(c == '\n' || c == '\r')
64       break;
65   }
66   buf[i] = '\0';
67   return buf;
68 }
69 
70 int
stat(const char * n,struct stat * st)71 stat(const char *n, struct stat *st)
72 {
73   int fd;
74   int r;
75 
76   fd = open(n, O_RDONLY);
77   if(fd < 0)
78     return -1;
79   r = fstat(fd, st);
80   close(fd);
81   return r;
82 }
83 
84 int
atoi(const char * s)85 atoi(const char *s)
86 {
87   int n;
88 
89   n = 0;
90   while('0' <= *s && *s <= '9')
91     n = n*10 + *s++ - '0';
92   return n;
93 }
94 
95 void*
memmove(void * vdst,const void * vsrc,int n)96 memmove(void *vdst, const void *vsrc, int n)
97 {
98   char *dst;
99   const char *src;
100 
101   dst = vdst;
102   src = vsrc;
103   while(n-- > 0)
104     *dst++ = *src++;
105   return vdst;
106 }
107