Sure - I should have spotted that.
Index: ping.c
===================================================================
RCS file: /cvs/src/sbin/ping/ping.c,v
retrieving revision 1.100
diff -u -r1.100 ping.c
--- ping.c 24 Mar 2014 11:11:49 -0000 1.100
+++ ping.c 22 Apr 2014 06:55:03 -0000
@@ -188,7 +188,6 @@
socklen_t maxsizelen;
const char *errstr;
fd_set *fdmaskp;
- size_t fdmasks;
uid_t uid;
u_int rtableid;
@@ -507,9 +506,8 @@
if ((options & F_FLOOD) == 0)
catcher(0); /* start things going */
- fdmasks = howmany(s+1, NFDBITS) * sizeof(fd_mask);
- if ((fdmaskp = (fd_set *)malloc(fdmasks)) == NULL)
- err(1, "malloc");
+ if ((fdmaskp = calloc(1, howmany(s+1, NFDBITS) *
sizeof(fd_mask))) == NULL)
+ err(1, "calloc");
for (;;) {
struct sockaddr_in from;
@@ -521,7 +519,6 @@
pinger();
timeout.tv_sec = 0;
timeout.tv_usec = 10000;
- memset(fdmaskp, 0, fdmasks);
FD_SET(s, fdmaskp);
if (select(s + 1, (fd_set *)fdmaskp, (fd_set *)NULL,
(fd_set *)NULL, &timeout) < 1)
Quoting Otto Moerbeek <o...@drijf.net>:
On Tue, Apr 22, 2014 at 12:45:25AM -0400, Peter Malone wrote:
Hi,
malloc & memset can be replaced with calloc in ping.c. Please see below for
patch details:
Better rework this to get rid of fdmasks.
-Otto
Index: ping.c
===================================================================
RCS file: /cvs/src/sbin/ping/ping.c,v
retrieving revision 1.100
diff -u -p -u -r1.100 ping.c
--- ping.c 24 Mar 2014 11:11:49 -0000 1.100
+++ ping.c 22 Apr 2014 04:41:56 -0000
@@ -508,8 +508,8 @@ main(int argc, char *argv[])
catcher(0); /* start things going */
fdmasks = howmany(s+1, NFDBITS) * sizeof(fd_mask);
- if ((fdmaskp = (fd_set *)malloc(fdmasks)) == NULL)
- err(1, "malloc");
+ if ((fdmaskp = calloc(1, fdmasks)) == NULL)
+ err(1, "calloc");
for (;;) {
struct sockaddr_in from;
@@ -521,7 +521,6 @@ main(int argc, char *argv[])
pinger();
timeout.tv_sec = 0;
timeout.tv_usec = 10000;
- memset(fdmaskp, 0, fdmasks);
FD_SET(s, fdmaskp);
if (select(s + 1, (fd_set *)fdmaskp, (fd_set *)NULL,
(fd_set *)NULL, &timeout) < 1)