summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko2020-11-21 17:23:13 +0100
committerDenys Vlasenko2020-11-21 17:23:13 +0100
commit4323ac861ee5bb46051fada403971576356c928c (patch)
tree8ef8c97044ef852cea348d923599d5136e7565c6
parent2c92d1ec5802084e3bab336c5cd5816df88cb44d (diff)
downloadbusybox-4323ac861ee5bb46051fada403971576356c928c.zip
busybox-4323ac861ee5bb46051fada403971576356c928c.tar.gz
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 e94c99a..8b94c2f 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;