From b5870f25ad70dc70df99f69ff2652d73ec07343c Mon Sep 17 00:00:00 2001 From: Jason Earl Date: Sun, 10 Mar 2013 23:44:23 +0100 Subject: [PATCH] rely on gnulib for `poll' * configure.ac: * libguile/fports.c (fport_input_waiting): * libguile/poll.c (scm_primitive_poll): Rely on gnulib to provide poll for us. --- configure.ac | 7 ++----- libguile/fports.c | 32 -------------------------------- libguile/poll.c | 13 ++----------- 3 files changed, 4 insertions(+), 48 deletions(-) diff --git a/configure.ac b/configure.ac index b44159870..af6afcc77 100644 --- a/configure.ac +++ b/configure.ac @@ -652,7 +652,7 @@ AC_CHECK_HEADERS([complex.h fenv.h io.h libc.h limits.h memory.h process.h strin 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 machine/fpu.h poll.h sched.h]) +direct.h machine/fpu.h sched.h]) # "complex double" is new in C99, and "complex" is only a keyword if # is included @@ -674,8 +674,6 @@ AC_CHECK_TYPE(socklen_t, , AC_CHECK_TYPES([struct ip_mreq], , , [#include ]) -AC_CHECK_TYPES([struct pollfd], , , [#include ]) - GUILE_HEADER_LIBC_WITH_UNISTD AC_TYPE_GETGROUPS @@ -737,7 +735,6 @@ AC_CHECK_HEADERS([assert.h crt_externs.h]) # gmtime_r - recent posix, not on old systems # pipe - not in mingw # _pipe - specific to mingw, taking 3 args -# poll - since posix 2001 # readdir_r - recent posix, not on old systems # readdir64_r - not available on HP-UX 11.11 # stat64 - SuS largefile stuff, not on old systems @@ -750,7 +747,7 @@ AC_CHECK_HEADERS([assert.h crt_externs.h]) # utimensat: posix.1-2008 # sched_getaffinity, sched_setaffinity: GNU extensions (glibc) # -AC_CHECK_FUNCS([DINFINITY DQNAN cexp chsize clog clog10 ctermid fesetround ftime ftruncate fchown fchmod getcwd geteuid getsid gettimeofday gmtime_r ioctl lstat mkdir mknod nice pipe _pipe poll 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 strcoll strcoll_l newlocale utimensat sched_getaffinity sched_setaffinity]) +AC_CHECK_FUNCS([DINFINITY DQNAN cexp chsize clog clog10 ctermid fesetround ftime ftruncate fchown fchmod getcwd geteuid getsid 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 strcoll strcoll_l newlocale utimensat sched_getaffinity sched_setaffinity]) AM_CONDITIONAL([HAVE_FORK], [test "x$ac_cv_func_fork" = "xyes"]) diff --git a/libguile/fports.c b/libguile/fports.c index e0b99b520..f6c3c92ca 100644 --- a/libguile/fports.c +++ b/libguile/fports.c @@ -41,9 +41,7 @@ #ifdef HAVE_STRUCT_STAT_ST_BLKSIZE #include #endif -#ifdef HAVE_POLL_H #include -#endif #include #include #include @@ -546,42 +544,12 @@ fport_input_waiting (SCM port) { int fdes = SCM_FSTREAM (port)->fdes; - /* `FD_SETSIZE', which is 1024 on GNU systems, effectively limits the - highest numerical value of file descriptors that can be monitored. - Thus, use poll(2) whenever that is possible. */ - -#if defined(HAVE_POLL) && defined(HAVE_STRUCT_POLLFD) struct pollfd pollfd = { fdes, POLLIN, 0 }; if (poll (&pollfd, 1, 0) < 0) scm_syserror ("fport_input_waiting"); return pollfd.revents & POLLIN ? 1 : 0; - -#else - struct timeval timeout; - fd_set read_set; - fd_set write_set; - fd_set except_set; - - FD_ZERO (&read_set); - FD_ZERO (&write_set); - FD_ZERO (&except_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 (fdes + 1, - &read_set, &write_set, &except_set, &timeout) - < 0) - scm_syserror ("fport_input_waiting"); - return FD_ISSET (fdes, &read_set) ? 1 : 0; -#endif } diff --git a/libguile/poll.c b/libguile/poll.c index 5bfd97b05..9ea846b6d 100644 --- a/libguile/poll.c +++ b/libguile/poll.c @@ -25,6 +25,8 @@ # include #endif +#include + #include "libguile/_scm.h" #include "libguile/bytevectors.h" #include "libguile/numbers.h" @@ -33,11 +35,6 @@ #include "libguile/poll.h" - -#ifdef HAVE_POLL_H -#include -#endif - /* {Poll} @@ -73,7 +70,6 @@ If timeout is given and is non-negative, the poll will return after that number of milliseconds if no fd became active. */ -#if defined(HAVE_POLL) && defined(HAVE_STRUCT_POLLFD) static SCM scm_primitive_poll (SCM pollfds, SCM nfds, SCM ports, SCM timeout) #define FUNC_NAME "primitive-poll" @@ -174,7 +170,6 @@ scm_primitive_poll (SCM pollfds, SCM nfds, SCM ports, SCM timeout) return scm_from_int (rv); } #undef FUNC_NAME -#endif /* HAVE_POLL && HAVE_STRUCT_POLLFD */ @@ -182,12 +177,8 @@ scm_primitive_poll (SCM pollfds, SCM nfds, SCM ports, SCM timeout) static void scm_init_poll (void) { -#if defined(HAVE_POLL) && defined(HAVE_STRUCT_POLLFD) scm_c_define_gsubr ("primitive-poll", 4, 0, 0, scm_primitive_poll); scm_c_define ("%sizeof-struct-pollfd", scm_from_size_t (sizeof (struct pollfd))); -#else - scm_misc_error ("%init-poll", "`poll' unavailable on this platform", SCM_EOL); -#endif #ifdef POLLIN scm_c_define ("POLLIN", scm_from_int (POLLIN));