diff options
Diffstat (limited to 'userspace/syscalls.c')
| -rw-r--r-- | userspace/syscalls.c | 28 |
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"); |
