summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/panic.c8
-rw-r--r--lib/stdio.c14
-rw-r--r--lib/string.c56
3 files changed, 49 insertions, 29 deletions
diff --git a/lib/panic.c b/lib/panic.c
new file mode 100644
index 0000000..a3eb0af
--- /dev/null
+++ b/lib/panic.c
@@ -0,0 +1,8 @@
+#include <unistd.h>
+
+void panic(void) {
+ __asm__ volatile (
+ "int $0x80"
+ :: "a" (__SYS_panic)
+ );
+}
diff --git a/lib/stdio.c b/lib/stdio.c
index 7eac64c..b1c00ba 100644
--- a/lib/stdio.c
+++ b/lib/stdio.c
@@ -1,11 +1,23 @@
#include <stdarg.h>
#include <stdio.h>
+#include <string.h>
#include <sys/types.h>
#include <unistd.h>
-_syscall1(int, puts, char*, s);
_syscall1(int, ctty, int, ctty);
_syscall2(ssize_t, read, void*, buf, size_t, len);
+_syscall2(ssize_t, write, void*, buf, size_t, len);
+
+int puts(char *s) {
+ size_t len = strlen(s);
+ ssize_t ret;
+
+ ret = write(s, len);
+ if(ret < 0)
+ return EOF;
+
+ return 0;
+}
int printf(char *fmt, ...) {
int ret;
diff --git a/lib/string.c b/lib/string.c
index 0e8fbeb..e8659ad 100644
--- a/lib/string.c
+++ b/lib/string.c
@@ -1,6 +1,6 @@
#include <string.h>
-void* memchr(const void* s, int c, size_t n) {
+void *memchr(const void *s, int c, size_t n) {
unsigned char *p = (unsigned char*) s;
while(n--) {
if(*p != (unsigned char) c) {
@@ -12,9 +12,9 @@ void* memchr(const void* s, int c, size_t n) {
return 0;
}
-int memcmp(const void* s1, const void* s2, size_t n) {
- const unsigned char* p1 = (const unsigned char*) s1;
- const unsigned char* p2 = (const unsigned char*) s2;
+int memcmp(const void *s1, const void *s2, size_t n) {
+ const unsigned char *p1 = (const unsigned char*) s1;
+ const unsigned char *p2 = (const unsigned char*) s2;
while(n--) {
if(*p1 != *p2) {
return *p1 - *p2;
@@ -25,33 +25,33 @@ int memcmp(const void* s1, const void* s2, size_t n) {
return 0;
}
-void* memcpy(void* dest, const void* src, size_t n) {
+void *memcpy(void *dest, const void *src, size_t n) {
char *dp = (char*) dest;
const char *sp = (const char*) src;
while(n--) *dp++ = *sp++;
return dest;
}
-void* memmove(void* dest, const void* src, size_t n) {
+void *memmove(void *dest, const void *src, size_t n) {
unsigned char tmp[n];
memcpy(tmp, src, n);
memcpy(dest, tmp, n);
return dest;
}
-void* memset(void* s, int c, size_t n) {
- unsigned char* p = (unsigned char*) s;
+void *memset(void *s, int c, size_t n) {
+ unsigned char *p = (unsigned char*) s;
while(n--) *p++ = (unsigned char) c;
return s;
}
-size_t strlen(const char* str) {
- const char* s;
+size_t strlen(const char *str) {
+ const char *s;
for(s = str; *s; ++s) {}
return (s - str);
}
-char* strcat(char* dest, const char* src) {
+char *strcat(char *dest, const char *src) {
size_t dest_len = strlen(dest);
size_t i;
@@ -62,7 +62,7 @@ char* strcat(char* dest, const char* src) {
return dest;
}
-char* strncat(char* dest, const char* src, size_t n) {
+char *strncat(char *dest, const char *src, size_t n) {
size_t dest_len = strlen(dest);
size_t i;
@@ -73,27 +73,27 @@ char* strncat(char* dest, const char* src, size_t n) {
return dest;
}
-char* strchr(const char* s, int c) {
+char *strchr(const char *s, int c) {
while(*s != (char) c) {
if(!*s++) return 0;
}
return (char*) s;
}
-char* strrchr(char* s, int c) {
- char* ret = 0;
+char *strrchr(char *s, int c) {
+ char *ret = 0;
do {
if(*s == (char) c) ret = s;
} while(*s++);
return ret;
}
-int strcmp(const char* s1, const char* s2) {
+int strcmp(const char *s1, const char *s2) {
while(*s1 && (*s1 == *s2)) s1++, s2++;
return *(const unsigned char*) s1 - *(const unsigned char*) s2;
}
-int strncmp(const char* s1, const char* s2, size_t n) {
+int strncmp(const char *s1, const char *s2, size_t n) {
while(n--) {
if(*s1++ != *s2++) {
return *(unsigned char*) (s1 - 1) - *(unsigned char*) (s2 - 1);
@@ -102,14 +102,14 @@ int strncmp(const char* s1, const char* s2, size_t n) {
return 0;
}
-char* strcpy(char* dest, const char* src) {
- char* ret = dest;
+char *strcpy(char *dest, const char *src) {
+ char *ret = dest;
while(*dest++ = *src++);
return ret;
}
-char* strncpy(char* dest, const char* src, size_t n) {
- char* ret = dest;
+char *strncpy(char *dest, const char *src, size_t n) {
+ char *ret = dest;
do {
if(!n--) return ret;
} while (*dest++ = *src++);
@@ -117,7 +117,7 @@ char* strncpy(char* dest, const char* src, size_t n) {
return ret;
}
-size_t strcspn(const char* s1, const char* s2) {
+size_t strcspn(const char *s1, const char *s2) {
size_t ret = 0;
while(*s1) {
if(strchr(s2, *s1)) {
@@ -129,20 +129,20 @@ size_t strcspn(const char* s1, const char* s2) {
return ret;
}
-size_t strspn(const char* s1, const char* s2) {
+size_t strspn(const char *s1, const char *s2) {
size_t ret = 0;
while(*s1 && strchr(s2, *s1++)) ret++;
return ret;
}
-char* strpbrk(const char* s1, const char* s2) {
+char *strpbrk(const char *s1, const char *s2) {
while(*s1) {
if(strchr(s2, *s1++)) return (char*) --s1;
}
return 0;
}
-char* strstr(const char* s1, const char* s2) {
+char *strstr(const char *s1, const char *s2) {
size_t n = strlen(s2);
while(*s1) {
if(!memcmp(s1++, s2, n)) {
@@ -152,8 +152,8 @@ char* strstr(const char* s1, const char* s2) {
return 0;
}
-char* strtok(char* str, const char* delim) {
- static char* p = 0;
+char *strtok(char *str, const char *delim) {
+ static char *p = 0;
if(str) {
p = str;
} else if(!p) {
@@ -166,7 +166,7 @@ char* strtok(char* str, const char* delim) {
return str;
}
-size_t strxfrm(char* dest, const char* src, size_t n) {
+size_t strxfrm(char *dest, const char *src, size_t n) {
size_t n2 = strlen(src);
if(n > n2) strcpy(dest, src);
return n2;