diff --git a/libmaxsi/c/hsrc/sys/stat.h b/libmaxsi/c/hsrc/sys/stat.h index 5a6cd294..c09fb126 100644 --- a/libmaxsi/c/hsrc/sys/stat.h +++ b/libmaxsi/c/hsrc/sys/stat.h @@ -31,8 +31,11 @@ __BEGIN_DECLS +@include(mode_t.h) @include(mode_t_values.h) +int mkdir(const char *path, mode_t mode); + __END_DECLS #endif diff --git a/libmaxsi/c/hsrc/unistd.h b/libmaxsi/c/hsrc/unistd.h index 8e916215..45623a3e 100644 --- a/libmaxsi/c/hsrc/unistd.h +++ b/libmaxsi/c/hsrc/unistd.h @@ -127,7 +127,6 @@ ssize_t pread(int, void*, size_t, off_t); ssize_t pwrite(int, const void*, size_t, off_t); ssize_t readlink(const char* restrict, char* restrict, size_t); ssize_t readlinkat(int, const char* restrict, char* restrict, size_t); -int rmdir(const char*); int setegid(gid_t); int seteuid(uid_t); int setgid(gid_t); @@ -168,6 +167,7 @@ int isatty(int); off_t lseek(int, off_t, int); int pipe(int [2]); ssize_t read(int, void*, size_t); +int rmdir(const char*); unsigned sleep(unsigned); #if __POSIX_OBSOLETE <= 200112 || defined(SORTIX_EXTENSIONS) int usleep(useconds_t useconds); diff --git a/libmaxsi/io.cpp b/libmaxsi/io.cpp index 4963edef..8c640271 100644 --- a/libmaxsi/io.cpp +++ b/libmaxsi/io.cpp @@ -51,6 +51,8 @@ namespace Maxsi DEFN_SYSCALL1(int, SysUnlink, SYSCALL_UNLINK, const char*); DEFN_SYSCALL1(int, SysIsATTY, SYSCALL_ISATTY, int); 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*); size_t Print(const char* string) { @@ -256,6 +258,16 @@ namespace Maxsi return SysUnlink(pathname); } + extern "C" int mkdir(const char* pathname, mode_t mode) + { + return SysMkDir(pathname, mode); + } + + extern "C" int rmdir(const char* pathname) + { + return SysRmDir(pathname); + } + extern "C" int isatty(int fd) { return SysIsATTY(fd); diff --git a/sortix/filesystem.cpp b/sortix/filesystem.cpp index 1b8fa4f5..dfc1a987 100644 --- a/sortix/filesystem.cpp +++ b/sortix/filesystem.cpp @@ -83,10 +83,26 @@ namespace Sortix return Unlink(path) ? 0 : -1; } + int SysMkDir(const char* pathname, mode_t mode) + { + // TODO: Add the proper filesystem support! + Error::Set(ENOSYS); + return -1; + } + + int SysRmDir(const char* pathname) + { + // 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); } } diff --git a/sortix/syscallnum.h b/sortix/syscallnum.h index 02c718d9..77ba3d0e 100644 --- a/sortix/syscallnum.h +++ b/sortix/syscallnum.h @@ -63,7 +63,9 @@ #define SYSCALL_SBRK 35 #define SYSCALL_SEEK 36 #define SYSCALL_GET_PAGE_SIZE 37 -#define SYSCALL_MAX_NUM 38 /* index of highest constant + 1 */ +#define SYSCALL_MKDIR 38 +#define SYSCALL_RMDIR 39 +#define SYSCALL_MAX_NUM 40 /* index of highest constant + 1 */ #endif