Message ID | 1362477081-31843-1-git-send-email-lilei@linux.vnet.ibm.com |
---|---|
State | New |
Headers | show |
Lei Li <lilei@linux.vnet.ibm.com> writes: > 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 <lilei@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)); > } > > int qemu_madvise(void *addr, size_t len, int advice) Please cast to void * instead, for clarity. The parameter is void * in modern setsockopt(). No cast required. Winsock appears to be stuck in the stone age: it takes char *.
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 <lilei@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
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 <lilei@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
On 03/06/2013 04:59 PM, Markus Armbruster wrote: > Lei Li <lilei@linux.vnet.ibm.com> writes: > >> 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 <lilei@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)); >> } >> >> int qemu_madvise(void *addr, size_t len, int advice) > Please cast to void * instead, for clarity. > > The parameter is void * in modern setsockopt(). No cast required. > Winsock appears to be stuck in the stone age: it takes char *. Got it, thanks.
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 <lilei@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
On 03/06/2013 09:16 PM, Stefan Hajnoczi wrote: > 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 <lilei@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 Sorry, I understand it just now... :-[ Sure, thanks!
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)); } int qemu_madvise(void *addr, size_t len, int advice)
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 <lilei@linux.vnet.ibm.com> --- util/osdep.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)