From 1b81e342cbed1b620dec7065b1c06b47df0b6d92 Mon Sep 17 00:00:00 2001
From: dscho <dscho>
Date: Mon, 19 Dec 2005 18:38:53 +0000
Subject: assorted fixes for MinGW32

---
 client_examples/SDLvncviewer.c |  1 +
 libvncclient/sockets.c         |  5 ++---
 libvncclient/vncviewer.c       |  2 +-
 libvncserver/main.c            |  2 +-
 libvncserver/rfbserver.c       |  2 ++
 libvncserver/sockets.c         | 31 +++++++++++++++++--------------
 6 files changed, 24 insertions(+), 19 deletions(-)

diff --git a/client_examples/SDLvncviewer.c b/client_examples/SDLvncviewer.c
index ece9507..b32c49b 100644
--- a/client_examples/SDLvncviewer.c
+++ b/client_examples/SDLvncviewer.c
@@ -197,6 +197,7 @@ int main(int argc,char** argv) {
 #endif
 
 	SDL_Init(SDL_INIT_VIDEO | SDL_INIT_NOPARACHUTE);
+	SDL_EnableUNICODE(1);
 
 	/* 16-bit: cl=rfbGetClient(5,3,2); */
 	cl=rfbGetClient(8,3,4);
diff --git a/libvncclient/sockets.c b/libvncclient/sockets.c
index aca38aa..7f350e2 100644
--- a/libvncclient/sockets.c
+++ b/libvncclient/sockets.c
@@ -91,12 +91,11 @@ ReadFromRFBServer(rfbClient* client, char *out, unsigned int n)
 	  diff.tv_sec--;
 	  diff.tv_usec+=1000000;
         }
-        sleep (diff.tv_sec);
 #ifndef __MINGW32__
-	/* FIXME */
+        sleep (diff.tv_sec);
         usleep (diff.tv_usec);
 #else
-	rfbClientErr("usleep on MinGW32 NOT IMPLEMENTED\n");
+	Sleep (diff.tv_sec * 1000 + diff.tv_usec/1000);
 #endif
       }
 
