add syscall lseek (not working yet)
some design changes in kernel/systcall.c
This commit is contained in:
parent
2f6bf8219f
commit
4460d92843
2 changed files with 45 additions and 23 deletions
|
@ -25,19 +25,6 @@
|
|||
#include <metalsvm/spinlock.h>
|
||||
#include <metalsvm/time.h>
|
||||
|
||||
static int sys_read(int fd, const char *buf, size_t len)
|
||||
{
|
||||
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)
|
||||
{
|
||||
unsigned int wrotebytes;
|
||||
|
@ -70,7 +57,25 @@ static int sys_close(int fd)
|
|||
per_core(current_task)->fildes_table[fd].offset = 0;
|
||||
return 0;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
static int sys_read(int fd, const char *buf, size_t len)
|
||||
{
|
||||
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 X: %i\n", fd, len, buf, readbytes);
|
||||
/* Beware: still reading above file limit! */
|
||||
return readbytes;
|
||||
}
|
||||
|
||||
static int sys_lseek(int fd, off_t pos, int origin)
|
||||
{
|
||||
return 2;
|
||||
}
|
||||
|
||||
static int sys_sbrk(int incr)
|
||||
{
|
||||
|
@ -113,13 +118,6 @@ int syscall_handler(uint32_t sys_nr, ...)
|
|||
sys_exit(va_arg(vl, uint32_t));
|
||||
ret = 0;
|
||||
break;
|
||||
case __NR_read: {
|
||||
int fd = va_arg(vl, int);
|
||||
const char* buf = va_arg(vl, const char*);
|
||||
size_t len = va_arg(vl, size_t);
|
||||
ret = sys_read(fd, buf, len);
|
||||
break;
|
||||
}
|
||||
case __NR_write: {
|
||||
int fd = va_arg(vl, int);
|
||||
const char* buf = va_arg(vl, const char*);
|
||||
|
@ -139,6 +137,21 @@ int syscall_handler(uint32_t sys_nr, ...)
|
|||
ret = sys_close(fd);
|
||||
break;
|
||||
}
|
||||
case __NR_read: {
|
||||
int fd = va_arg(vl, int);
|
||||
const char* buf = va_arg(vl, const char*);
|
||||
size_t len = va_arg(vl, size_t);
|
||||
ret = sys_read(fd, buf, len);
|
||||
break;
|
||||
}
|
||||
case __NR_lseek: {
|
||||
int fd = va_arg(vl, int);
|
||||
off_t pos = va_arg(vl, off_t);
|
||||
int origin = va_arg(vl, int);
|
||||
ret = sys_lseek(fd, pos, origin);
|
||||
kprintf("hallo!!! %i", ret);
|
||||
break;
|
||||
}
|
||||
case __NR_sbrk: {
|
||||
int incr = va_arg(vl, int);
|
||||
|
||||
|
|
|
@ -24,12 +24,21 @@
|
|||
#undef errno
|
||||
extern int errno;
|
||||
#include "warning.h"
|
||||
#include "syscall.h"
|
||||
|
||||
int
|
||||
_DEFUN (lseek, (file, ptr, dir),
|
||||
_DEFUN (_lseek, (file, ptr, dir),
|
||||
int file _AND
|
||||
int ptr _AND
|
||||
int dir)
|
||||
{
|
||||
return 0;
|
||||
int ret;
|
||||
|
||||
ret = SYSCALL3(__NR_lseek, file, ptr, dir);
|
||||
if (ret < 0) {
|
||||
errno = -ret;
|
||||
ret = -1;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue