[PATCH 06/13] mghttpd: Use poll() replacement.

Christian Mauderer christian.mauderer at embedded-brains.de
Thu Apr 21 08:49:46 UTC 2016


From: Christian Mauderer <Christian.Mauderer at embedded-brains.de>

This patch provides a poll() replacement based on the poll() used for
civetweb on windows.

A similar patch based on the one on
http://forums.bannister.org/ubbthreads.php?ubb=showflat&topic=7600&gonew=1
had been integrated into the RTEMS version of mongoose in commit
b5d2d4a61ce91765e9cac1b02271a8f4b049c558.
---
 cpukit/mghttpd/civetweb.c | 93 +++++++++++++++++++++++------------------------
 1 file changed, 46 insertions(+), 47 deletions(-)

diff --git a/cpukit/mghttpd/civetweb.c b/cpukit/mghttpd/civetweb.c
index 32cee56..5c5cd72 100644
--- a/cpukit/mghttpd/civetweb.c
+++ b/cpukit/mghttpd/civetweb.c
@@ -376,17 +376,6 @@ typedef struct DIR {
 	struct dirent result;
 } DIR;
 
-#if defined(_WIN32) && !defined(POLLIN)
-#ifndef HAVE_POLL
-struct pollfd {
-	SOCKET fd;
-	short events;
-	short revents;
-};
-#define POLLIN (0x0300)
-#endif
-#endif
-
 /* Mark required libraries */
 #if defined(_MSC_VER)
 #pragma comment(lib, "Ws2_32.lib")
@@ -397,7 +386,9 @@ struct pollfd {
 
 #include <sys/wait.h>
 #include <sys/socket.h>
+#ifdef HAVE_POLL
 #include <sys/poll.h>
+#endif
 #include <netinet/in.h>
 #include <arpa/inet.h>
 #include <sys/time.h>
@@ -467,6 +458,15 @@ typedef int SOCKET;
 #endif /* defined(_WIN32) && !defined(__SYMBIAN32__) - WINDOWS / UNIX include  \
           block */
 
+#ifndef HAVE_POLL
+struct pollfd {
+	SOCKET fd;
+	short events;
+	short revents;
+};
+#define POLLIN (0x0300)
+#endif
+
 /* va_copy should always be a macro, C99 and C++11 - DTL */
 #ifndef va_copy
 #define va_copy(x, y) ((x) = (y))
@@ -3096,42 +3096,6 @@ readdir(DIR *dir)
 }
 
 
-#ifndef HAVE_POLL
-static int
-poll(struct pollfd *pfd, unsigned int n, int milliseconds)
-{
-	struct timeval tv;
-	fd_set set;
-	unsigned int i;
-	int result;
-	SOCKET maxfd = 0;
-
-	memset(&tv, 0, sizeof(tv));
-	tv.tv_sec = milliseconds / 1000;
-	tv.tv_usec = (milliseconds % 1000) * 1000;
-	FD_ZERO(&set);
-
-	for (i = 0; i < n; i++) {
-		FD_SET((SOCKET)pfd[i].fd, &set);
-		pfd[i].revents = 0;
-
-		if (pfd[i].fd > maxfd) {
-			maxfd = pfd[i].fd;
-		}
-	}
-
-	if ((result = select((int)maxfd + 1, &set, NULL, NULL, &tv)) > 0) {
-		for (i = 0; i < n; i++) {
-			if (FD_ISSET(pfd[i].fd, &set)) {
-				pfd[i].revents = POLLIN;
-			}
-		}
-	}
-
-	return result;
-}
-#endif /* HAVE_POLL */
-
 #if defined(__MINGW32__)
 /* Enable unused function warning again */
 #pragma GCC diagnostic pop
@@ -3637,6 +3601,41 @@ set_non_blocking_mode(SOCKET sock)
 #endif /* _WIN32 */
 /* End of initial operating system specific define block. */
 
+#ifndef HAVE_POLL
+static int
+poll(struct pollfd *pfd, unsigned int n, int milliseconds)
+{
+	struct timeval tv;
+	fd_set set;
+	unsigned int i;
+	int result;
+	SOCKET maxfd = 0;
+
+	memset(&tv, 0, sizeof(tv));
+	tv.tv_sec = milliseconds / 1000;
+	tv.tv_usec = (milliseconds % 1000) * 1000;
+	FD_ZERO(&set);
+
+	for (i = 0; i < n; i++) {
+		FD_SET((SOCKET)pfd[i].fd, &set);
+		pfd[i].revents = 0;
+
+		if (pfd[i].fd > maxfd) {
+			maxfd = pfd[i].fd;
+		}
+	}
+
+	if ((result = select((int)maxfd + 1, &set, NULL, NULL, &tv)) > 0) {
+		for (i = 0; i < n; i++) {
+			if (FD_ISSET(pfd[i].fd, &set)) {
+				pfd[i].revents = POLLIN;
+			}
+		}
+	}
+
+	return result;
+}
+#endif /* HAVE_POLL */
 
 /* Get a random number (independent of C rand function) */
 static uint64_t
-- 
1.8.4.5




More information about the devel mailing list