aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2020-12-19 00:03:38 +0100
committerDenys Vlasenko <vda.linux@googlemail.com>2020-12-19 00:07:13 +0100
commitddc6dfdb4d56009d16e1a1d7aef441dbe4315027 (patch)
tree29548646f8ed28b4434c17e2c19d7b91d6a07126
parentb164cdb854e6722ab39aa62dbfad84ea37a29a30 (diff)
downloadbusybox-w32-ddc6dfdb4d56009d16e1a1d7aef441dbe4315027.tar.gz
busybox-w32-ddc6dfdb4d56009d16e1a1d7aef441dbe4315027.tar.bz2
busybox-w32-ddc6dfdb4d56009d16e1a1d7aef441dbe4315027.zip
route: code shrink
function old new delta kw_lookup 84 86 +2 tbl_hash_net_host 15 14 -1 tbl_verb 21 19 -2 tbl_ipvx 104 92 -12 packed_usage 33527 33493 -34 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 1/4 up/down: 2/-49) Total: -47 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r--networking/route.c59
1 files changed, 26 insertions, 33 deletions
diff --git a/networking/route.c b/networking/route.c
index b08ab5c68..ff5daa8a7 100644
--- a/networking/route.c
+++ b/networking/route.c
@@ -75,17 +75,15 @@
75#define RTACTION_ADD 1 75#define RTACTION_ADD 1
76#define RTACTION_DEL 2 76#define RTACTION_DEL 2
77 77
78/* For the various tbl_*[] arrays, the 1st byte is the offset to 78/* For the various tbl_*[] arrays, the 1st byte is return value. */
79 * the next entry and the 2nd byte is return value. */
80 79
81#define NET_FLAG 1 80#define NET_FLAG 1
82#define HOST_FLAG 2 81#define HOST_FLAG 2
83 82
84/* We remap '-' to '#' to avoid problems with getopt. */ 83/* We remap '-' to '#' to avoid problems with getopt. */
85static const char tbl_hash_net_host[] ALIGN1 = 84static const char tbl_hash_net_host[] ALIGN1 =
86 "\007\001#net\0" 85 "\001#net\0"
87/* "\010\002#host\0" */ 86 "\002#host\0"
88 "\007\002#host" /* Since last, we can save a byte. */
89; 87;
90 88
91#define KW_TAKES_ARG 020 89#define KW_TAKES_ARG 020
@@ -108,29 +106,28 @@ static const char tbl_hash_net_host[] ALIGN1 =
108static const char tbl_ipvx[] ALIGN1 = 106static const char tbl_ipvx[] ALIGN1 =
109 /* 020 is the "takes an arg" bit */ 107 /* 020 is the "takes an arg" bit */
110#if HAVE_NEW_ADDRT 108#if HAVE_NEW_ADDRT
111 "\011\020metric\0" 109 "\020metric\0"
112#endif 110#endif
113 "\012\021netmask\0" 111 "\021netmask\0"
114 "\005\022gw\0" 112 "\022gw\0"
115 "\012\022gateway\0" 113 "\022gateway\0"
116 "\006\023mss\0" 114 "\023mss\0"
117 "\011\024window\0" 115 "\024window\0"
118#ifdef RTF_IRTT 116#ifdef RTF_IRTT
119 "\007\025irtt\0" 117 "\025irtt\0"
120#endif 118#endif
121 "\006\026dev\0" 119 "\026dev\0"
122 "\011\026device\0" 120 "\026device\0"
123 /* 040 is the "sets a flag" bit - MUST match flags_ipvx[] values below. */ 121 /* 040 is the "sets a flag" bit - MUST match flags_ipvx[] values below. */
124#ifdef RTF_REJECT 122#ifdef RTF_REJECT
125 "\011\040reject\0" 123 "\040reject\0"
126#endif 124#endif
127 "\006\041mod\0" 125 "\041mod\0"
128 "\006\042dyn\0" 126 "\042dyn\0"
129/* "\014\043reinstate\0" */ 127 "\043reinstate\0"
130 "\013\043reinstate" /* Since last, we can save a byte. */
131; 128;
132 129
133static const uint16_t flags_ipvx[] = { /* MUST match tbl_ipvx[] values above. */ 130static const uint16_t flags_ipvx[] ALIGN2 = { /* MUST match tbl_ipvx[] values above. */
134#ifdef RTF_REJECT 131#ifdef RTF_REJECT
135 RTF_REJECT, 132 RTF_REJECT,
136#endif 133#endif
@@ -143,17 +140,17 @@ static int kw_lookup(const char *kwtbl, char ***pargs)
143{ 140{
144 if (**pargs) { 141 if (**pargs) {
145 do { 142 do {
146 if (strcmp(kwtbl+2, **pargs) == 0) { /* Found a match. */ 143 if (strcmp(kwtbl + 1, **pargs) == 0) { /* Found a match. */
147 *pargs += 1; 144 *pargs += 1;
148 if (kwtbl[1] & KW_TAKES_ARG) { 145 if (kwtbl[0] & KW_TAKES_ARG) {
149 if (!**pargs) { /* No more args! */ 146 if (!**pargs) { /* No more args! */
150 bb_show_usage(); 147 bb_show_usage();
151 } 148 }
152 *pargs += 1; /* Calling routine will use args[-1]. */ 149 *pargs += 1; /* Calling routine will use args[-1]. */
153 } 150 }
154 return kwtbl[1]; 151 return kwtbl[0];
155 } 152 }
156 kwtbl += *kwtbl; 153 kwtbl += strlen(kwtbl) + 1;
157 } while (*kwtbl); 154 } while (*kwtbl);
158 } 155 }
159 return 0; 156 return 0;
@@ -536,7 +533,6 @@ void FAST_FUNC bb_displayroutes(int noresolve, int netstatfmt)
536 flags[0] = '!'; 533 flags[0] = '!';
537 } 534 }
538#endif 535#endif
539
540 memset(&s_addr, 0, sizeof(struct sockaddr_in)); 536 memset(&s_addr, 0, sizeof(struct sockaddr_in));
541 s_addr.sin_family = AF_INET; 537 s_addr.sin_family = AF_INET;
542 s_addr.sin_addr.s_addr = d; 538 s_addr.sin_addr.s_addr = d;
@@ -626,7 +622,6 @@ static void INET6_displayroutes(void)
626 naddr6 = INET6_rresolve((struct sockaddr_in6 *) &snaddr6, 622 naddr6 = INET6_rresolve((struct sockaddr_in6 *) &snaddr6,
627 0x0fff /* Apparently, upstream never resolves. */ 623 0x0fff /* Apparently, upstream never resolves. */
628 ); 624 );
629
630 if (!r) { /* 1st pass */ 625 if (!r) { /* 1st pass */
631 snprintf(addr6, sizeof(addr6), "%s/%d", naddr6, prefix_len); 626 snprintf(addr6, sizeof(addr6), "%s/%d", naddr6, prefix_len);
632 r += 40; 627 r += 40;
@@ -648,7 +643,7 @@ static void INET6_displayroutes(void)
648//usage:#define route_trivial_usage 643//usage:#define route_trivial_usage
649///////: "[-ne]"IF_FEATURE_IPV6(" [-A inet[6]]")" [{add|del|delete} [-net|-host] TARGET [netmask MASK] [gw GATEWAY] [metric N] [mss BYTES] [window BYTES] [irtt MSEC] [reject] [mod] [dyn] [reinstate] [[dev] IFACE]]" 644///////: "[-ne]"IF_FEATURE_IPV6(" [-A inet[6]]")" [{add|del|delete} [-net|-host] TARGET [netmask MASK] [gw GATEWAY] [metric N] [mss BYTES] [window BYTES] [irtt MSEC] [reject] [mod] [dyn] [reinstate] [[dev] IFACE]]"
650///////too wordy 645///////too wordy
651//usage: "[-ne]"IF_FEATURE_IPV6(" [-A inet[6]]")" [{add|del} TARGET [netmask MASK]\n" 646//usage: "[-ne]"IF_FEATURE_IPV6(" [-A inet[6]]")" [{add|del} [-net|-host] TARGET [netmask MASK]\n"
652//usage: " [gw GATEWAY] [metric N] [mss BYTES] [window BYTES] [reject] [IFACE]]" 647//usage: " [gw GATEWAY] [metric N] [mss BYTES] [window BYTES] [reject] [IFACE]]"
653//usage:#define route_full_usage "\n\n" 648//usage:#define route_full_usage "\n\n"
654//usage: "Show or edit kernel routing tables\n" 649//usage: "Show or edit kernel routing tables\n"
@@ -661,13 +656,11 @@ static void INET6_displayroutes(void)
661#define ROUTE_OPT_e 0x04 656#define ROUTE_OPT_e 0x04
662#define ROUTE_OPT_INET6 0x08 /* Not an actual option. See below. */ 657#define ROUTE_OPT_INET6 0x08 /* Not an actual option. See below. */
663 658
664/* 1st byte is offset to next entry offset. 2nd byte is return value. */ 659/* 1st byte is return value, matches RTACTION_* code */
665/* 2nd byte matches RTACTION_* code */
666static const char tbl_verb[] ALIGN1 = 660static const char tbl_verb[] ALIGN1 =
667 "\006\001add\0" 661 "\001add\0"
668 "\006\002del\0" 662 "\002del\0"
669/* "\011\002delete\0" */ 663 "\002delete\0"
670 "\010\002delete" /* Since it's last, we can save a byte. */
671; 664;
672 665
673int route_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; 666int route_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;