From 005ffa0bb078d39cbc58bccb5787cf9dc2cfab39 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20Moreau?= Date: Sun, 29 Jan 2012 11:11:13 -0500 Subject: [PATCH] wfreerdp: fix mingw64 cross-compilation (Felix Wolfheimer) --- include/freerdp/types.h | 5 +++-- include/freerdp/window.h | 2 +- libfreerdp-core/listener.c | 10 +++++++++- libfreerdp-core/tcp.c | 10 ++++++++++ libfreerdp-core/tcp.h | 2 +- libfreerdp-utils/pcap.c | 2 ++ libfreerdp-utils/thread.c | 2 +- 7 files changed, 27 insertions(+), 6 deletions(-) diff --git a/include/freerdp/types.h b/include/freerdp/types.h index 043834487..a6b8cacad 100644 --- a/include/freerdp/types.h +++ b/include/freerdp/types.h @@ -22,7 +22,7 @@ #define __RDP_TYPES_H #ifdef _WIN32 -#include +#include #endif /* Base Types */ @@ -68,7 +68,8 @@ typedef signed long long sint64; #ifdef HAVE_STDBOOL_H #include -typedef int boolean; +typedef unsigned char boolean; + #else diff --git a/include/freerdp/window.h b/include/freerdp/window.h index fb0e6996a..4eff0e692 100644 --- a/include/freerdp/window.h +++ b/include/freerdp/window.h @@ -23,7 +23,7 @@ #include #ifdef _WIN32 -#include +#include #endif /* Window Order Header Flags */ diff --git a/libfreerdp-core/listener.c b/libfreerdp-core/listener.c index 2592a8201..ee3f98c93 100644 --- a/libfreerdp-core/listener.c +++ b/libfreerdp-core/listener.c @@ -168,11 +168,19 @@ static boolean freerdp_listener_check_fds(freerdp_listener* instance) { peer_addr_size = sizeof(peer_addr); peer_sockfd = accept(listener->sockfds[i], (struct sockaddr *)&peer_addr, &peer_addr_size); + if (peer_sockfd == -1) { +#ifdef _WIN32 + int wsa_error = WSAGetLastError(); + + /* No data available */ + if (wsa_error == WSAEWOULDBLOCK) + continue; +#else if (errno == EAGAIN || errno == EWOULDBLOCK) continue; - +#endif perror("accept"); return false; } diff --git a/libfreerdp-core/tcp.c b/libfreerdp-core/tcp.c index 53d9548e6..281ddae23 100644 --- a/libfreerdp-core/tcp.c +++ b/libfreerdp-core/tcp.c @@ -220,10 +220,20 @@ int tcp_write(rdpTcp* tcp, uint8* data, int length) if (status < 0) { +#ifdef _WIN32 + int wsa_error = WSAGetLastError(); + + /* No data available */ + if (wsa_error == WSAEWOULDBLOCK) + status = 0; + else + perror("send"); +#else if (errno == EAGAIN || errno == EWOULDBLOCK) status = 0; else perror("send"); +#endif } return status; diff --git a/libfreerdp-core/tcp.h b/libfreerdp-core/tcp.h index 6d551728c..6d0cd5b67 100644 --- a/libfreerdp-core/tcp.h +++ b/libfreerdp-core/tcp.h @@ -23,7 +23,7 @@ #ifdef _WIN32 #include -#include +#include #include #endif diff --git a/libfreerdp-utils/pcap.c b/libfreerdp-utils/pcap.c index eb7784c28..6de19a6dd 100644 --- a/libfreerdp-utils/pcap.c +++ b/libfreerdp-utils/pcap.c @@ -26,11 +26,13 @@ #include #include +#if !defined(__MINGW32__) && !defined(__MINGW64__) struct timeval { long tv_sec; long tv_usec; }; +#endif int gettimeofday(struct timeval* tp, void* tz) { diff --git a/libfreerdp-utils/thread.c b/libfreerdp-utils/thread.c index d6b3b0b33..14b6d58ae 100644 --- a/libfreerdp-utils/thread.c +++ b/libfreerdp-utils/thread.c @@ -23,7 +23,7 @@ #include #ifdef _WIN32 -#include +#include #ifdef _MSC_VER #include #endif