From 56084556bb8746159fb6b72a6aa3dc05704654bc Mon Sep 17 00:00:00 2001 From: Jonas 'Sortie' Termansen Date: Sat, 14 Jan 2012 16:37:21 +0100 Subject: [PATCH] Added stubs for truncate(2) and ftruncate(3). --- libmaxsi/c/hsrc/unistd.h | 4 ++-- libmaxsi/io.cpp | 12 ++++++++++++ sortix/filesystem.cpp | 16 ++++++++++++++++ sortix/syscallnum.h | 4 +++- 4 files changed, 33 insertions(+), 3 deletions(-) diff --git a/libmaxsi/c/hsrc/unistd.h b/libmaxsi/c/hsrc/unistd.h index 45623a3e..9cc326b3 100644 --- a/libmaxsi/c/hsrc/unistd.h +++ b/libmaxsi/c/hsrc/unistd.h @@ -102,7 +102,6 @@ int fdatasync(int); int fexecve(int, char* const [], char* const []); long fpathconf(int, int); int fsync(int); -int ftruncate(int, off_t); gid_t getegid(void); uid_t geteuid(void); gid_t getgid(void); @@ -142,7 +141,6 @@ void sync(void); long sysconf(int); pid_t tcgetpgrp(int); int tcsetpgrp(int, pid_t); -int truncate(const char*, off_t); char* ttyname(int); int ttyname_r(int, char*, size_t); int unlinkat(int, const char*, int); @@ -160,6 +158,7 @@ int close(int); int dup(int); void _exit(int); pid_t fork(void); +int ftruncate(int, off_t); char* getcwd(char*, size_t); pid_t getpid(void); pid_t getppid(void); @@ -169,6 +168,7 @@ int pipe(int [2]); ssize_t read(int, void*, size_t); int rmdir(const char*); unsigned sleep(unsigned); +int truncate(const char*, off_t); #if __POSIX_OBSOLETE <= 200112 || defined(SORTIX_EXTENSIONS) int usleep(useconds_t useconds); #endif diff --git a/libmaxsi/io.cpp b/libmaxsi/io.cpp index 8c640271..63ba675a 100644 --- a/libmaxsi/io.cpp +++ b/libmaxsi/io.cpp @@ -53,6 +53,8 @@ namespace Maxsi DEFN_SYSCALL3_VOID(SysSeek, SYSCALL_SEEK, int, off_t*, int); DEFN_SYSCALL2(int, SysMkDir, SYSCALL_MKDIR, const char*, mode_t); DEFN_SYSCALL1(int, SysRmDir, SYSCALL_RMDIR, const char*); + DEFN_SYSCALL2(int, SysTruncate, SYSCALL_TRUNCATE, const char*, off_t); + DEFN_SYSCALL2(int, SysFTruncate, SYSCALL_FTRUNCATE, int, off_t); size_t Print(const char* string) { @@ -268,6 +270,16 @@ namespace Maxsi return SysRmDir(pathname); } + extern "C" int truncate(const char* pathname, off_t length) + { + return SysTruncate(pathname, length); + } + + extern "C" int ftruncate(int fd, off_t length) + { + return SysFTruncate(fd, length); + } + extern "C" int isatty(int fd) { return SysIsATTY(fd); diff --git a/sortix/filesystem.cpp b/sortix/filesystem.cpp index dfc1a987..c150cf3d 100644 --- a/sortix/filesystem.cpp +++ b/sortix/filesystem.cpp @@ -97,12 +97,28 @@ namespace Sortix return -1; } + int SysTruncate(const char* pathname, off_t length) + { + // TODO: Add the proper filesystem support! + Error::Set(ENOSYS); + return -1; + } + + int SysFTruncate(const char* pathname, off_t length) + { + // TODO: Add the proper filesystem support! + Error::Set(ENOSYS); + return -1; + } + void Init() { Syscall::Register(SYSCALL_OPEN, (void*) SysOpen); Syscall::Register(SYSCALL_UNLINK, (void*) SysUnlink); Syscall::Register(SYSCALL_MKDIR, (void*) SysMkDir); Syscall::Register(SYSCALL_RMDIR, (void*) SysRmDir); + Syscall::Register(SYSCALL_TRUNCATE, (void*) SysTruncate); + Syscall::Register(SYSCALL_FTRUNCATE, (void*) SysFTruncate); } } diff --git a/sortix/syscallnum.h b/sortix/syscallnum.h index 77ba3d0e..4dd36f11 100644 --- a/sortix/syscallnum.h +++ b/sortix/syscallnum.h @@ -65,7 +65,9 @@ #define SYSCALL_GET_PAGE_SIZE 37 #define SYSCALL_MKDIR 38 #define SYSCALL_RMDIR 39 -#define SYSCALL_MAX_NUM 40 /* index of highest constant + 1 */ +#define SYSCALL_TRUNCATE 40 +#define SYSCALL_FTRUNCATE 41 +#define SYSCALL_MAX_NUM 42 /* index of highest constant + 1 */ #endif