[ws2_32] update WSASendTo's iovec properly
Damjan Jovanovic
damjan.jov at gmail.com
Sun Jul 15 06:58:31 CDT 2007
Changelog:
* Fix a serious regression in ws2_32 where WSASendTo doesn't update
the iovec's iov_base properly, leading to data corruption in the case
of non-atomic sends.
Damjan Jovanovic
-------------- next part --------------
diff --git a/dlls/ws2_32/socket.c b/dlls/ws2_32/socket.c
index 60c4e44..0a6597d 100644
--- a/dlls/ws2_32/socket.c
+++ b/dlls/ws2_32/socket.c
@@ -2717,13 +2717,11 @@ INT WINAPI WSASendTo( SOCKET s, LPWSABUF lpBuffers, DWORD dwBufferCount,
if (n > 0)
{
*lpNumberOfBytesSent += n;
- if (iovec[first_buff].iov_len > n)
- iovec[first_buff].iov_len -= n;
- else
- {
- while (n > 0) n -= iovec[first_buff++].iov_len;
- if (first_buff >= dwBufferCount) break;
- }
+ while (first_buff < dwBufferCount && iovec[first_buff].iov_len <= n)
+ n -= iovec[first_buff++].iov_len;
+ if (first_buff >= dwBufferCount) break;
+ iovec[first_buff].iov_base = (char*)iovec[first_buff].iov_base + n;
+ iovec[first_buff].iov_len -= n;
}
if (timeout != -1)
More information about the wine-patches
mailing list