]> Projects (at) Tadryanom (dot) Me - AdrOS.git/commitdiff
feat: fsync/fdatasync syscall stubs (no-op, POSIX compliance)
authorTulio A M Mendes <[email protected]>
Thu, 12 Feb 2026 02:40:17 +0000 (23:40 -0300)
committerTulio A M Mendes <[email protected]>
Fri, 13 Feb 2026 02:20:50 +0000 (23:20 -0300)
include/syscall.h
src/kernel/syscall.c
user/ulibc/include/syscall.h
user/ulibc/include/unistd.h
user/ulibc/src/unistd.c

index 88eda8ddb4c1c088917daa81ed3243be6594a393..b6418d71b48abb880cdff219895c81becc398e49 100644 (file)
@@ -100,6 +100,16 @@ enum {
 
     SYSCALL_CLONE     = 67,
     SYSCALL_GETTID    = 68,
+
+    SYSCALL_FSYNC     = 69,
+    SYSCALL_FDATASYNC = 70,
+    SYSCALL_SIGPENDING = 71,
+    SYSCALL_PREAD     = 72,
+    SYSCALL_PWRITE    = 73,
+    SYSCALL_ACCESS    = 74,
+    SYSCALL_UMASK     = 75,
+    SYSCALL_SETUID    = 76,
+    SYSCALL_SETGID    = 77,
 };
 
 #endif
index 05ff0fac8a9839e8e39f234c31e745afa50afb66..5fd6d87401009c751ec0b1db618dcef95f9851b0 100644 (file)
@@ -2209,6 +2209,16 @@ void syscall_handler(struct registers* regs) {
         return;
     }
 
+    if (syscall_no == SYSCALL_FSYNC || syscall_no == SYSCALL_FDATASYNC) {
+        int fd = (int)regs->ebx;
+        if (!current_process || fd < 0 || fd >= PROCESS_MAX_FILES || !current_process->files[fd]) {
+            regs->eax = (uint32_t)-EBADF;
+        } else {
+            regs->eax = 0;
+        }
+        return;
+    }
+
     /* ---- Socket syscalls ---- */
     socket_syscall_dispatch(regs, syscall_no);
     /* If socket dispatch handled it, eax is set and we return.
index a59019200675aa7e8d2e027714fc07a1ea79a613..ecc6a43a1f6b1b0661f357105c631536a6396865 100644 (file)
@@ -60,6 +60,8 @@ enum {
     SYS_SET_THREAD_AREA = 57,
     SYS_CLONE = 67,
     SYS_GETTID = 68,
+    SYS_FSYNC = 69,
+    SYS_FDATASYNC = 70,
 };
 
 /* Raw syscall wrappers — up to 5 args via INT 0x80 */
index 39b7ce86ab43a80b7ab79eda18171f585902a2dd..e7cbbbccbd1e5d1d04ecde3a9a9b97b76b3c5e06 100644 (file)
@@ -42,6 +42,8 @@ int     setsid(void);
 int     setpgid(int pid, int pgid);
 int     getpgrp(void);
 int     gettid(void);
+int     fsync(int fd);
+int     fdatasync(int fd);
 void*   brk(void* addr);
 
 void    _exit(int status) __attribute__((noreturn));
index f67cd3cd85ec6faf1b6c6aaa3d729b179fcb8fd8..f1f16601319eceb8ab8c22e00fdeb8891e9b82c8 100644 (file)
@@ -95,6 +95,14 @@ int gettid(void) {
     return _syscall0(SYS_GETTID);
 }
 
+int fsync(int fd) {
+    return __syscall_ret(_syscall1(SYS_FSYNC, fd));
+}
+
+int fdatasync(int fd) {
+    return __syscall_ret(_syscall1(SYS_FDATASYNC, fd));
+}
+
 void* brk(void* addr) {
     return (void*)_syscall1(SYS_BRK, (int)addr);
 }