diff --git a/configure.in b/configure.in index 217ac83..ea26b5c 100644 --- a/configure.in +++ b/configure.in @@ -661,7 +661,7 @@ AC_CHECK_HEADERS([complex.h fenv.h io.h libc.h limits.h malloc.h memory.h proces regex.h rxposix.h rx/rxposix.h sys/dir.h sys/ioctl.h sys/select.h \ sys/time.h sys/timeb.h sys/times.h sys/stdtypes.h sys/types.h \ sys/utime.h time.h unistd.h utime.h pwd.h grp.h sys/utsname.h \ -direct.h strings.h machine/fpu.h]) +poll.h direct.h strings.h machine/fpu.h]) # "complex double" is new in C99, and "complex" is only a keyword if # is included @@ -755,7 +755,7 @@ AC_CHECK_HEADERS([assert.h crt_externs.h]) # isblank - available as a GNU extension or in C99 # _NSGetEnviron - Darwin specific # -AC_CHECK_FUNCS([DINFINITY DQNAN cexp chsize clog clog10 ctermid fesetround ftime ftruncate fchown getcwd geteuid gettimeofday gmtime_r ioctl lstat mkdir mknod nice pipe _pipe readdir_r readdir64_r readlink rename rmdir select setegid seteuid setlocale setpgid setsid sigaction siginterrupt stat64 strftime strptime symlink sync sysconf tcgetpgrp tcsetpgrp times uname waitpid strdup system usleep atexit on_exit chown link fcntl ttyname getpwent getgrent kill getppid getpgrp fork setitimer getitimer strchr strcmp index bcopy memcpy rindex truncate unsetenv isblank _NSGetEnviron strncasecmp]) +AC_CHECK_FUNCS([DINFINITY DQNAN cexp chsize clog clog10 ctermid fesetround ftime ftruncate fchown getcwd geteuid gettimeofday gmtime_r ioctl lstat mkdir mknod nice pipe _pipe readdir_r readdir64_r readlink rename rmdir poll select setegid seteuid setlocale setpgid setsid sigaction siginterrupt stat64 strftime strptime symlink sync sysconf tcgetpgrp tcsetpgrp times uname waitpid strdup system usleep atexit on_exit chown link fcntl ttyname getpwent getgrent kill getppid getpgrp fork setitimer getitimer strchr strcmp index bcopy memcpy rindex truncate unsetenv isblank _NSGetEnviron strncasecmp]) # Reasons for testing: # netdb.h - not in mingw diff --git a/libguile/fports.c b/libguile/fports.c index 007ee3f..c807122 100644 --- a/libguile/fports.c +++ b/libguile/fports.c @@ -46,7 +46,9 @@ #ifdef HAVE_STRUCT_STAT_ST_BLKSIZE #include #endif - +#ifdef HAVE_POLL_H +#include +#endif #include #include @@ -485,7 +487,14 @@ scm_fdes_to_port (int fdes, char *mode, SCM name) static int fport_input_waiting (SCM port) { -#ifdef HAVE_SELECT +#ifdef HAVE_POLL + int fdes = SCM_FSTREAM (port)->fdes; + struct pollfd pollfd = { fdes, POLLIN, 0 }; + if (poll(&pollfd, 1, 0) < 0) + scm_syserror ("fport_input_waiting"); + return pollfd.revents & POLLIN ? 1 : 0; + +#elif defined(HAVE_SELECT) int fdes = SCM_FSTREAM (port)->fdes; struct timeval timeout; SELECT_TYPE read_set;