Update gtk-vnc with all the latest MinGW patches and latest Gnulib.
[fedora-mingw.git] / gtk-vnc / gtk-vnc-03-wsastartup.patch
diff --git a/gtk-vnc/gtk-vnc-03-wsastartup.patch b/gtk-vnc/gtk-vnc-03-wsastartup.patch
new file mode 100644 (file)
index 0000000..61076ab
--- /dev/null
@@ -0,0 +1,85 @@
+diff -r 47135c91cd9c src/vncdisplay.c
+--- a/src/vncdisplay.c Thu Oct 09 11:23:09 2008 -0400
++++ b/src/vncdisplay.c Wed Oct 29 14:52:36 2008 +0000
+@@ -29,6 +29,13 @@
+ #ifdef HAVE_PWD_H
+ #include <pwd.h>
+ #endif
++
++#ifdef HAVE_WINSOCK2_H
++#include <winsock2.h>
++#endif
++
++static void winsock_startup (void);
++static void winsock_cleanup (void);
+ #define VNC_DISPLAY_GET_PRIVATE(obj) \
+       (G_TYPE_INSTANCE_GET_PRIVATE((obj), VNC_TYPE_DISPLAY, VncDisplayPrivate))
+@@ -243,6 +250,7 @@
+ GtkWidget *vnc_display_new(void)
+ {
++      winsock_startup ();
+       return GTK_WIDGET(g_object_new(VNC_TYPE_DISPLAY, NULL));
+ }
+@@ -1255,6 +1263,9 @@
+       }
+       g_object_unref(G_OBJECT(data));
++
++      winsock_cleanup ();
++
+       return FALSE;
+ }
+@@ -2188,6 +2199,49 @@
+   return group;
+ }
++#ifdef WIN32
++
++/* On Windows, we must call WSAStartup before using any sockets and we
++ * must call WSACleanup afterwards.  And we have to balance any calls
++ * to WSAStartup with a corresponding call to WSACleanup.
++ *
++ * Note that Wine lets you do socket calls anyway, but real Windows
++ * doesn't. (http://bugs.winehq.org/show_bug.cgi?id=11965)
++ */
++
++static void
++winsock_startup (void)
++{
++      WORD winsock_version, err;
++      WSADATA winsock_data;
++
++      /* http://msdn2.microsoft.com/en-us/library/ms742213.aspx */
++      winsock_version = MAKEWORD (2, 2);
++      err = WSAStartup (winsock_version, &winsock_data);
++      if (err != 0)
++              GVNC_DEBUG ("ignored error %d from WSAStartup", err);
++}
++
++static void
++winsock_cleanup (void)
++{
++      WSACleanup ();
++}
++
++#else /* !WIN32 */
++
++static void
++winsock_startup (void)
++{
++}
++
++static void
++winsock_cleanup (void)
++{
++}
++
++#endif /* !WIN32 */
++
+ /*
+  * Local variables:
+  *  c-indent-level: 8