aboutsummaryrefslogtreecommitdiff
path: root/src/userspace/mlibc
diff options
context:
space:
mode:
authorMarvin Borner2019-12-18 17:59:22 +0100
committerMarvin Borner2019-12-18 17:59:22 +0100
commit07530dd08e0b29573712b54543a7fc42672bb34b (patch)
tree3026395a952e66a489b3fcf24a89d64f2bb6198c /src/userspace/mlibc
parent025709e8643eb24e3360e575564b34ebd8062fd7 (diff)
Added very basic command support
Diffstat (limited to 'src/userspace/mlibc')
-rw-r--r--src/userspace/mlibc/stdio/readline.c15
-rw-r--r--src/userspace/mlibc/string.h6
-rw-r--r--src/userspace/mlibc/string/memcmp.c14
-rw-r--r--src/userspace/mlibc/string/memcpy.c9
-rw-r--r--src/userspace/mlibc/string/memset.c8
5 files changed, 49 insertions, 3 deletions
diff --git a/src/userspace/mlibc/stdio/readline.c b/src/userspace/mlibc/stdio/readline.c
index a7082e6..b948884 100644
--- a/src/userspace/mlibc/stdio/readline.c
+++ b/src/userspace/mlibc/stdio/readline.c
@@ -1,7 +1,16 @@
-// #include <syscall.h>
+#include <syscall.h>
+#include <mlibc/string.h>
+#include <mlibc/stdio.h>
char *readline()
{
- // return (char *) syscall_read();
- return "0";
+ char *ret = "";
+ char buf = 0;
+ while (buf != '\n') {
+ buf = getch();
+ writec(buf);
+ strcpy(ret, buf);
+ }
+ strcpy(ret, buf);
+ return ret;
} \ No newline at end of file
diff --git a/src/userspace/mlibc/string.h b/src/userspace/mlibc/string.h
index fe925cb..153b7cb 100644
--- a/src/userspace/mlibc/string.h
+++ b/src/userspace/mlibc/string.h
@@ -19,4 +19,10 @@ char *strdup(const char *orig);
void strinv(char *str);
+void *memcpy(void *dest, const void *src, size_t count);
+
+void *memset(void *dest, char val, size_t count);
+
+int memcmp(const void *a_ptr, const void *b_ptr, size_t size);
+
#endif
diff --git a/src/userspace/mlibc/string/memcmp.c b/src/userspace/mlibc/string/memcmp.c
new file mode 100644
index 0000000..af2125c
--- /dev/null
+++ b/src/userspace/mlibc/string/memcmp.c
@@ -0,0 +1,14 @@
+#include <stddef.h>
+
+int memcmp(const void *a_ptr, const void *b_ptr, size_t size)
+{
+ const unsigned char *a = (const unsigned char *) a_ptr;
+ const unsigned char *b = (const unsigned char *) b_ptr;
+ for (size_t i = 0; i < size; i++) {
+ if (a[i] < b[i])
+ return -1;
+ else if (b[i] < a[i])
+ return 1;
+ }
+ return 0;
+} \ No newline at end of file
diff --git a/src/userspace/mlibc/string/memcpy.c b/src/userspace/mlibc/string/memcpy.c
new file mode 100644
index 0000000..e4e9c76
--- /dev/null
+++ b/src/userspace/mlibc/string/memcpy.c
@@ -0,0 +1,9 @@
+#include <stddef.h>
+
+void *memcpy(void *dest, const void *src, size_t count)
+{
+ const char *sp = (const char *) src;
+ char *dp = (char *) dest;
+ for (; count != 0; count--) *dp++ = *sp++;
+ return dest;
+} \ No newline at end of file
diff --git a/src/userspace/mlibc/string/memset.c b/src/userspace/mlibc/string/memset.c
new file mode 100644
index 0000000..fb5ab80
--- /dev/null
+++ b/src/userspace/mlibc/string/memset.c
@@ -0,0 +1,8 @@
+#include <stddef.h>
+
+void *memset(void *dest, char val, size_t count)
+{
+ char *temp = (char *) dest;
+ for (; count != 0; count--) *temp++ = val;
+ return dest;
+} \ No newline at end of file