diff --git a/libvncclient/vncviewer.c b/libvncclient/vncviewer.c
index 941f512..02f66f1 100644
--- a/libvncclient/vncviewer.c
+++ b/libvncclient/vncviewer.c
@@ -252,6 +252,7 @@ rfbBool rfbInitClient(rfbClient* client,int* argc,char** argv) {
 }
 
 void rfbClientCleanup(rfbClient* client) {
+#ifdef LIBVNCSERVER_HAVE_LIBJPEG
   int i;
 
   for ( i = 0; i < 4; i++ ) {
@@ -268,7 +269,6 @@ void rfbClientCleanup(rfbClient* client) {
       rfbClientLog("inflateEnd: %s\n", client->decompStream.msg );
   }
 
-#ifdef LIBVNCSERVER_HAVE_LIBJPEG
   if (client->jpegSrcManager)
     free(client->jpegSrcManager);
 #endif
diff --git a/libvncserver/main.c b/libvncserver/main.c
index e0c699f..cdf2bfc 100644
--- a/libvncserver/main.c
+++ b/libvncserver/main.c
@@ -852,7 +852,7 @@ void rfbInitServer(rfbScreenInfoPtr screen)
 {
 #ifdef WIN32
   WSADATA trash;
-  int i=WSAStartup(MAKEWORD(2,2),&trash);
+  WSAStartup(MAKEWORD(2,2),&trash);
 #endif
   rfbInitSockets(screen);
   rfbHttpInitSockets(screen);
diff --git a/libvncserver/rfbserver.c b/libvncserver/rfbserver.c
index 75516fe..2b61375 100644
--- a/libvncserver/rfbserver.c
+++ b/libvncserver/rfbserver.c
@@ -412,7 +412,9 @@ rfbNewUDPClient(rfbScreenInfoPtr rfbScreen)
 void
 rfbClientConnectionGone(rfbClientPtr cl)
 {
+#ifdef LIBVNCSERVER_HAVE_LIBJPEG
     int i;
+#endif
 
     LOCK(rfbClientListMutex);
 
diff --git a/libvncserver/sockets.c b/libvncserver/sockets.c
index a225131..fb61fcd 100755
--- a/libvncserver/sockets.c
+++ b/libvncserver/sockets.c
@@ -84,12 +84,15 @@ int deny_severity=LOG_WARNING;
 #endif
 
 #if defined(WIN32)
+#ifndef __MINGW32__
 #pragma warning (disable: 4018 4761)
-#define close closesocket
+#endif
 #define read(sock,buf,len) recv(sock,buf,len,0)
 #define EWOULDBLOCK WSAEWOULDBLOCK
 #define ETIMEDOUT WSAETIMEDOUT
 #define write(sock,buf,len) send(sock,buf,len,0)
+#else
+#define closesocket close
 #endif
 
 int rfbMaxClientWait = 20000;   /* time (ms) after which we decide client has
@@ -185,19 +188,19 @@ void rfbShutdownSockets(rfbScreenInfoPtr rfbScreen)
     rfbScreen->socketState = RFB_SOCKET_SHUTDOWN;
 
     if(rfbScreen->inetdSock>-1) {
-	close(rfbScreen->inetdSock);
+	closesocket(rfbScreen->inetdSock);
 	FD_CLR(rfbScreen->inetdSock,&rfbScreen->allFds);
 	rfbScreen->inetdSock=-1;
     }
 
     if(rfbScreen->listenSock>-1) {
-	close(rfbScreen->listenSock);
+	closesocket(rfbScreen->listenSock);
 	FD_CLR(rfbScreen->listenSock,&rfbScreen->allFds);
 	rfbScreen->listenSock=-1;
     }
 
     if(rfbScreen->udpSock>-1) {
-	close(rfbScreen->udpSock);
+	closesocket(rfbScreen->udpSock);
 	FD_CLR(rfbScreen->udpSock,&rfbScreen->allFds);
 	rfbScreen->udpSock=-1;
     }
@@ -256,7 +259,7 @@ rfbCheckFds(rfbScreenInfoPtr rfbScreen,long usec)
 #ifndef WIN32
 	if (fcntl(sock, F_SETFL, O_NONBLOCK) < 0) {
 	    rfbLogPerror("rfbCheckFds: fcntl");
-	    close(sock);
+	    closesocket(sock);
 	    return;
 	}
 #endif
@@ -264,7 +267,7 @@ rfbCheckFds(rfbScreenInfoPtr rfbScreen,long usec)
 	if (setsockopt(sock, IPPROTO_TCP, TCP_NODELAY,
 		       (char *)&one, sizeof(one)) < 0) {
 	    rfbLogPerror("rfbCheckFds: setsockopt");
-	    close(sock);
+	    closesocket(sock);
 	    return;
 	}
 
@@ -273,7 +276,7 @@ rfbCheckFds(rfbScreenInfoPtr rfbScreen,long usec)
 		      STRING_UNKNOWN)) {
 	  rfbLog("Rejected connection from client %s\n",
 		 inet_ntoa(addr.sin_addr));
-	  close(sock);
+	  closesocket(sock);
 	  return;
 	}
 #endif
@@ -364,7 +367,7 @@ rfbCloseClient(rfbClientPtr cl)
 #ifndef __MINGW32__
 	shutdown(cl->sock,SHUT_RDWR);
 #endif
-	close(cl->sock);
+	closesocket(cl->sock);
 	cl->sock = -1;
       }
     TSIGNAL(cl->updateCond);
@@ -395,7 +398,7 @@ rfbConnect(rfbScreenInfoPtr rfbScreen,
 #ifndef WIN32
     if (fcntl(sock, F_SETFL, O_NONBLOCK) < 0) {
 	rfbLogPerror("fcntl failed");
-	close(sock);
+	closesocket(sock);
 	return -1;
     }
 #endif
@@ -403,7 +406,7 @@ rfbConnect(rfbScreenInfoPtr rfbScreen,
     if (setsockopt(sock, IPPROTO_TCP, TCP_NODELAY,
 		   (char *)&one, sizeof(one)) < 0) {
 	rfbLogPerror("setsockopt failed");
-	close(sock);
+	closesocket(sock);
 	return -1;
     }
 
@@ -605,15 +608,15 @@ rfbListenOnTCPPort(int port,
     }
     if (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR,
 		   (char *)&one, sizeof(one)) < 0) {
-	close(sock);
+	closesocket(sock);
 	return -1;
     }
     if (bind(sock, (struct sockaddr *)&addr, sizeof(addr)) < 0) {
-	close(sock);
+	closesocket(sock);
 	return -1;
     }
     if (listen(sock, 5) < 0) {
-	close(sock);
+	closesocket(sock);
 	return -1;
     }
 
@@ -646,7 +649,7 @@ rfbConnectToTcpAddr(char *host,
     }
 
     if (connect(sock, (struct sockaddr *)&addr, (sizeof(addr))) < 0) {
-	close(sock);
+	closesocket(sock);
 	return -1;
     }
 
-- 
cgit v1.2.3

