00001 #include "types.h"
00002 #include "stat.h"
00003 #include "fcntl.h"
00004 #include "user.h"
00005 #include "x86.h"
00006
00007 char*
00008 strcpy(char *s, char *t)
00009 {
00010 char *os;
00011
00012 os = s;
00013 while((*s++ = *t++) != 0)
00014 ;
00015 return os;
00016 }
00017
00018 int
00019 strcmp(const char *p, const char *q)
00020 {
00021 while(*p && *p == *q)
00022 p++, q++;
00023 return (uchar)*p - (uchar)*q;
00024 }
00025
00026 uint
00027 strlen(char *s)
00028 {
00029 int n;
00030
00031 for(n = 0; s[n]; n++)
00032 ;
00033 return n;
00034 }
00035
00036 void*
00037 memset(void *dst, int c, uint n)
00038 {
00039 stosb(dst, c, n);
00040 return dst;
00041 }
00042
00043 char*
00044 strchr(const char *s, char c)
00045 {
00046 for(; *s; s++)
00047 if(*s == c)
00048 return (char*) s;
00049 return 0;
00050 }
00051
00052 char*
00053 gets(char *buf, int max)
00054 {
00055 int i, cc;
00056 char c;
00057
00058 for(i=0; i+1 < max; ){
00059 cc = read(0, &c, 1);
00060 if(cc < 1)
00061 break;
00062 buf[i++] = c;
00063 if(c == '\n' || c == '\r')
00064 break;
00065 }
00066 buf[i] = '\0';
00067 return buf;
00068 }
00069
00070 int
00071 stat(char *n, struct stat *st)
00072 {
00073 int fd;
00074 int r;
00075
00076 fd = open(n, O_RDONLY);
00077 if(fd < 0)
00078 return -1;
00079 r = fstat(fd, st);
00080 close(fd);
00081 return r;
00082 }
00083
00084 int
00085 atoi(const char *s)
00086 {
00087 int n;
00088
00089 n = 0;
00090 while('0' <= *s && *s <= '9')
00091 n = n*10 + *s++ - '0';
00092 return n;
00093 }
00094
00095 void*
00096 memmove(void *vdst, void *vsrc, int n)
00097 {
00098 char *dst, *src;
00099
00100 dst = vdst;
00101 src = vsrc;
00102 while(n-- > 0)
00103 *dst++ = *src++;
00104 return vdst;
00105 }
00106
00107 void *
00108 memcpy(void *dst, const void *src, uint n)
00109 {
00110 return memmove(dst, src, n);
00111 }