Windows - fix getsockopt calls for narrower than int options
authorShane Kearns <ext-shane.2.kearns@nokia.com>
Mon, 20 Feb 2012 18:48:10 +0000 (18:48 +0000)
committerQt by Nokia <qt-info@nokia.com>
Wed, 29 Feb 2012 23:09:57 +0000 (00:09 +0100)
commit46e4a9d5231e2d9e35424259858713ca539b8e30
treee047636b446959812473c2da31658141b3db18ad
parentb147da00c5fec9d89a2b60d10e82ac28766e2a5b
Windows - fix getsockopt calls for narrower than int options

Windows unhelpfully writes to only one byte of the output buffer
when getsockopt is called for a boolean option. Therefore we have
to zero initialise the int rather than initialising to -1 as was
done before.
This in general only works for little endian architecture, because
the word would look like 0x01000000 on big endian. So I have added
some compile time asserts in the assumption that windows is always
little endian. This is ok for comparisons with 0/false, but not
comparisons with true or nonzero values.
In the case of IPV6_V6ONLY, it is documented as DWORD (unsigned int)
but on some windows versions it is returned as a boolean triggering
the warning. I removed the warning, as the conversion to int works on
both LE and BE since it is only compared with zero.

Task-number: QTBUG-23488
Change-Id: I3c586d1ada76465fc045a82661f289920c657a4c
Reviewed-by: Richard J. Moore <rich@kde.org>
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@nokia.com>
Reviewed-by: Andreas Holzammer <andreas.holzammer@kdab.com>
src/network/socket/qnativesocketengine_win.cpp
tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp