mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-04-30 11:50:28 +02:00
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.
This commit is contained in:
parent
428f9e95fc
commit
b5870f25ad
3 changed files with 4 additions and 48 deletions
|
@ -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/dir.h sys/ioctl.h sys/select.h \
|
||||||
sys/time.h sys/timeb.h sys/times.h sys/stdtypes.h sys/types.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 \
|
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
|
# "complex double" is new in C99, and "complex" is only a keyword if
|
||||||
# <complex.h> is included
|
# <complex.h> is included
|
||||||
|
@ -674,8 +674,6 @@ AC_CHECK_TYPE(socklen_t, ,
|
||||||
|
|
||||||
AC_CHECK_TYPES([struct ip_mreq], , , [#include <netinet/in.h>])
|
AC_CHECK_TYPES([struct ip_mreq], , , [#include <netinet/in.h>])
|
||||||
|
|
||||||
AC_CHECK_TYPES([struct pollfd], , , [#include <poll.h>])
|
|
||||||
|
|
||||||
GUILE_HEADER_LIBC_WITH_UNISTD
|
GUILE_HEADER_LIBC_WITH_UNISTD
|
||||||
|
|
||||||
AC_TYPE_GETGROUPS
|
AC_TYPE_GETGROUPS
|
||||||
|
@ -737,7 +735,6 @@ AC_CHECK_HEADERS([assert.h crt_externs.h])
|
||||||
# gmtime_r - recent posix, not on old systems
|
# gmtime_r - recent posix, not on old systems
|
||||||
# pipe - not in mingw
|
# pipe - not in mingw
|
||||||
# _pipe - specific to mingw, taking 3 args
|
# _pipe - specific to mingw, taking 3 args
|
||||||
# poll - since posix 2001
|
|
||||||
# readdir_r - recent posix, not on old systems
|
# readdir_r - recent posix, not on old systems
|
||||||
# readdir64_r - not available on HP-UX 11.11
|
# readdir64_r - not available on HP-UX 11.11
|
||||||
# stat64 - SuS largefile stuff, not on old systems
|
# stat64 - SuS largefile stuff, not on old systems
|
||||||
|
@ -750,7 +747,7 @@ AC_CHECK_HEADERS([assert.h crt_externs.h])
|
||||||
# utimensat: posix.1-2008
|
# utimensat: posix.1-2008
|
||||||
# sched_getaffinity, sched_setaffinity: GNU extensions (glibc)
|
# 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"])
|
AM_CONDITIONAL([HAVE_FORK], [test "x$ac_cv_func_fork" = "xyes"])
|
||||||
|
|
||||||
|
|
|
@ -41,9 +41,7 @@
|
||||||
#ifdef HAVE_STRUCT_STAT_ST_BLKSIZE
|
#ifdef HAVE_STRUCT_STAT_ST_BLKSIZE
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_POLL_H
|
|
||||||
#include <poll.h>
|
#include <poll.h>
|
||||||
#endif
|
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
|
@ -546,42 +544,12 @@ fport_input_waiting (SCM port)
|
||||||
{
|
{
|
||||||
int fdes = SCM_FSTREAM (port)->fdes;
|
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 };
|
struct pollfd pollfd = { fdes, POLLIN, 0 };
|
||||||
|
|
||||||
if (poll (&pollfd, 1, 0) < 0)
|
if (poll (&pollfd, 1, 0) < 0)
|
||||||
scm_syserror ("fport_input_waiting");
|
scm_syserror ("fport_input_waiting");
|
||||||
|
|
||||||
return pollfd.revents & POLLIN ? 1 : 0;
|
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
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -25,6 +25,8 @@
|
||||||
# include <config.h>
|
# include <config.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include <poll.h>
|
||||||
|
|
||||||
#include "libguile/_scm.h"
|
#include "libguile/_scm.h"
|
||||||
#include "libguile/bytevectors.h"
|
#include "libguile/bytevectors.h"
|
||||||
#include "libguile/numbers.h"
|
#include "libguile/numbers.h"
|
||||||
|
@ -33,11 +35,6 @@
|
||||||
|
|
||||||
#include "libguile/poll.h"
|
#include "libguile/poll.h"
|
||||||
|
|
||||||
|
|
||||||
#ifdef HAVE_POLL_H
|
|
||||||
#include <poll.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* {Poll}
|
/* {Poll}
|
||||||
|
@ -73,7 +70,6 @@
|
||||||
If timeout is given and is non-negative, the poll will return after that
|
If timeout is given and is non-negative, the poll will return after that
|
||||||
number of milliseconds if no fd became active.
|
number of milliseconds if no fd became active.
|
||||||
*/
|
*/
|
||||||
#if defined(HAVE_POLL) && defined(HAVE_STRUCT_POLLFD)
|
|
||||||
static SCM
|
static SCM
|
||||||
scm_primitive_poll (SCM pollfds, SCM nfds, SCM ports, SCM timeout)
|
scm_primitive_poll (SCM pollfds, SCM nfds, SCM ports, SCM timeout)
|
||||||
#define FUNC_NAME "primitive-poll"
|
#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);
|
return scm_from_int (rv);
|
||||||
}
|
}
|
||||||
#undef FUNC_NAME
|
#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
|
static void
|
||||||
scm_init_poll (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_gsubr ("primitive-poll", 4, 0, 0, scm_primitive_poll);
|
||||||
scm_c_define ("%sizeof-struct-pollfd", scm_from_size_t (sizeof (struct pollfd)));
|
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
|
#ifdef POLLIN
|
||||||
scm_c_define ("POLLIN", scm_from_int (POLLIN));
|
scm_c_define ("POLLIN", scm_from_int (POLLIN));
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue