diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2020-11-21 17:23:13 +0100 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2020-11-21 17:23:13 +0100 |
commit | 4323ac861ee5bb46051fada403971576356c928c (patch) | |
tree | 8ef8c97044ef852cea348d923599d5136e7565c6 | |
parent | 2c92d1ec5802084e3bab336c5cd5816df88cb44d (diff) | |
download | busybox-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.c | 53 |
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 | ||
14 | static 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"; | ||
18 | enum { | ||
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 | |||
14 | const char* FAST_FUNC rtnl_rtntype_n2a(int id) | 36 | const 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 | ||
46 | int FAST_FUNC rtnl_rtntype_a2n(int *id, char *arg) | 68 | int 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; |