summaryrefslogtreecommitdiff
path: root/userspace/syscalls.c
diff options
context:
space:
mode:
authorMichal Idziorek <m.i@gmx.at>2014-10-22 14:06:04 +0200
committerMichal Idziorek <m.i@gmx.at>2014-10-22 14:06:04 +0200
commit95450710a8b8290a110686d78c2357d3920bcda5 (patch)
tree4e3ef7556289bb1c18bce0c6e73235d497364a4d /userspace/syscalls.c
parent17d28200533f6a02d08cee2bf5352036bea92762 (diff)
working on filesys and readdir syscall
Diffstat (limited to 'userspace/syscalls.c')
-rw-r--r--userspace/syscalls.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/userspace/syscalls.c b/userspace/syscalls.c
index f4e77a1..f92541c 100644
--- a/userspace/syscalls.c
+++ b/userspace/syscalls.c
@@ -3,6 +3,8 @@
#include <sys/stat.h>
#include <string.h>
+#include <stdint.h>
+#include "../fs/fs.h"
static int preread;
static int alloc;
@@ -68,6 +70,32 @@ int read(int file, char *ptr, int len)
return ebx;
}
+int readdir(const char *name,fs_dirent *dirs,int max)
+{
+
+ int ebx; // WILL Hold return value;
+
+ asm("pusha");
+
+ // select syscall
+ asm("mov $63,%eax");
+
+ // pass params
+ asm("mov %0,%%edx"::"m"(name));
+ asm("mov %0,%%ecx"::"m"(dirs));
+ asm("mov %0,%%ebx"::"m"(max));
+
+ // interrrupt
+ asm("int $0x80");
+
+ // get return value
+ asm("mov %%ebx, %0": "=b" (ebx));
+
+ asm("popa");
+
+ return ebx;
+}
+
int open(const char *name, int flags, int mode)
{
// easywrite("syscall: open\n");