libslirp introduced new typedef after 4.8.0, slirp_os_socket, which is defined to SOCKET on windows, which, in turn, is a 64bit number. qemu uses int, so callback function prorotypes changed. Introduce slirp_os_socket locally if SLIRP_INVALID_SOCKET is not defined (this define has been introduced together wiht slirp_os_socket type), for libslirp <= 4.8.0, and use it in callback function definitions.
Link: https://gitlab.freedesktop.org/slirp/libslirp/-/commit/72f85005a2307fd0961543e3cea861ad7a4d201e Resolves: https://gitlab.com/qemu-project/qemu/-/issues/2603 Signed-off-by: Michael Tokarev <m...@tls.msk.ru> --- net/slirp.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/net/slirp.c b/net/slirp.c index eb9a456ed4..fa07268cf4 100644 --- a/net/slirp.c +++ b/net/slirp.c @@ -98,6 +98,10 @@ typedef struct SlirpState { GSList *fwd; } SlirpState; +#ifndef SLIRP_INVALID_SOCKET /* after 4.8.0 */ +typedef int slirp_os_socket; +#endif + static struct slirp_config_str *slirp_configs; static QTAILQ_HEAD(, SlirpState) slirp_stacks = QTAILQ_HEAD_INITIALIZER(slirp_stacks); @@ -247,7 +251,7 @@ static void net_slirp_timer_mod(void *timer, int64_t expire_timer, timer_mod(&t->timer, expire_timer); } -static void net_slirp_register_poll_fd(int fd, void *opaque) +static void net_slirp_register_poll_fd(slirp_os_socket fd, void *opaque) { #ifdef WIN32 AioContext *ctxt = qemu_get_aio_context(); @@ -260,7 +264,7 @@ static void net_slirp_register_poll_fd(int fd, void *opaque) #endif } -static void net_slirp_unregister_poll_fd(int fd, void *opaque) +static void net_slirp_unregister_poll_fd(slirp_os_socket fd, void *opaque) { #ifdef WIN32 if (WSAEventSelect(fd, NULL, 0) != 0) { @@ -314,7 +318,7 @@ static int slirp_poll_to_gio(int events) return ret; } -static int net_slirp_add_poll(int fd, int events, void *opaque) +static int net_slirp_add_poll(slirp_os_socket fd, int events, void *opaque) { GArray *pollfds = opaque; GPollFD pfd = { -- 2.39.5