From 7c9a48b4e6d66cf4f62e7bad9e22ab06923e47ef Mon Sep 17 00:00:00 2001 From: Alex AUVOLAT Date: Thu, 17 May 2012 13:30:09 +0200 Subject: Beginning of a VFS implemented. C++ is great. --- src/user/lib/tce/syscall.c | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) (limited to 'src/user/lib/tce/syscall.c') diff --git a/src/user/lib/tce/syscall.c b/src/user/lib/tce/syscall.c index c7965a9..4e81475 100644 --- a/src/user/lib/tce/syscall.c +++ b/src/user/lib/tce/syscall.c @@ -1,6 +1,7 @@ #include #include #include +#include static size_t call(size_t a, size_t b, size_t c, size_t d, size_t e, size_t f) { size_t ret; @@ -62,6 +63,8 @@ int proc_priv() { return call(SC_PROC_PRIV, 0, 0, 0, 0, 0); } +// ******** memory + void* sbrk(size_t s) { return (void*)call(SC_SBRK, s, 0, 0, 0, 0); } @@ -69,3 +72,41 @@ void* sbrk(size_t s) { void brk(void* ptr) { return call (SC_BRK, ptr, 0, 0, 0, 0); } + +// ********** file + +FILE open(char* filename, int mode) { + return call(SC_OPEN, (unsigned)filename, mode, 0, 0, 0); +} + +FILE open_relative(FILE root, char* filename, int mode) { + return call(SC_OPEN_RELATIVE, root, (unsigned) filename, mode, 0, 0); +} + +int stat(char* filename, file_info *info) { + return call(SC_STAT, (unsigned) filename, (unsigned) info, 0, 0, 0); +} + +int stat_relative(FILE root, char* filename, file_info *info) { + return call(SC_STAT_RELATIVE, root, (unsigned) filename, (unsigned) info, 0, 0); +} + +int statf(FILE file, file_info *info) { + return call(SC_STATF, file, (unsigned)info, 0, 0, 0); +} + +void close(FILE file) { + call(SC_CLOSE, file, 0, 0, 0, 0); +} + +int read(FILE file, size_t offset, size_t len, char *buffer) { + return call(SC_READ, file, offset, len, (unsigned) buffer, 0); +} + +int write(FILE file, size_t offset, size_t len, char* buffer) { + return call(SC_WRITE, file, offset, len, (unsigned) buffer, 0); +} + +int link(char* from, char* to, int mode) { + return call(SC_LINK, (unsigned) from, (unsigned)to, mode, 0, 0); +} -- cgit v1.2.3