---
 networking/ping.c | 136 +++++++++++++++++++++++++---------------------
 1 file changed, 74 insertions(+), 62 deletions(-)

diff --git a/networking/ping.c b/networking/ping.c
index b2ff92b82..1df073d3a 100644
--- a/networking/ping.c
+++ b/networking/ping.c
@@ -217,9 +217,82 @@ enum {
        PINGINTERVAL = 1, /* 1 second */
        pingsock = 0,
 };
+#if !ENABLE_FEATURE_FANCY_PING
+
+/* Globals for simple version */
 
+struct globals {
+       char *hostname;
+       char packet[DEFDATALEN + MAXIPLEN + MAXICMPLEN];
+       uint16_t myid;
 #if ENABLE_FEATURE_PING_NONROOT
-static int using_dgram;
+       int using_dgram;
+#endif
+} FIX_ALIASING;
+#define G (*(struct globals*)bb_common_bufsiz1)
+#define INIT_G() do { setup_common_bufsiz(); } while (0)
+#define using_dgram  (G.using_dgram )
+#else
+
+/* Globals for fancy version */
+
+struct globals {
+       int if_index;
+       char *str_I;
+       len_and_sockaddr *source_lsa;
+       unsigned datalen;
+       unsigned pingcount; /* must be int-sized */
+       unsigned opt_ttl;
+       unsigned long ntransmitted, nreceived, nrepeats;
+       uint16_t myid;
+       uint8_t pattern;
+       unsigned tmin, tmax; /* in us */
+       unsigned long long tsum; /* in us, sum of all times */
+       unsigned cur_us; /* low word only, we don't need more */
+       unsigned deadline_us;
+       unsigned interval_us;
+       unsigned timeout;
+       unsigned sizeof_rcv_packet;
+       char *rcv_packet; /* [datalen + MAXIPLEN + MAXICMPLEN] */
+       void *snd_packet; /* [datalen + ipv4/ipv6_const] */
+       const char *hostname;
+       const char *dotted;
+       union {
+               struct sockaddr sa;
+               struct sockaddr_in sin;
+#if ENABLE_PING6
+               struct sockaddr_in6 sin6;
+#endif
+       } pingaddr;
+       unsigned char rcvd_tbl[MAX_DUP_CHK / 8];
+#if ENABLE_FEATURE_PING_NONROOT
+       int using_dgram;
+#endif
+} FIX_ALIASING;
+#define G (*(struct globals*)bb_common_bufsiz1)
+#define if_index     (G.if_index    )
+#define source_lsa   (G.source_lsa  )
+#define str_I        (G.str_I       )
+#define datalen      (G.datalen     )
+#define pingcount    (G.pingcount   )
+#define opt_ttl      (G.opt_ttl     )
+#define myid         (G.myid        )
+#define tmin         (G.tmin        )
+#define tmax         (G.tmax        )
+#define tsum         (G.tsum        )
+#define timeout      (G.timeout     )
+#define hostname     (G.hostname    )
+#define dotted       (G.dotted      )
+#define pingaddr     (G.pingaddr    )
+#define rcvd_tbl     (G.rcvd_tbl    )
+#define using_dgram  (G.using_dgram )
+#define INIT_G() do { \
+       setup_common_bufsiz(); \
+       BUILD_BUG_ON(sizeof(G) > COMMON_BUFSIZE); \
+       datalen = DEFDATALEN; \
+       timeout = MAXWAIT; \
+       tmin = UINT_MAX; \
+} while (0)
 #endif
 
 static void
@@ -293,14 +366,6 @@ static int get_source_port(int fd) {
 
 /* Simple version */
 
-struct globals {
-       char *hostname;
-       char packet[DEFDATALEN + MAXIPLEN + MAXICMPLEN];
-       uint16_t myid;
-} FIX_ALIASING;
-#define G (*(struct globals*)bb_common_bufsiz1)
-#define INIT_G() do { setup_common_bufsiz(); } while (0)
-
 static void noresp(int ign UNUSED_PARAM)
 {
        printf("No response from %s\n", G.hostname);
@@ -493,59 +558,6 @@ enum {
 };
 
 
-struct globals {
-       int if_index;
-       char *str_I;
-       len_and_sockaddr *source_lsa;
-       unsigned datalen;
-       unsigned pingcount; /* must be int-sized */
-       unsigned opt_ttl;
-       unsigned long ntransmitted, nreceived, nrepeats;
-       uint16_t myid;
-       uint8_t pattern;
-       unsigned tmin, tmax; /* in us */
-       unsigned long long tsum; /* in us, sum of all times */
-       unsigned cur_us; /* low word only, we don't need more */
-       unsigned deadline_us;
-       unsigned interval_us;
-       unsigned timeout;
-       unsigned sizeof_rcv_packet;
-       char *rcv_packet; /* [datalen + MAXIPLEN + MAXICMPLEN] */
-       void *snd_packet; /* [datalen + ipv4/ipv6_const] */
-       const char *hostname;
-       const char *dotted;
-       union {
-               struct sockaddr sa;
-               struct sockaddr_in sin;
-#if ENABLE_PING6
-               struct sockaddr_in6 sin6;
-#endif
-       } pingaddr;
-       unsigned char rcvd_tbl[MAX_DUP_CHK / 8];
-} FIX_ALIASING;
-#define G (*(struct globals*)bb_common_bufsiz1)
-#define if_index     (G.if_index    )
-#define source_lsa   (G.source_lsa  )
-#define str_I        (G.str_I       )
-#define datalen      (G.datalen     )
-#define pingcount    (G.pingcount   )
-#define opt_ttl      (G.opt_ttl     )
-#define myid         (G.myid        )
-#define tmin         (G.tmin        )
-#define tmax         (G.tmax        )
-#define tsum         (G.tsum        )
-#define timeout      (G.timeout     )
-#define hostname     (G.hostname    )
-#define dotted       (G.dotted      )
-#define pingaddr     (G.pingaddr    )
-#define rcvd_tbl     (G.rcvd_tbl    )
-#define INIT_G() do { \
-       setup_common_bufsiz(); \
-       BUILD_BUG_ON(sizeof(G) > COMMON_BUFSIZE); \
-       datalen = DEFDATALEN; \
-       timeout = MAXWAIT; \
-       tmin = UINT_MAX; \
-} while (0)
 
 
 #define BYTE(bit)      rcvd_tbl[(bit)>>3]
-- 
2.47.1

_______________________________________________
busybox mailing list
[email protected]
https://lists.busybox.net/mailman/listinfo/busybox

Reply via email to