[vlc-commits] commit: Win32: really set fd_set size dynamically ( =?UTF-8?Q?R=C3=A9mi=20Denis=2DCourmont=20?=)

git at videolan.org git at videolan.org
Sat Nov 27 15:04:15 CET 2010


vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Sat Nov 27 16:03:44 2010 +0200| [aa25960c312f78badf4df4796377bfcc5ff49eec] | committer: Rémi Denis-Courmont 

Win32: really set fd_set size dynamically

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=aa25960c312f78badf4df4796377bfcc5ff49eec
---

 src/network/poll.c |   19 +++++++++++++++----
 1 files changed, 15 insertions(+), 4 deletions(-)

diff --git a/src/network/poll.c b/src/network/poll.c
index 35192ce..0de7da0 100644
--- a/src/network/poll.c
+++ b/src/network/poll.c
@@ -26,11 +26,9 @@
 #endif
 
 #include <vlc_common.h>
-#include <stdlib.h>
-#include <vlc_network.h>
-
 
 #ifdef HAVE_MAEMO
+# include <vlc_network.h>
 # include <signal.h>
 # include <errno.h>
 # include <poll.h>
@@ -63,6 +61,8 @@ int vlc_poll (struct pollfd *fds, unsigned nfds, int timeout)
 }
 
 #elif defined (HAVE_POLL)
+# include <vlc_network.h>
+
 struct pollfd;
 
 int vlc_poll (struct pollfd *fds, unsigned nfds, int timeout)
@@ -73,12 +73,19 @@ int vlc_poll (struct pollfd *fds, unsigned nfds, int timeout)
 
 #elif defined (WIN32)
 
+#include <stdlib.h>
 #include <string.h>
 #include <errno.h>
+#ifdef FD_SETSIZE
+/* No, it's not as simple as #undef FD_SETSIZE */
+# error Header inclusion order compromised!
+#endif
+#define FD_SETSIZE 0
+#include <vlc_network.h>
 
 int vlc_poll (struct pollfd *fds, unsigned nfds, int timeout)
 {
-    size_t setsize = sizeof (fd_set) + (nfds - FD_SETSIZE) * sizeof (SOCKET);
+    size_t setsize = sizeof (fd_set) + nfds * sizeof (SOCKET);
     fd_set *rdset = malloc (setsize);
     fd_set *wrset = malloc (setsize);
     fd_set *exset = malloc (setsize);
@@ -94,6 +101,10 @@ int vlc_poll (struct pollfd *fds, unsigned nfds, int timeout)
         return -1;
     }
 
+/* Winsock FD_SET uses FD_SETSIZE in its expansion */
+#undef FD_SETSIZE
+#define FD_SETSIZE (nfds)
+
 resume:
     val = -1;
     vlc_testcancel ();



More information about the vlc-commits mailing list