diff options
author | Andy Wingo <wingo@pobox.com> | 2013-03-09 22:33:24 +0100 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2013-03-09 22:33:24 +0100 |
commit | 629987edfb1d03bcbdb6bf7f15d1ec0ff928e6f8 (patch) | |
tree | 8768acb901b0b0e3edca44b75610f664dcaa8037 | |
parent | ba59471eeeeb6738f87e1c9c4050ce4698a7c9d8 (diff) | |
download | guile-629987edfb1d03bcbdb6bf7f15d1ec0ff928e6f8.tar.gz |
fports uses gnulib's select
* libguile/fports.c: Reorder includes to put system includes first;
fixes windows/winsock2 include error problem. Rely on Gnulib's
select module.
(fport_input_waiting): Use select instead of scm_std_select.
-rw-r--r-- | libguile/fports.c | 50 |
1 files changed, 21 insertions, 29 deletions
diff --git a/libguile/fports.c b/libguile/fports.c index cdb9f99a9..e0b99b520 100644 --- a/libguile/fports.c +++ b/libguile/fports.c @@ -28,15 +28,6 @@ #include <stdio.h> #include <fcntl.h> -#include "libguile/_scm.h" -#include "libguile/strings.h" -#include "libguile/validate.h" -#include "libguile/gc.h" -#include "libguile/posix.h" -#include "libguile/dynwind.h" -#include "libguile/hashtab.h" - -#include "libguile/fports.h" #ifdef HAVE_STRING_H #include <string.h> @@ -56,11 +47,20 @@ #include <errno.h> #include <sys/types.h> #include <sys/stat.h> - -#include "libguile/iselect.h" +#include <sys/select.h> #include <full-write.h> +#include "libguile/_scm.h" +#include "libguile/strings.h" +#include "libguile/validate.h" +#include "libguile/gc.h" +#include "libguile/posix.h" +#include "libguile/dynwind.h" +#include "libguile/hashtab.h" + +#include "libguile/fports.h" + #if SIZEOF_OFF_T == SIZEOF_INT #define OFF_T_MAX INT_MAX #define OFF_T_MIN INT_MIN @@ -558,37 +558,29 @@ fport_input_waiting (SCM port) return pollfd.revents & POLLIN ? 1 : 0; -#elif defined(HAVE_SELECT) +#else struct timeval timeout; - SELECT_TYPE read_set; - SELECT_TYPE write_set; - SELECT_TYPE except_set; + fd_set read_set; + fd_set write_set; + fd_set except_set; FD_ZERO (&read_set); FD_ZERO (&write_set); FD_ZERO (&except_set); - FD_SET (fdes, &read_set); - + if (fdes < FD_SETSIZE) + FD_SET (fdes, &read_set); + else + scm_out_of_range ("fport_input_waiting", scm_from_int (fdes)); + timeout.tv_sec = 0; timeout.tv_usec = 0; - if (select (SELECT_SET_SIZE, + if (select (fdes + 1, &read_set, &write_set, &except_set, &timeout) < 0) scm_syserror ("fport_input_waiting"); return FD_ISSET (fdes, &read_set) ? 1 : 0; - -#elif HAVE_IOCTL && defined (FIONREAD) - int fdes = SCM_FSTREAM (port)->fdes; - int remir; - ioctl(fdes, FIONREAD, &remir); - return remir; - -#else - scm_misc_error ("fport_input_waiting", - "Not fully implemented on this platform", - SCM_EOL); #endif } |