summaryrefslogtreecommitdiff
path: root/user/ulib.c
diff options
context:
space:
mode:
Diffstat (limited to 'user/ulib.c')
-rw-r--r--user/ulib.c109
1 files changed, 109 insertions, 0 deletions
diff --git a/user/ulib.c b/user/ulib.c
new file mode 100644
index 0000000..ddda0f5
--- /dev/null
+++ b/user/ulib.c
@@ -0,0 +1,109 @@
+#include "kernel/types.h"
+#include "kernel/stat.h"
+#include "kernel/fcntl.h"
+#include "user/user.h"
+
+char*
+strcpy(char *s, const char *t)
+{
+ char *os;
+
+ os = s;
+ while((*s++ = *t++) != 0)
+ ;
+ return os;
+}
+
+int
+strcmp(const char *p, const char *q)
+{
+ while(*p && *p == *q)
+ p++, q++;
+ return (uchar)*p - (uchar)*q;
+}
+
+uint
+strlen(const char *s)
+{
+ int n;
+
+ for(n = 0; s[n]; n++)
+ ;
+ return n;
+}
+
+void*
+memset(void *dst, int c, uint n)
+{
+ char *cdst = (char *) dst;
+ int i;
+ for(i = 0; i < n; i++){
+ cdst[i] = c;
+ }
+ return dst;
+}
+
+char*
+strchr(const char *s, char c)
+{
+ for(; *s; s++)
+ if(*s == c)
+ return (char*)s;
+ return 0;
+}
+
+char*
+gets(char *buf, int max)
+{
+ int i, cc;
+ char c;
+
+ for(i=0; i+1 < max; ){
+ cc = read(0, &c, 1);
+ if(cc < 1)
+ break;
+ buf[i++] = c;
+ if(c == '\n' || c == '\r')
+ break;
+ }
+ buf[i] = '\0';
+ return buf;
+}
+
+int
+stat(const char *n, struct stat *st)
+{
+ int fd;
+ int r;
+
+ fd = open(n, O_RDONLY);
+ if(fd < 0)
+ return -1;
+ r = fstat(fd, st);
+ close(fd);
+ return r;
+}
+
+int
+atoi(const char *s)
+{
+ int n;
+
+ n = 0;
+ while('0' <= *s && *s <= '9')
+ n = n*10 + *s++ - '0';
+ return n;
+}
+
+void*
+memmove(void *vdst, const void *vsrc, int n)
+{
+ char *dst;
+ const char *src;
+
+ dst = vdst;
+ src = vsrc;
+ while(n-- > 0)
+ *dst++ = *src++;
+ return vdst;
+}