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)





Reply via email to