[gnutls-devel] GnuTLS | Sockets: implement sendmsg()-like function on Win32 (!1377)
Read-only notification of GnuTLS library development activities
gnutls-devel at lists.gnutls.org
Mon Feb 15 20:12:17 CET 2021
Evgeny Grin commented:
@dueno Thanks. Let me know how to improve it.
There are several thing must be handled in this function:
1. The size of each element must be less than `ULONG_MAX` (actually max value for `DWORD`). If any element with larger size if found, is must be truncated to ULONG_MAX and no more element must be processed.
2. GnuTLS cannot process successful return value more than `SSIZE_MAX`, so amount of total sent size must be limited to `SSIZE_MAX`.
The code is so complicated because `ssize_t` is variable depending of x32/x64, but size of DWORD is fixed on Win32.
To handle both x32 and x64 in uniformed way, code needs to be a bit complicated.
We can shield the second `if` like:
``` C++
#if SIZE_MAX > ULONG_MAX
else if (iovec[to_send_cnt].iov_len > ULONG_MAX) {
bufs[to_send_cnt].buf = iovec[to_send_cnt].iov_base;
bufs[to_send_cnt].len = ULONG_MAX;
ovrflwn = true;
}
#endif
```
but it will not make code more readable.
--
Reply to this email directly or view it on GitLab: https://gitlab.com/gnutls/gnutls/-/merge_requests/1377#note_509565944
You're receiving this email because of your account on gitlab.com.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.gnupg.org/pipermail/gnutls-devel/attachments/20210215/5af8ad05/attachment.html>
More information about the Gnutls-devel
mailing list