]> 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 170396d2165b9bc36466ada79153577c5fd9353a..3e3a36e4ef233942cd9cc724f4e0a69915ac5177 100644 (file)
@@ -91,6 +91,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 4e42df992b5f43684502010bf131ac3c3980f50f..8f0b4ea7ab66e5baa0f9869edb37254561d33dce 100644 (file)
@@ -2200,6 +2200,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 3671aed43d498f88e763c319bef46db7e8820a7d..ec1e847fb40dd6586522624719aa02d848d493e6 100644 (file)
@@ -51,6 +51,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 fe873cf142dee12337f65e766e0a208b7610da2a..70a818f5f6b85b272a37a1e935d821f22f001dd2 100644 (file)
@@ -33,6 +33,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 2ae09791eb198ad1e3c9e7d25ac98d630b55a83f..06ce1b6d5109160753a1cc089c9dbfa4a27ccf67 100644 (file)
@@ -86,6 +86,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);
 }