HI Peter,

Peter Bex <peter....@xs4all.nl> writes:

> This seems like a good idea.  However, could you also swap the two
> code blocks?  A double negation (#ifndef NO_...) can be confusing, and
> by making it read "#ifdef NO_POSIX_POLL" (I'd probably drop the
> HAVE_ prefix, as that's more idiomatic AFAICT), it becomes a little
> clearer.

you are right--my intention was to make the patch as non-invasive as
possible so its purpose is obvious. Now that the purpose should be
clear, find attached an updated version which swaps the code blocks to
avoid the double negation. I also dropped the HAVE_ prefix as per your
suggestion, I didn't see the other flags names like that. Thanks for the
hint!

Moritz
>From 27097791ee5de99d52d513858b10d4e43ce0e33b Mon Sep 17 00:00:00 2001
From: Moritz Heidkamp <moritz.heidk...@bevuta.com>
Date: Mon, 4 Aug 2014 15:23:13 +0200
Subject: [PATCH] Invert poll(2) flag default

To be on the safe side we now assume that poll(2) is available by
default and define the NO_POSIX_POLL flag in case it isn't available on
a platform.
---
 Makefile.aix               |  1 -
 Makefile.android           |  1 -
 Makefile.bsd               |  1 -
 Makefile.cross-linux-mingw |  1 +
 Makefile.cygwin            |  1 -
 Makefile.haiku             |  1 -
 Makefile.hurd              |  1 -
 Makefile.ios               |  1 -
 Makefile.linux             |  1 -
 Makefile.macosx            |  1 -
 Makefile.mingw             |  1 +
 Makefile.mingw-msys        |  1 +
 Makefile.solaris           |  1 -
 runtime.c                  | 14 ++++++------
 scheduler.scm              | 54 +++++++++++++++++++++++-----------------------
 15 files changed, 37 insertions(+), 44 deletions(-)

diff --git a/Makefile.aix b/Makefile.aix
index 68b33b7..72e9715 100644
--- a/Makefile.aix
+++ b/Makefile.aix
@@ -74,7 +74,6 @@ chicken-config.h: chicken-defaults.h
 	echo "#define HAVE_LONG_LONG 1" >>$@
 	echo "#define HAVE_MEMMOVE 1" >>$@
 	echo "#define HAVE_MEMORY_H 1" >>$@
-	echo "#define HAVE_POSIX_POLL 1" >>$@
 	echo "#define HAVE_SIGACTION 1" >>$@
 	echo "#define HAVE_SIGSETJMP 1" >>$@
 	echo "#define HAVE_STDINT_H 1" >>$@
diff --git a/Makefile.android b/Makefile.android
index ac72ee8..819587f 100644
--- a/Makefile.android
+++ b/Makefile.android
@@ -69,7 +69,6 @@ chicken-config.h: chicken-defaults.h
 	echo "#define HAVE_LONG_LONG 1" >>$@
 	echo "#define HAVE_MEMMOVE 1" >>$@
 	echo "#define HAVE_MEMORY_H 1" >>$@
-	echo "#define HAVE_POSIX_POLL 1" >>$@
 	echo "#define HAVE_SIGACTION 1" >>$@
 	echo "#define HAVE_SIGSETJMP 1" >>$@
 	echo "#define HAVE_STDINT_H 1" >>$@
diff --git a/Makefile.bsd b/Makefile.bsd
index af28814..c69ea35 100644
--- a/Makefile.bsd
+++ b/Makefile.bsd
@@ -72,7 +72,6 @@ chicken-config.h: chicken-defaults.h
 	echo "#define HAVE_LONG_LONG 1" >>$@
 	echo "#define HAVE_MEMMOVE 1" >>$@
 	echo "#define HAVE_MEMORY_H 1" >>$@
-	echo "#define HAVE_POSIX_POLL 1" >>$@
 	echo "#define HAVE_SIGACTION 1" >>$@
 	echo "#define HAVE_SIGSETJMP 1" >>$@
 	echo "#define HAVE_SIGPROCMASK 1" >>$@
diff --git a/Makefile.cross-linux-mingw b/Makefile.cross-linux-mingw
index 32a6f2f..6e4c34a 100644
--- a/Makefile.cross-linux-mingw
+++ b/Makefile.cross-linux-mingw
@@ -95,6 +95,7 @@ chicken-config.h: chicken-defaults.h
 	echo "#define HAVE_LONG_LONG 1" >>$@
 	echo "#define HAVE_MEMMOVE 1" >>$@
 	echo "#define HAVE_MEMORY_H 1" >>$@
+	echo "#define NO_POSIX_POLL 1" >>$@
 	echo "#define HAVE_STDINT_H 1" >>$@
 	echo "#define HAVE_STDLIB_H 1" >>$@
 	echo "#define HAVE_STRERROR 1" >>$@
diff --git a/Makefile.cygwin b/Makefile.cygwin
index 376f6b8..f499c90 100644
--- a/Makefile.cygwin
+++ b/Makefile.cygwin
@@ -89,7 +89,6 @@ chicken-config.h: chicken-defaults.h
 	echo "#define HAVE_LONG_LONG 1" >>$@
 	echo "#define HAVE_MEMMOVE 1" >>$@
 	echo "#define HAVE_MEMORY_H 1" >>$@
-	echo "#define HAVE_POSIX_POLL 1" >>$@
 	echo "#define HAVE_SIGACTION 1" >>$@
 	echo "#define HAVE_STDINT_H 1" >>$@
 	echo "#define HAVE_STDLIB_H 1" >>$@
diff --git a/Makefile.haiku b/Makefile.haiku
index a1f5841..7eeec26 100644
--- a/Makefile.haiku
+++ b/Makefile.haiku
@@ -66,7 +66,6 @@ chicken-config.h: chicken-defaults.h
 	echo "#define HAVE_LONG_LONG 1" >>$@
 	echo "#define HAVE_MEMMOVE 1" >>$@
 	echo "#define HAVE_MEMORY_H 1" >>$@
-	echo "#define HAVE_POSIX_POLL 1" >>$@
 	echo "#define HAVE_SIGACTION 1" >>$@
 	echo "#define HAVE_SIGSETJMP 1" >>$@
 	echo "#define HAVE_SIGPROCMASK 1" >>$@
diff --git a/Makefile.hurd b/Makefile.hurd
index 6a97db6..d2f9a1f 100644
--- a/Makefile.hurd
+++ b/Makefile.hurd
@@ -67,7 +67,6 @@ chicken-config.h: chicken-defaults.h
 	echo "#define HAVE_LONG_LONG 1" >>$@
 	echo "#define HAVE_MEMMOVE 1" >>$@
 	echo "#define HAVE_MEMORY_H 1" >>$@
-	echo "#define HAVE_POSIX_POLL 1" >>$@
 	echo "#define HAVE_SIGACTION 1" >>$@
 	echo "#define HAVE_SIGSETJMP 1" >>$@
 	echo "#define HAVE_SIGPROCMASK 1" >>$@
diff --git a/Makefile.ios b/Makefile.ios
index 6f82e00..6c99c47 100644
--- a/Makefile.ios
+++ b/Makefile.ios
@@ -73,7 +73,6 @@ chicken-config.h: chicken-defaults.h
 	echo "#define HAVE_LONG_LONG 1" >>$@
 	echo "#define HAVE_MEMMOVE 1" >>$@
 	echo "#define HAVE_MEMORY_H 1" >>$@
-	echo "#define HAVE_POSIX_POLL 1" >>$@
 	echo "#define HAVE_SIGACTION 1" >>$@
 	echo "#define HAVE_SIGSETJMP 1" >>$@
 	echo "#define HAVE_SIGPROCMASK 1" >>$@
diff --git a/Makefile.linux b/Makefile.linux
index 3f2aca1..c941821 100644
--- a/Makefile.linux
+++ b/Makefile.linux
@@ -67,7 +67,6 @@ chicken-config.h: chicken-defaults.h
 	echo "#define HAVE_LONG_LONG 1" >>$@
 	echo "#define HAVE_MEMMOVE 1" >>$@
 	echo "#define HAVE_MEMORY_H 1" >>$@
-	echo "#define HAVE_POSIX_POLL 1" >>$@
 	echo "#define HAVE_SIGACTION 1" >>$@
 	echo "#define HAVE_SIGSETJMP 1" >>$@
 	echo "#define HAVE_SIGPROCMASK 1" >>$@
diff --git a/Makefile.macosx b/Makefile.macosx
index 9ce4682..033a43e 100644
--- a/Makefile.macosx
+++ b/Makefile.macosx
@@ -95,7 +95,6 @@ chicken-config.h: chicken-defaults.h
 	echo "#define HAVE_LONG_LONG 1" >>$@
 	echo "#define HAVE_MEMMOVE 1" >>$@
 	echo "#define HAVE_MEMORY_H 1" >>$@
-	echo "#define HAVE_POSIX_POLL 1" >>$@
 	echo "#define HAVE_SIGACTION 1" >>$@
 	echo "#define HAVE_SIGSETJMP 1" >>$@
 	echo "#define HAVE_SIGPROCMASK 1" >>$@
diff --git a/Makefile.mingw b/Makefile.mingw
index 3d8cfba..9979028 100644
--- a/Makefile.mingw
+++ b/Makefile.mingw
@@ -87,6 +87,7 @@ chicken-config.h: chicken-defaults.h
 	echo #define HAVE_LONG_LONG 1 >>$@
 	echo #define HAVE_MEMMOVE 1 >>$@
 	echo #define HAVE_MEMORY_H 1 >>$@
+	echo #define NO_POSIX_POLL 1 >>$@
 	echo #define HAVE_STDINT_H 1 >>$@
 	echo #define HAVE_STDLIB_H 1 >>$@
 	echo #define HAVE_STRERROR 1 >>$@
diff --git a/Makefile.mingw-msys b/Makefile.mingw-msys
index 9ec6750..d2417f7 100644
--- a/Makefile.mingw-msys
+++ b/Makefile.mingw-msys
@@ -89,6 +89,7 @@ chicken-config.h: chicken-defaults.h
 	echo "#define HAVE_LONG_LONG 1" >>$@
 	echo "#define HAVE_MEMMOVE 1" >>$@
 	echo "#define HAVE_MEMORY_H 1" >>$@
+	echo "#define NO_POSIX_POLL 1" >>$@
 	echo "#define HAVE_STDINT_H 1" >>$@
 	echo "#define HAVE_STDLIB_H 1" >>$@
 	echo "#define HAVE_STRERROR 1" >>$@
diff --git a/Makefile.solaris b/Makefile.solaris
index dc7afb2..9be873f 100644
--- a/Makefile.solaris
+++ b/Makefile.solaris
@@ -98,7 +98,6 @@ chicken-config.h: chicken-defaults.h
 	echo "#define HAVE_LONG_LONG 1" >>$@
 	echo "#define HAVE_MEMMOVE 1" >>$@
 	echo "#define HAVE_MEMORY_H 1" >>$@
-	echo "#define HAVE_POSIX_POLL 1" >>$@
 	echo "#define HAVE_SIGACTION 1" >>$@
 	echo "#define HAVE_STDINT_H 1" >>$@
 	echo "#define HAVE_STDLIB_H 1" >>$@
diff --git a/runtime.c b/runtime.c
index 1a68906..5585c9b 100644
--- a/runtime.c
+++ b/runtime.c
@@ -64,7 +64,7 @@
 #endif
 
 /* TODO: Include sys/select.h? Windows doesn't seem to have it... */
-#ifdef HAVE_POSIX_POLL
+#ifndef NO_POSIX_POLL
 #  include <poll.h>
 #endif
 
@@ -4124,12 +4124,7 @@ C_regparm C_word C_fcall C_execute_shell_command(C_word string)
  */
 C_regparm int C_fcall C_check_fd_ready(int fd)
 {
-#ifdef HAVE_POSIX_POLL
-  struct pollfd ps;
-  ps.fd = fd;
-  ps.events = POLLIN;
-  return poll(&ps, 1, 0);
-#else
+#ifdef NO_POSIX_POLL
   fd_set in;
   struct timeval tm;
   int rv;
@@ -4139,6 +4134,11 @@ C_regparm int C_fcall C_check_fd_ready(int fd)
   rv = select(fd + 1, &in, NULL, NULL, &tm);
   if(rv > 0) { rv = FD_ISSET(fd, &in) ? 1 : 0; }
   return rv;
+#else
+  struct pollfd ps;
+  ps.fd = fd;
+  ps.events = POLLIN;
+  return poll(&ps, 1, 0);
 #endif
 }
 
diff --git a/scheduler.scm b/scheduler.scm
index f6e996f..ff5d80d 100644
--- a/scheduler.scm
+++ b/scheduler.scm
@@ -66,7 +66,33 @@ C_word C_msleep(C_word ms) {
 }
 #endif
 
-#ifdef HAVE_POSIX_POLL
+#ifdef NO_POSIX_POLL
+
+/* Shouldn't we include <sys/select.h> here? */
+static fd_set C_fdset_input, C_fdset_output;
+
+#define C_fd_input_ready(fd,pos)  C_mk_bool(FD_ISSET(C_unfix(fd), &C_fdset_input))
+#define C_fd_output_ready(fd,pos)  C_mk_bool(FD_ISSET(C_unfix(fd), &C_fdset_output))
+
+C_inline int C_ready_fds_timeout(int to, double tm) {
+  struct timeval timeout;
+  timeout.tv_sec = tm / 1000;
+  timeout.tv_usec = fmod(tm, 1000) * 1000;
+  /* we use FD_SETSIZE, but really should use max fd */
+  return select(FD_SETSIZE, &C_fdset_input, &C_fdset_output, NULL, to ? &timeout : NULL);
+}
+
+C_inline void C_prepare_fdset(int length) {
+  FD_ZERO(&C_fdset_input);
+  FD_ZERO(&C_fdset_output);
+}
+
+C_inline void C_fdset_add(int fd, int input, int output) {
+  if (input) FD_SET(fd, &C_fdset_input);
+  if (output) FD_SET(fd, &C_fdset_output);
+}
+
+#else
 #  include <poll.h>
 #  include <assert.h>
 
@@ -98,32 +124,6 @@ C_inline void C_fdset_add(int fd, int input, int output) {
   C_fdset_set[C_fdset_nfds].events = ((input ? POLLIN : 0) | (output ? POLLOUT : 0));
   C_fdset_set[C_fdset_nfds++].fd = fd;
 }
-
-#else
-
-/* Shouldn't we include <sys/select.h> here? */
-static fd_set C_fdset_input, C_fdset_output;
-
-#define C_fd_input_ready(fd,pos)  C_mk_bool(FD_ISSET(C_unfix(fd), &C_fdset_input))
-#define C_fd_output_ready(fd,pos)  C_mk_bool(FD_ISSET(C_unfix(fd), &C_fdset_output))
-
-C_inline int C_ready_fds_timeout(int to, double tm) {
-  struct timeval timeout;
-  timeout.tv_sec = tm / 1000;
-  timeout.tv_usec = fmod(tm, 1000) * 1000;
-  /* we use FD_SETSIZE, but really should use max fd */
-  return select(FD_SETSIZE, &C_fdset_input, &C_fdset_output, NULL, to ? &timeout : NULL);
-}
-
-C_inline void C_prepare_fdset(int length) {
-  FD_ZERO(&C_fdset_input);
-  FD_ZERO(&C_fdset_output);
-}
-
-C_inline void C_fdset_add(int fd, int input, int output) {
-  if (input) FD_SET(fd, &C_fdset_input);
-  if (output) FD_SET(fd, &C_fdset_output);
-}
 #endif
 EOF
 ) )
-- 
2.1.0

_______________________________________________
Chicken-hackers mailing list
Chicken-hackers@nongnu.org
https://lists.nongnu.org/mailman/listinfo/chicken-hackers

Reply via email to