add syscall lseek (not working yet)

some design changes in kernel/systcall.c
This commit is contained in:
Marian Ohligs 2011-05-12 11:29:31 +02:00
parent 2f6bf8219f
commit 4460d92843
2 changed files with 45 additions and 23 deletions

View file

@ -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);

View file

@ -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;
}