aboutsummaryrefslogtreecommitdiff
path: root/networking/ping.c
diff options
context:
space:
mode:
authorDenis Vlasenko <vda.linux@googlemail.com>2007-06-04 10:33:48 +0000
committerDenis Vlasenko <vda.linux@googlemail.com>2007-06-04 10:33:48 +0000
commit821cc25f435fa4b463f20669b2b9baf198ea04c4 (patch)
tree5ca7ad997400931e6d978111e43715f43cffb949 /networking/ping.c
parent74324c86663f57a19c1de303ee8c8e5449db9ef2 (diff)
downloadbusybox-w32-821cc25f435fa4b463f20669b2b9baf198ea04c4.tar.gz
busybox-w32-821cc25f435fa4b463f20669b2b9baf198ea04c4.tar.bz2
busybox-w32-821cc25f435fa4b463f20669b2b9baf198ea04c4.zip
ping: stop using data/bss
function old new delta ping_main 375 392 +17 unpack_tail 317 320 +3 ping4 525 528 +3 ping6 772 773 +1 sendping6 99 98 -1 sendping4 184 183 -1 myid 2 - -2 sendping_tail 154 151 -3 tsum 4 - -4 tmin 4 - -4 tmax 4 - -4 source_lsa 4 - -4 pingsock 4 - -4 pingcount 4 - -4 ntransmitted 4 - -4 nrepeats 4 - -4 nreceived 4 - -4 if_index 4 - -4 hostname 8 4 -4 dotted 4 - -4 datalen 4 - -4 pingaddr 28 - -28 rcvd_tbl 128 - -128 ------------------------------------------------------------------------------ (add/remove: 0/15 grow/shrink: 4/4 up/down: 24/-215) Total: -191 bytes text data bss dec hex filename 679835 2728 16736 699299 aaba3 busybox_old 679851 2720 16536 699107 aaae3 busybox_unstripped
Diffstat (limited to 'networking/ping.c')
-rw-r--r--networking/ping.c62
1 files changed, 44 insertions, 18 deletions
diff --git a/networking/ping.c b/networking/ping.c
index 9db3180f1..6b5045eb3 100644
--- a/networking/ping.c
+++ b/networking/ping.c
@@ -235,27 +235,51 @@ enum {
235}; 235};
236 236
237 237
238static union { 238struct globals {
239 struct sockaddr sa; 239 int pingsock;
240 struct sockaddr_in sin; 240 len_and_sockaddr *source_lsa;
241 unsigned datalen;
242 int if_index;
243 unsigned long ntransmitted, nreceived, nrepeats, pingcount;
244 uint16_t myid;
245 unsigned tmin, tmax;
246 unsigned long tsum;
247 const char *hostname;
248 const char *dotted;
249 union {
250 struct sockaddr sa;
251 struct sockaddr_in sin;
241#if ENABLE_PING6 252#if ENABLE_PING6
242 struct sockaddr_in6 sin6; 253 struct sockaddr_in6 sin6;
243#endif 254#endif
244} pingaddr; 255 } pingaddr;
245static len_and_sockaddr *source_lsa; 256 char rcvd_tbl[MAX_DUP_CHK / 8];
246static int pingsock = -1; 257};
247static unsigned datalen; /* intentionally uninitialized to work around gcc bug */ 258#define G (*(struct globals*)&bb_common_bufsiz1)
248 259#define pingsock (G.pingsock )
249static int if_index; 260#define source_lsa (G.source_lsa )
250 261#define datalen (G.datalen )
251static unsigned long ntransmitted, nreceived, nrepeats, pingcount; 262#define if_index (G.if_index )
252static uint16_t myid; 263#define ntransmitted (G.ntransmitted)
253static unsigned tmin = UINT_MAX, tmax; 264#define nreceived (G.nreceived )
254static unsigned long tsum; 265#define nrepeats (G.nrepeats )
255static char rcvd_tbl[MAX_DUP_CHK / 8]; 266#define pingcount (G.pingcount )
267#define myid (G.myid )
268#define tmin (G.tmin )
269#define tmax (G.tmax )
270#define tsum (G.tsum )
271#define hostname (G.hostname )
272#define dotted (G.dotted )
273#define pingaddr (G.pingaddr )
274#define rcvd_tbl (G.rcvd_tbl )
275void BUG_ping_globals_too_big(void);
276#define INIT_G() do { \
277 if (sizeof(G) > COMMON_BUFSIZE) \
278 BUG_ping_globals_too_big(); \
279 pingsock = -1; \
280 tmin = UINT_MAX; \
281} while (0)
256 282
257static const char *hostname;
258static const char *dotted;
259 283
260#define A(bit) rcvd_tbl[(bit)>>3] /* identify byte in array */ 284#define A(bit) rcvd_tbl[(bit)>>3] /* identify byte in array */
261#define B(bit) (1 << ((bit) & 0x07)) /* identify bit in byte */ 285#define B(bit) (1 << ((bit) & 0x07)) /* identify bit in byte */
@@ -652,6 +676,8 @@ int ping_main(int argc, char **argv)
652 char *opt_c, *opt_s, *opt_I; 676 char *opt_c, *opt_s, *opt_I;
653 USE_PING6(sa_family_t af = AF_UNSPEC;) 677 USE_PING6(sa_family_t af = AF_UNSPEC;)
654 678
679 INIT_G();
680
655 datalen = DEFDATALEN; /* initialized here rather than in global scope to work around gcc bug */ 681 datalen = DEFDATALEN; /* initialized here rather than in global scope to work around gcc bug */
656 682
657 /* exactly one argument needed, -v and -q don't mix */ 683 /* exactly one argument needed, -v and -q don't mix */