diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2024-12-17 14:42:53 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2024-12-17 14:42:53 +0100 |
| commit | 7fd884b9c110eeb236dc909737917c62b70c5d43 (patch) | |
| tree | 9d57d759b862fdd28baa81e79939f9f089373464 /src/libtools | |
| parent | a98887589d64c47c635962072c8d5a30e5134ce2 (diff) | |
| download | box64-7fd884b9c110eeb236dc909737917c62b70c5d43.tar.gz box64-7fd884b9c110eeb236dc909737917c62b70c5d43.zip | |
[BOX32][WRAPPER] More fixes to sendmsg/rcvmsg wrapping (fixes some wine 32bits stuffs)
Diffstat (limited to 'src/libtools')
| -rwxr-xr-x | src/libtools/myalign32.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/src/libtools/myalign32.c b/src/libtools/myalign32.c index fc20454b..cd703549 100755 --- a/src/libtools/myalign32.c +++ b/src/libtools/myalign32.c @@ -1510,8 +1510,12 @@ void AlignMsgHdr_32(void* dest, void* dest_iov, void* dest_cmsg, void* source, i memcpy(CMSG_DATA(dcmsg), cmsg+1, cmsg->cmsg_len-sizeof(struct i386_cmsghdr)); d->msg_controllen += 4; } - dcmsg = (struct cmsghdr*)(((uintptr_t)dcmsg) + ((dcmsg->cmsg_len+7)&~7)); + struct cmsghdr* next = (struct cmsghdr*)(((uintptr_t)dcmsg) + ((dcmsg->cmsg_len+7)&~7)); cmsg = my32___cmsg_nxthdr(s, cmsg); + uintptr_t next_diff = (uintptr_t)next-((uintptr_t)dcmsg+dcmsg->cmsg_len); + if(cmsg) + d->msg_controllen+=next_diff; + } } else d->msg_control = NULL; @@ -1536,7 +1540,7 @@ void UnalignMsgHdr_32(void* dest, void* source) UnalignIOV_32(d_iov+i, s_iov+i); } d->msg_iovlen = s->msg_iovlen; - //d->msg_controllen = s->msg_controllen; + d->msg_controllen = s->msg_controllen; if(s->msg_control) { struct i386_cmsghdr* dcmsg = from_ptrv(d->msg_control); struct cmsghdr* scmsg = s->msg_control; @@ -1547,7 +1551,7 @@ void UnalignMsgHdr_32(void* dest, void* source) if(dcmsg->cmsg_len) { dcmsg->cmsg_len -= 4; memcpy(dcmsg+1, CMSG_DATA(scmsg), dcmsg->cmsg_len-sizeof(struct i386_cmsghdr)); - //d->msg_controllen -= 4; + d->msg_controllen -= 4; } dcmsg = (struct i386_cmsghdr*)(((uintptr_t)dcmsg) + ((dcmsg->cmsg_len+3)&~3)); scmsg = CMSG_NXTHDR(s, scmsg); |