From 2a6c555082b47e0d78645b598c57c721a857d3af Mon Sep 17 00:00:00 2001 From: Jacek Galowicz Date: Thu, 14 Apr 2011 17:21:17 +0200 Subject: [PATCH] File read/write offset Added offset integration. --- kernel/syscall.c | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/kernel/syscall.c b/kernel/syscall.c index d55ee699..74b7d653 100644 --- a/kernel/syscall.c +++ b/kernel/syscall.c @@ -26,17 +26,29 @@ 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 + unsigned int readbytes; + readbytes = read_fs( + per_core(current_task)->fildes_table[fd].node, + (uint8_t*)buf, len, + per_core(current_task)->fildes_table[fd].offset); + per_core(current_task)->fildes_table[fd].offset += readbytes; + /*kprintf("fd:%i, Dateilaenge:%i, Dateiinhalt: %s \n", fd, len, buf);*/ + /* Beware: still reading above file limit! */ + return readbytes; } static int sys_write(int fd, const char *buf, size_t len) { - //per_core(current_task)->fildes_table[fd].node->write = 1; - write_fs(per_core(current_task)->fildes_table[fd].node, (uint8_t*)buf, len, 0);//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. + unsigned int wrotebytes; + /* per_core(current_task)->fildes_table[fd].node->write = 1; */ + wrotebytes = write_fs( + per_core(current_task)->fildes_table[fd].node, + (uint8_t*)buf, len, 0); + /* per_core(current_task)->fildes_table[fd].offset); */ + /* kprintf("ins Dateis. geschr. -- fd:%i, Dateilaenge:%i, Dateiinhalt: %s \n", fd, len, buf); */ + per_core(current_task)->fildes_table[fd].offset += wrotebytes; + + return wrotebytes; } static int sys_open(const char* file, int flags, int mode)