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 /networking/libiproute | |
parent | 2c92d1ec5802084e3bab336c5cd5816df88cb44d (diff) |
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>
Diffstat (limited to 'networking/libiproute')
-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 @@ #include "rt_names.h" #include "utils.h" +static const char keywords[] ALIGN1 = + "local\0""nat\0""broadcast\0""brd\0""anycast\0" + "multicast\0""prohibit\0""unreachable\0""blackhole\0" + "xresolve\0""unicast\0""throw\0"; +enum { + ARG_local = 1, ARG_nat, ARG_broadcast, ARG_brd, ARG_anycast, + ARG_multicast, ARG_prohibit, ARG_unreachable, ARG_blackhole, + ARG_xresolve, ARG_unicast, ARG_throw +}; +#define str_local keywords +#define str_nat (str_local + sizeof("local")) +#define str_broadcast (str_nat + sizeof("nat")) +#define str_brd (str_broadcast + sizeof("broadcast")) +#define str_anycast (str_brd + sizeof("brd")) +#define str_multicast (str_anycast + sizeof("anycast")) +#define str_prohibit (str_multicast + sizeof("multicast")) +#define str_unreachable (str_prohibit + sizeof("prohibit")) +#define str_blackhole (str_unreachable + sizeof("unreachable")) +#define str_xresolve (str_blackhole + sizeof("blackhole")) +#define str_unicast (str_xresolve + sizeof("xresolve")) +#define str_throw (str_unicast + sizeof("unicast")) + const char* FAST_FUNC rtnl_rtntype_n2a(int id) { switch (id) { case RTN_UNSPEC: return "none"; case RTN_UNICAST: - return "unicast"; + return str_unicast; case RTN_LOCAL: - return "local"; + return str_local; case RTN_BROADCAST: - return "broadcast"; + return str_broadcast; case RTN_ANYCAST: - return "anycast"; + return str_anycast; case RTN_MULTICAST: - return "multicast"; + return str_multicast; case RTN_BLACKHOLE: - return "blackhole"; + return str_blackhole; case RTN_UNREACHABLE: - return "unreachable"; + return str_unreachable; case RTN_PROHIBIT: - return "prohibit"; + return str_prohibit; case RTN_THROW: - return "throw"; + return str_throw; case RTN_NAT: - return "nat"; + return str_nat; case RTN_XRESOLVE: - return "xresolve"; + return str_xresolve; default: return itoa(id); } @@ -45,15 +67,6 @@ const char* FAST_FUNC rtnl_rtntype_n2a(int id) int FAST_FUNC rtnl_rtntype_a2n(int *id, char *arg) { - static const char keywords[] ALIGN1 = - "local\0""nat\0""broadcast\0""brd\0""anycast\0" - "multicast\0""prohibit\0""unreachable\0""blackhole\0" - "xresolve\0""unicast\0""throw\0"; - enum { - ARG_local = 1, ARG_nat, ARG_broadcast, ARG_brd, ARG_anycast, - ARG_multicast, ARG_prohibit, ARG_unreachable, ARG_blackhole, - ARG_xresolve, ARG_unicast, ARG_throw - }; const smalluint key = index_in_substrings(keywords, arg) + 1; char *end; unsigned long res; |