aboutsummaryrefslogtreecommitdiff
path: root/networking/ping.c
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2009-11-20 18:12:12 +0100
committerDenys Vlasenko <vda.linux@googlemail.com>2009-11-20 18:12:12 +0100
commitad7d94bdc7d6a8ffe798a54f09e1e51dd949c9b7 (patch)
tree18eea693059760e3febdb2012ad2aee55a013279 /networking/ping.c
parent8684cbb5cc2c461e3795fba19ad7386db37cf499 (diff)
downloadbusybox-w32-ad7d94bdc7d6a8ffe798a54f09e1e51dd949c9b7.tar.gz
busybox-w32-ad7d94bdc7d6a8ffe798a54f09e1e51dd949c9b7.tar.bz2
busybox-w32-ad7d94bdc7d6a8ffe798a54f09e1e51dd949c9b7.zip
ping6: do not play dirty tricks with argv
function old new delta common_ping_main - 368 +368 ping6_main 30 14 -16 ping_main 370 11 -359 ------------------------------------------------------------------------------ (add/remove: 1/0 grow/shrink: 0/2 up/down: 368/-375) Total: -7 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'networking/ping.c')
-rw-r--r--networking/ping.c41
1 files changed, 26 insertions, 15 deletions
diff --git a/networking/ping.c b/networking/ping.c
index d30eb5cfa..0ca41b9fa 100644
--- a/networking/ping.c
+++ b/networking/ping.c
@@ -30,13 +30,13 @@
30#include "libbb.h" 30#include "libbb.h"
31 31
32#if ENABLE_PING6 32#if ENABLE_PING6
33#include <netinet/icmp6.h> 33# include <netinet/icmp6.h>
34/* I see RENUMBERED constants in bits/in.h - !!? 34/* I see RENUMBERED constants in bits/in.h - !!?
35 * What a fuck is going on with libc? Is it a glibc joke? */ 35 * What a fuck is going on with libc? Is it a glibc joke? */
36#ifdef IPV6_2292HOPLIMIT 36# ifdef IPV6_2292HOPLIMIT
37#undef IPV6_HOPLIMIT 37# undef IPV6_HOPLIMIT
38#define IPV6_HOPLIMIT IPV6_2292HOPLIMIT 38# define IPV6_HOPLIMIT IPV6_2292HOPLIMIT
39#endif 39# endif
40#endif 40#endif
41 41
42enum { 42enum {
@@ -173,13 +173,14 @@ static void ping6(len_and_sockaddr *lsa)
173} 173}
174#endif 174#endif
175 175
176int ping_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; 176#if !ENABLE_PING6
177int ping_main(int argc UNUSED_PARAM, char **argv) 177# define common_ping_main(af, argv) common_ping_main(argv)
178#endif
179static int common_ping_main(sa_family_t af, char **argv)
178{ 180{
179 len_and_sockaddr *lsa; 181 len_and_sockaddr *lsa;
180#if ENABLE_PING6
181 sa_family_t af = AF_UNSPEC;
182 182
183#if ENABLE_PING6
183 while ((++argv)[0] && argv[0][0] == '-') { 184 while ((++argv)[0] && argv[0][0] == '-') {
184 if (argv[0][1] == '4') { 185 if (argv[0][1] == '4') {
185 af = AF_INET; 186 af = AF_INET;
@@ -716,12 +717,10 @@ static void ping(len_and_sockaddr *lsa)
716 ping4(lsa); 717 ping4(lsa);
717} 718}
718 719
719int ping_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; 720static int common_ping_main(int opt, char **argv)
720int ping_main(int argc UNUSED_PARAM, char **argv)
721{ 721{
722 len_and_sockaddr *lsa; 722 len_and_sockaddr *lsa;
723 char *str_s; 723 char *str_s;
724 int opt;
725 724
726 INIT_G(); 725 INIT_G();
727 726
@@ -765,13 +764,25 @@ int ping_main(int argc UNUSED_PARAM, char **argv)
765#endif /* FEATURE_FANCY_PING */ 764#endif /* FEATURE_FANCY_PING */
766 765
767 766
767int ping_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
768int ping_main(int argc UNUSED_PARAM, char **argv)
769{
770#if !ENABLE_FEATURE_FANCY_PING
771 return common_ping_main(AF_UNSPEC, argv);
772#else
773 return common_ping_main(0, argv);
774#endif
775}
776
768#if ENABLE_PING6 777#if ENABLE_PING6
769int ping6_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; 778int ping6_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
770int ping6_main(int argc UNUSED_PARAM, char **argv) 779int ping6_main(int argc UNUSED_PARAM, char **argv)
771{ 780{
772 argv[0] = (char*)"-6"; 781# if !ENABLE_FEATURE_FANCY_PING
773 return ping_main(0 /* argc+1 - but it's unused anyway */, 782 return common_ping_main(AF_INET6, argv);
774 argv - 1); 783# else
784 return common_ping_main(OPT_IPV6, argv);
785# endif
775} 786}
776#endif 787#endif
777 788