From e16eb7ea07f4f0b850d2e2e195c0c9850c1ad9bc Mon Sep 17 00:00:00 2001 From: Marian Ohligs Date: Tue, 12 Apr 2011 13:26:00 +0200 Subject: [PATCH] some cosmetic changes in syscall.c --- kernel/syscall.c | 67 ++++++++++++++++++++++++++---------------------- 1 file changed, 37 insertions(+), 30 deletions(-) diff --git a/kernel/syscall.c b/kernel/syscall.c index 3592738f..91653aca 100644 --- a/kernel/syscall.c +++ b/kernel/syscall.c @@ -24,18 +24,43 @@ #include #include +static int sys_read(int fd, const char *buf, size_t len) +{ + read_fs(per_core(current_task)->fildes_table[fd].node, (uint8_t*)buf, len, per_core(current_task)->fildes_table[fd].offset); + kprintf("fd:%i, Dateilaenge:%i, Dateiinhalt: %s \n", fd, len, buf); + return len; ////////ACHTUNG: liest noch über das Dateiende hinaus +} + static int sys_write(int fd, const char *buf, size_t len) { - int i; + write_fs(per_core(current_task)->fildes_table[fd].node, (uint8_t*)buf, len, per_core(current_task)->fildes_table[fd].offset); + kprintf("ins Dateis. geschr. -- fd:%i, Dateilaenge:%i, Dateiinhalt: %s \n", fd, len, buf); + return len; ////////ACHTUNG: gaukelt dem Benutzer vor alles geschrieben zu haben. +} - if (BUILTIN_EXPECT(!buf, 0)) - return -1; - - for (i = 0; ifildes_table[fd].node == NULL) { + per_core(current_task)->fildes_table[fd].node = findnode_fs((char*) file); + return fd; + } } - - return len; + if (fd >= MAX_FILDES) { + kprintf("Unable to create filedescriptor"); + return -EINVAL; + } + +} + +static int sys_close(int fd) +{ + close_fs(per_core(current_task)->fildes_table[fd].node); + per_core(current_task)->fildes_table[fd].node = NULL; + per_core(current_task)->fildes_table[fd].offset = 0; + return 0; + } int syscall_handler(uint32_t sys_nr, ...) @@ -55,44 +80,26 @@ int syscall_handler(uint32_t sys_nr, ...) int fd = va_arg(vl, int); const char* buf = va_arg(vl, const char*); size_t len = va_arg(vl, size_t); - read_fs(per_core(current_task)->fildes_table[fd].node, (uint8_t*)buf, len, per_core(current_task)->fildes_table[fd].offset); - kprintf("fd:%i, Dateilaenge:%i, Dateiinhalt: %s \n", fd, len, buf); - ret = len; + ret = sys_read(fd, buf, len); break; } case __NR_write: { int fd = va_arg(vl, int); const char* buf = va_arg(vl, const char*); size_t len = va_arg(vl, size_t); - write_fs(per_core(current_task)->fildes_table[fd].node, (uint8_t*)buf, len, per_core(current_task)->fildes_table[fd].offset); - kprintf("ins Dateis. geschr. -- fd:%i, Dateilaenge:%i, Dateiinhalt: %s \n", fd, len, buf); - ret = len; + ret = sys_write(fd, buf, len); break; } case __NR_open: { const char* file = va_arg(vl, const char*); int flags = va_arg(vl, int); int mode = va_arg(vl, int); - int fd; - for (fd = 0; fd < MAX_FILDES; fd++) { - if (per_core(current_task)->fildes_table[fd].node == NULL) { - per_core(current_task)->fildes_table[fd].node = findnode_fs((char*) file); - ret = fd; - break; - } - } - if (fd >= MAX_FILDES) { - kprintf("Unable to create filedescriptor"); - ret = -EINVAL; - } + ret = sys_open(file, flags, mode); break; } case __NR_close: { int fd = va_arg(vl, int); - close_fs(per_core(current_task)->fildes_table[fd].node); - per_core(current_task)->fildes_table[fd].node = NULL; - per_core(current_task)->fildes_table[fd].offset = 0; - ret = 0; + ret = sys_close(fd); break; } case __NR_getpid: