diff --git a/DevTools/UserspaceEmulator/Emulator.cpp b/DevTools/UserspaceEmulator/Emulator.cpp index 9157f8da46..0a55d3934c 100644 --- a/DevTools/UserspaceEmulator/Emulator.cpp +++ b/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); #endif switch (function) { + case SC_getcwd: + return virt$getcwd(arg1, arg2); case SC_ttyname: return virt$ttyname(arg1, arg2, arg3); case SC_getpgrp: @@ -1256,4 +1258,14 @@ int Emulator::virt$ttyname(int fd, FlatPtr buffer, size_t buffer_size) return rc; } +int Emulator::virt$getcwd(FlatPtr buffer, size_t buffer_size) +{ + auto host_buffer = ByteBuffer::create_zeroed(buffer_size); + int rc = syscall(SC_getcwd, host_buffer.data(), host_buffer.size()); + if (rc < 1) + return rc; + mmu().copy_to_vm(buffer, host_buffer.data(), host_buffer.size()); + return rc; +} + } diff --git a/DevTools/UserspaceEmulator/Emulator.h b/DevTools/UserspaceEmulator/Emulator.h index c7e26d9849..b6c6d7a108 100644 --- a/DevTools/UserspaceEmulator/Emulator.h +++ b/DevTools/UserspaceEmulator/Emulator.h @@ -138,6 +138,7 @@ private: int virt$sleep(unsigned); int virt$getpgrp(); int virt$ttyname(int fd, FlatPtr buffer, size_t buffer_size); + int virt$getcwd(FlatPtr buffer, size_t buffer_size); FlatPtr allocate_vm(size_t size, size_t alignment);