diff -urNp inetutils/ping/ping.c inetutils-build/ping/ping.c --- inetutils/ping/ping.c 2007-07-16 00:01:53.000000000 +0530 +++ inetutils-build/ping/ping.c 2007-07-22 07:34:12.000000000 +0530 @@ -232,6 +232,7 @@ main (int argc, char **argv) { int index; int one = 1; + int status; if (getuid () == 0) is_root = true; @@ -263,7 +264,10 @@ main (int argc, char **argv) init_data_buffer (patptr, pattern_len); - return (*(ping_type)) (argc, argv); + status = (*(ping_type)) (argc, argv); + free (ping); + free (data_buffer); + return status; } int (*decode_type (const char *arg)) (int argc, char **argv) @@ -385,6 +389,10 @@ ping_run (PING * ping, int (*finish) ()) gettimeofday (&last, NULL); } } + + free (ping->ping_buffer); + free (ping->ping_cktab); + if (finish) return (*finish) (); return 0; diff -urNp inetutils/ping/ping_echo.c inetutils-build/ping/ping_echo.c --- inetutils/ping/ping_echo.c 2007-07-16 00:01:53.000000000 +0530 +++ inetutils-build/ping/ping_echo.c 2007-07-22 07:16:25.000000000 +0530 @@ -75,6 +75,8 @@ ping_echo (int argc, char **argv) #ifdef IP_OPTIONS char rspace[3 + 4 * NROUTES + 1]; /* record route space */ #endif + + int status; struct ping_stat ping_stat; if (options & OPT_FLOOD && options & OPT_INTERVAL) @@ -110,7 +112,9 @@ ping_echo (int argc, char **argv) ping->ping_hostname, inet_ntoa (ping->ping_dest.sin_addr), data_length); - return ping_run (ping, echo_finish); + status = ping_run (ping, echo_finish); + free (ping->ping_hostname); + return status; } int @@ -528,5 +532,5 @@ echo_finish () printf ("round-trip min/avg/max/stddev = %.3f/%.3f/%.3f/%.3f ms\n", ping_stat->tmin, avg, ping_stat->tmax, nsqrt (vari, 0.0005)); } - exit (ping->ping_num_recv == 0); + return (ping->ping_num_recv == 0); }