diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2024-09-01 13:59:51 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2024-09-01 13:59:51 +0200 |
| commit | 02364151bcba524825838140f3d1a61db59dab88 (patch) | |
| tree | 3d6ba2cf3ea39d3ddf6119f30f84b8512b155157 /src/emu | |
| parent | 9178effd9f837b52107c1943e9736cf2dfc5d40d (diff) | |
| download | box64-02364151bcba524825838140f3d1a61db59dab88.tar.gz box64-02364151bcba524825838140f3d1a61db59dab88.zip | |
[BOX32] Some fixes to strtol/strtoul and read 32bits wrapped functions
Diffstat (limited to 'src/emu')
| -rw-r--r-- | src/emu/x86syscall_32.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/src/emu/x86syscall_32.c b/src/emu/x86syscall_32.c index 58bcb5bb..2bc41ff9 100644 --- a/src/emu/x86syscall_32.c +++ b/src/emu/x86syscall_32.c @@ -233,6 +233,7 @@ struct i386_user_desc { int32_t my32_open(x64emu_t* emu, void* pathname, int32_t flags, uint32_t mode); int32_t my32_execve(x64emu_t* emu, const char* path, char* const argv[], char* const envp[]); +ssize_t my32_read(int fd, void* buf, size_t count); int my32_munmap(x64emu_t* emu, void* addr, unsigned long length); void EXPORT x86Syscall(x64emu_t *emu) @@ -271,10 +272,10 @@ void EXPORT x86Syscall(x64emu_t *emu) R_EAX = R_EBX; // faking the syscall here, we don't want to really terminate the thread now break; case 3: // sys_read - S_EAX = read((int)R_EBX, from_ptrv(R_ECX), from_ulong(R_EDX)); + S_EAX = to_long(my32_read((int)R_EBX, from_ptrv(R_ECX), from_ulong(R_EDX))); break; case 4: // sys_write - S_EAX = write((int)R_EBX, from_ptrv(R_ECX), from_ulong(R_EDX)); + S_EAX = to_long(write((int)R_EBX, from_ptrv(R_ECX), from_ulong(R_EDX))); break; case 5: // sys_open if(s==5) {printf_log(LOG_DEBUG, " => sys_open(\"%s\", %d, %d)", (char*)from_ptrv(R_EBX), of_convert32(R_ECX), R_EDX);}; @@ -338,9 +339,9 @@ uint32_t EXPORT my32_syscall(x64emu_t *emu, ptr_t* b) emu->quit = 1; return u32(4); // faking the syscall here, we don't want to really terminate the program now case 3: // sys_read - return (uint32_t)read(i32(4), p(8), u32(12)); + return (uint32_t)to_long(my32_read(i32(4), p(8), u32(12))); case 4: // sys_write - return (uint32_t)write(i32(4), p(8), u32(12)); + return (uint32_t)to_long(write(i32(4), p(8), u32(12))); case 5: // sys_open return my32_open(emu, p(4), of_convert32(u32(8)), u32(12)); case 6: // sys_close |