diff src/usr/ulib.c @ 0:83c23a36980d

Init
author Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
date Fri, 26 May 2017 23:11:05 +0900
parents
children 2617849843ec
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/usr/ulib.c	Fri May 26 23:11:05 2017 +0900
@@ -0,0 +1,131 @@
+#include "types.h"
+#include "stat.h"
+#include "fcntl.h"
+#include "user.h"
+
+char*
+strcpy(char *s, 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(char *s)
+{
+    int n;
+    
+    for(n = 0; s[n]; n++)
+        ;
+    return n;
+}
+
+void*
+memset(void *dst, int v, uint n)
+{
+	uint8	*p;
+	uint8	c;
+	uint32	val;
+	uint32	*p4;
+
+	p   = dst;
+	c   = v & 0xff;
+	val = (c << 24) | (c << 16) | (c << 8) | c;
+
+	// set bytes before whole uint32
+	for (; (n > 0) && ((uint)p % 4); n--, p++){
+		*p = c;
+	}
+
+	// set memory 4 bytes a time
+	p4 = (uint*)p;
+
+	for (; n >= 4; n -= 4, p4++) {
+		*p4 = val;
+	}
+
+	// set leftover one byte a time
+	p = (uint8*)p4;
+
+	for (; n > 0; n--, p++) {
+		*p = 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(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, void *vsrc, int n)
+{
+    char *dst, *src;
+    
+    dst = vdst;
+    src = vsrc;
+    while(n-- > 0)
+        *dst++ = *src++;
+    return vdst;
+}