aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2020-11-21 17:23:13 +0100
committerDenys Vlasenko <vda.linux@googlemail.com>2020-11-21 17:23:13 +0100
commit4323ac861ee5bb46051fada403971576356c928c (patch)
tree8ef8c97044ef852cea348d923599d5136e7565c6
parent2c92d1ec5802084e3bab336c5cd5816df88cb44d (diff)
downloadbusybox-w32-4323ac861ee5bb46051fada403971576356c928c.tar.gz
busybox-w32-4323ac861ee5bb46051fada403971576356c928c.tar.bz2
busybox-w32-4323ac861ee5bb46051fada403971576356c928c.zip
libiproute: reuse string constants
text data bss dec hex filename 1020826 559 5052 1026437 fa985 busybox_old 1020815 559 5052 1026426 fa97a busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r--networking/libiproute/rtm_map.c53
1 files changed, 33 insertions, 20 deletions
diff --git a/networking/libiproute/rtm_map.c b/networking/libiproute/rtm_map.c
index e94c99ab6..8b94c2f24 100644
--- a/networking/libiproute/rtm_map.c
+++ b/networking/libiproute/rtm_map.c
@@ -11,33 +11,55 @@
11#include "rt_names.h" 11#include "rt_names.h"
12#include "utils.h" 12#include "utils.h"
13 13
14static const char keywords[] ALIGN1 =
15 "local\0""nat\0""broadcast\0""brd\0""anycast\0"
16 "multicast\0""prohibit\0""unreachable\0""blackhole\0"
17 "xresolve\0""unicast\0""throw\0";
18enum {
19 ARG_local = 1, ARG_nat, ARG_broadcast, ARG_brd, ARG_anycast,
20 ARG_multicast, ARG_prohibit, ARG_unreachable, ARG_blackhole,
21 ARG_xresolve, ARG_unicast, ARG_throw
22};
23#define str_local keywords
24#define str_nat (str_local + sizeof("local"))
25#define str_broadcast (str_nat + sizeof("nat"))
26#define str_brd (str_broadcast + sizeof("broadcast"))
27#define str_anycast (str_brd + sizeof("brd"))
28#define str_multicast (str_anycast + sizeof("anycast"))
29#define str_prohibit (str_multicast + sizeof("multicast"))
30#define str_unreachable (str_prohibit + sizeof("prohibit"))
31#define str_blackhole (str_unreachable + sizeof("unreachable"))
32#define str_xresolve (str_blackhole + sizeof("blackhole"))
33#define str_unicast (str_xresolve + sizeof("xresolve"))
34#define str_throw (str_unicast + sizeof("unicast"))
35
14const char* FAST_FUNC rtnl_rtntype_n2a(int id) 36const char* FAST_FUNC rtnl_rtntype_n2a(int id)
15{ 37{
16 switch (id) { 38 switch (id) {
17 case RTN_UNSPEC: 39 case RTN_UNSPEC:
18 return "none"; 40 return "none";
19 case RTN_UNICAST: 41 case RTN_UNICAST:
20 return "unicast"; 42 return str_unicast;
21 case RTN_LOCAL: 43 case RTN_LOCAL:
22 return "local"; 44 return str_local;
23 case RTN_BROADCAST: 45 case RTN_BROADCAST:
24 return "broadcast"; 46 return str_broadcast;
25 case RTN_ANYCAST: 47 case RTN_ANYCAST:
26 return "anycast"; 48 return str_anycast;
27 case RTN_MULTICAST: 49 case RTN_MULTICAST:
28 return "multicast"; 50 return str_multicast;
29 case RTN_BLACKHOLE: 51 case RTN_BLACKHOLE:
30 return "blackhole"; 52 return str_blackhole;
31 case RTN_UNREACHABLE: 53 case RTN_UNREACHABLE:
32 return "unreachable"; 54 return str_unreachable;
33 case RTN_PROHIBIT: 55 case RTN_PROHIBIT:
34 return "prohibit"; 56 return str_prohibit;
35 case RTN_THROW: 57 case RTN_THROW:
36 return "throw"; 58 return str_throw;
37 case RTN_NAT: 59 case RTN_NAT:
38 return "nat"; 60 return str_nat;
39 case RTN_XRESOLVE: 61 case RTN_XRESOLVE:
40 return "xresolve"; 62 return str_xresolve;
41 default: 63 default:
42 return itoa(id); 64 return itoa(id);
43 } 65 }
@@ -45,15 +67,6 @@ const char* FAST_FUNC rtnl_rtntype_n2a(int id)
45 67
46int FAST_FUNC rtnl_rtntype_a2n(int *id, char *arg) 68int FAST_FUNC rtnl_rtntype_a2n(int *id, char *arg)
47{ 69{
48 static const char keywords[] ALIGN1 =
49 "local\0""nat\0""broadcast\0""brd\0""anycast\0"
50 "multicast\0""prohibit\0""unreachable\0""blackhole\0"
51 "xresolve\0""unicast\0""throw\0";
52 enum {
53 ARG_local = 1, ARG_nat, ARG_broadcast, ARG_brd, ARG_anycast,
54 ARG_multicast, ARG_prohibit, ARG_unreachable, ARG_blackhole,
55 ARG_xresolve, ARG_unicast, ARG_throw
56 };
57 const smalluint key = index_in_substrings(keywords, arg) + 1; 70 const smalluint key = index_in_substrings(keywords, arg) + 1;
58 char *end; 71 char *end;
59 unsigned long res; 72 unsigned long res;