about summary refs log tree commit diff stats
path: root/src/emu
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2024-09-01 13:59:51 +0200
committerptitSeb <sebastien.chev@gmail.com>2024-09-01 13:59:51 +0200
commit02364151bcba524825838140f3d1a61db59dab88 (patch)
tree3d6ba2cf3ea39d3ddf6119f30f84b8512b155157 /src/emu
parent9178effd9f837b52107c1943e9736cf2dfc5d40d (diff)
downloadbox64-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.c9
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