Browse Source

UserspaceEmulator: Add the ttyname syscall

Andreas Kling 5 năm trước cách đây
mục cha
commit
b187a42e53

+ 12 - 0
DevTools/UserspaceEmulator/Emulator.cpp

@@ -250,6 +250,8 @@ u32 Emulator::virt_syscall(u32 function, u32 arg1, u32 arg2, u32 arg3)
     dbgprintf("Syscall: %s (%x)\n", Syscall::to_string((Syscall::Function)function), function);
     dbgprintf("Syscall: %s (%x)\n", Syscall::to_string((Syscall::Function)function), function);
 #endif
 #endif
     switch (function) {
     switch (function) {
+    case SC_ttyname:
+        return virt$ttyname(arg1, arg2, arg3);
     case SC_getpgrp:
     case SC_getpgrp:
         return virt$getpgrp();
         return virt$getpgrp();
     case SC_execve:
     case SC_execve:
@@ -1244,4 +1246,14 @@ int Emulator::virt$getpgrp()
     return syscall(SC_getpgrp);
     return syscall(SC_getpgrp);
 }
 }
 
 
+int Emulator::virt$ttyname(int fd, FlatPtr buffer, size_t buffer_size)
+{
+    auto host_buffer = ByteBuffer::create_zeroed(buffer_size);
+    int rc = syscall(SC_ttyname, fd, host_buffer.data(), host_buffer.size());
+    if (rc < 1)
+        return rc;
+    mmu().copy_to_vm(buffer, host_buffer.data(), host_buffer.size());
+    return rc;
+}
+
 }
 }

+ 1 - 0
DevTools/UserspaceEmulator/Emulator.h

@@ -137,6 +137,7 @@ private:
     ssize_t virt$getrandom(FlatPtr buffer, size_t buffer_size, unsigned int flags);
     ssize_t virt$getrandom(FlatPtr buffer, size_t buffer_size, unsigned int flags);
     int virt$sleep(unsigned);
     int virt$sleep(unsigned);
     int virt$getpgrp();
     int virt$getpgrp();
+    int virt$ttyname(int fd, FlatPtr buffer, size_t buffer_size);
 
 
     FlatPtr allocate_vm(size_t size, size_t alignment);
     FlatPtr allocate_vm(size_t size, size_t alignment);