On Wed, Mar 06, 2013 at 09:07:25PM +0800, Lei Li wrote: > On 03/06/2013 05:56 PM, Stefan Hajnoczi wrote: > >On Tue, Mar 05, 2013 at 05:51:21PM +0800, Lei Li wrote: > >>Pass the right type for setsockopt(), and this will also > >>fix the compiler warning when cross build for qemu-ga.exe: > >> > >>util/osdep.c: In function 'socket_set_nodelay': > >>util/osdep.c:69:5: warning: passing argument 4 of 'setsockopt' from > >> incompatible pointer type [enabled by default] > >>In file included from /home/lei/qemu_b/include/sysemu/os-win32.h:30:0, > >> from /home/lei/qemu_b/include/qemu-common.h:46, > >> from util/osdep.c:48: > >>/usr/i686-w64-mingw32/sys-root/mingw/include/winsock2.h:990:63: note: > >> expected 'const char *' but argument is of type 'int *' > >> > >>Signed-off-by: Lei Li <li...@linux.vnet.ibm.com> > >>--- > >> util/osdep.c | 4 ++-- > >> 1 file changed, 2 insertions(+), 2 deletions(-) > >> > >>diff --git a/util/osdep.c b/util/osdep.c > >>index c408261..ce472a9 100644 > >>--- a/util/osdep.c > >>+++ b/util/osdep.c > >>@@ -57,7 +57,7 @@ static const char *qemu_version = QEMU_VERSION; > >> int socket_set_cork(int fd, int v) > >> { > >> #if defined(SOL_TCP) && defined(TCP_CORK) > >>- return setsockopt(fd, SOL_TCP, TCP_CORK, &v, sizeof(v)); > >>+ return setsockopt(fd, SOL_TCP, TCP_CORK, (char *)&v, sizeof(v)); > >> #else > >> return 0; > >> #endif > >>@@ -66,7 +66,7 @@ int socket_set_cork(int fd, int v) > >> int socket_set_nodelay(int fd) > >> { > >> int v = 1; > >>- return setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, &v, sizeof(v)); > >>+ return setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, (char *)&v, sizeof(v)); > >Please use qemu_setsockopt() instead of open-coding this. > > > >Stefan > > > Hi Stefan, > > This compiler warning just shows up without any hacking > when cross build qemu-ga for windows by: > > ./configure --enable-guest-agent --cross-prefix=i686-w64-mingw32- > make qemu-ga.exe
I understand you didn't introduce the bug and noticed it when compiling for Windows. The correct fix is still to use qemu_setsockopt() which was added in order to solve this portability problem. You don't need any casts if you use qemu_setsockopt(). Stefan