From 8ee0aa19cfc228a962d084bee805cb20bcd70f3b Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Wed, 10 Oct 2018 14:40:47 +0200 Subject: PING(8): Honour file descriptor maximum --- freebsd/sbin/ping/ping.c | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'freebsd') diff --git a/freebsd/sbin/ping/ping.c b/freebsd/sbin/ping/ping.c index 4c8f7cc8..376564b7 100644 --- a/freebsd/sbin/ping/ping.c +++ b/freebsd/sbin/ping/ping.c @@ -75,6 +75,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #endif /* __rtems__ */ #include /* NB: we rely on this for */ #include @@ -976,13 +977,23 @@ main(int argc, char *const *argv) almost_done = 0; while (!finish_up) { struct timeval now, timeout; +#ifndef __rtems__ fd_set rfds; +#else /* __rtems__ */ + fd_set big_enough_rfds[howmany(rtems_libio_number_iops, + sizeof(fd_set) * 8)]; +#define rfds (*(fd_set *)(&big_enough_rfds[0])) +#endif /* __rtems__ */ int cc, n; check_status(); +#ifndef __rtems__ if ((unsigned)srecv >= FD_SETSIZE) errx(EX_OSERR, "descriptor too large"); FD_ZERO(&rfds); +#else /* __rtems__ */ + memset(big_enough_rfds, 0, sizeof(big_enough_rfds)); +#endif /* __rtems__ */ FD_SET(srecv, &rfds); (void)gettimeofday(&now, NULL); timeout.tv_sec = last.tv_sec + intvl.tv_sec - now.tv_sec; -- cgit v1.2.3