some cosmetic changes in syscall.c
This commit is contained in:
parent
be0a6fa72f
commit
e16eb7ea07
1 changed files with 37 additions and 30 deletions
|
@ -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:
|
||||
|
|
Loading…
Add table
Reference in a new issue