errno might not be initialized to 0, and we may get both rv == -1 and
errno != ENOSYS. This leads to assertion failure. Since
getrandom_linux always returns -1 on failure, checking errno is
useless in this function.
We thought that we can use /dev/stdin for *NIX, but some variants,
like Android, does not have one or root permission is required. Just
like we do for Windows build, we just use stdin if /dev/stdin is used.
Use pkg-config to find cppunit, libxml2 and expat. All those libraries
provide pkg-config files, and in all of those cases the pkg-config macro
is superior to the custom macros used currently.
The advantages of pkg-config files include:
- Explicit static linking support via --static. Currently, e.g.
'xml2-config --libs' prints all libraries needed for static linking when
doing dynamic linking unnecessary, resulting in unnecessary direct deps.
- Better cross-build support. You don't have to build the additional
*-config tools for target.
- Better multilib support. Per-ABI pkgconfig directories are commonly
supported while packages usually fail to look for per-CHOST *-config
variants.
- Better override support. The current macros allow little to no
result overrides, the pkg-config macros let you pass FOO_CFLAGS
and FOO_LIBS manually.
- Cleaner version checks. The code used in libxml.m4 is really creepy.
We re-wrote WinTLSSession::writeData. The major points are:
* Buffer is now preallocated once handshake is finished. Previously,
they are allocated each time when we send one TLS record.
* Schannel uses header, body and trailer for each secBuffer. Now we
send them off at once using WSASend which is windows counterpart of
sendv. Previously, we do memmove if some of them are truncated.
* We don't try to send application data in
WinTLSSession::closeConnection, since semantically we need same
application data used to create TLS record before. Using 0 length
data to finish sending buffered data looks like a hack.