diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2024-12-09 13:06:50 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2024-12-09 13:06:50 +0100 |
| commit | 3eeb10c0a60ea0106d6201dda80fd771f3d4e17a (patch) | |
| tree | a6f39e7596c301e50a7f0baf95ca499f1d2a0080 /src/wrapped32/wrappedlibc.c | |
| parent | ce3d2afad282195508f93c221fe3342a59846061 (diff) | |
| download | box64-3eeb10c0a60ea0106d6201dda80fd771f3d4e17a.tar.gz box64-3eeb10c0a60ea0106d6201dda80fd771f3d4e17a.zip | |
[BOX32][WRAPPER] Better wrapping for shmat
Diffstat (limited to 'src/wrapped32/wrappedlibc.c')
| -rwxr-xr-x | src/wrapped32/wrappedlibc.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/src/wrapped32/wrappedlibc.c b/src/wrapped32/wrappedlibc.c index e4bfbaf8..49bd525c 100755 --- a/src/wrapped32/wrappedlibc.c +++ b/src/wrapped32/wrappedlibc.c @@ -40,6 +40,8 @@ #include <sys/sysinfo.h> #include <sys/time.h> #include <regex.h> +#include <sys/ipc.h> +#include <sys/shm.h> #include "wrappedlibs.h" @@ -3138,6 +3140,31 @@ EXPORT void my32_regfree(x64emu_t* emu, void* p) regfree(&p_l); } +EXPORT void* my32_shmat(x64emu_t*emu, int shmid, void* shmaddr, int flags) +{ + size_t sz = 0; + { + // get the size of the shmmemory + struct shmid_ds ds = {0}; + if(shmctl(shmid, IPC_STAT, &ds)>=0) + sz = ds.shm_segsz; + } + if(!shmaddr) { + shmaddr = find31bitBlockNearHint(shmaddr, sz, 0); + } + void* ret = shmat(shmid, shmaddr, flags); + /*if(ret!=MAP_FAILED) { + would need to keep size somewhere, there is no way to get it back when doing shmdt + setProtection_mmap(ret, sz, (flags&SHM_RDONLY)?PROT_READ:(PROT_READ|PROT_WRITE)); + }*/ + return ret; +} + +EXPORT int my32_shmdt(x64emu_t* emu, void* addr) +{ + return shmdt(addr); +} + #if 0 #ifndef __NR_memfd_create #define MFD_CLOEXEC 0x0001U |