some cosmetic changes in syscall.c

This commit is contained in:
Marian Ohligs 2011-04-12 13:26:00 +02:00
parent be0a6fa72f
commit e16eb7ea07

View file

@ -24,18 +24,43 @@
#include <metalsvm/string.h>
#include <metalsvm/errno.h>
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; i<len; i++, buf++) {
kputchar(*buf);
static int sys_open(const char* file, int flags, int mode)
{
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);
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: