aboutsummaryrefslogtreecommitdiff
path: root/networking/ip.c
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2010-07-24 23:26:58 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2010-07-24 23:26:58 +0200
commite0a622093c6c1f3e3a1f58713118395994000fd9 (patch)
tree3a3518bddb93f7352603c8b47e7dcd9ce755b7d5 /networking/ip.c
parentb78ac5a20ea2f3038f9738cb05bc3bc3725fabba (diff)
downloadbusybox-w32-e0a622093c6c1f3e3a1f58713118395994000fd9.tar.gz
busybox-w32-e0a622093c6c1f3e3a1f58713118395994000fd9.tar.bz2
busybox-w32-e0a622093c6c1f3e3a1f58713118395994000fd9.zip
ip: fix "ip r" breakage
function old new delta static.ip_func_ptrs - 32 +32 ip_main 110 53 -57 ------------------------------------------------------------------------------ (add/remove: 1/0 grow/shrink: 0/1 up/down: 32/-57) Total: -25 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'networking/ip.c')
-rw-r--r--networking/ip.c62
1 files changed, 23 insertions, 39 deletions
diff --git a/networking/ip.c b/networking/ip.c
index 7a0f308f0..3a99fa320 100644
--- a/networking/ip.c
+++ b/networking/ip.c
@@ -1,14 +1,12 @@
1/* vi: set sw=4 ts=4: */ 1/* vi: set sw=4 ts=4: */
2/* 2/*
3 * ip.c "ip" utility frontend. 3 * "ip" utility frontend.
4 * 4 *
5 * Licensed under the GPL v2 or later, see the file LICENSE in this tarball. 5 * Licensed under the GPL v2 or later, see the file LICENSE in this tarball.
6 * 6 *
7 * Authors: Alexey Kuznetsov, <kuznet@ms2.inr.ac.ru> 7 * Authors: Alexey Kuznetsov, <kuznet@ms2.inr.ac.ru>
8 *
9 * 8 *
10 * Changes: 9 * Changes:
11 *
12 * Rani Assaf <rani@magic.metawire.com> 980929: resolve addresses 10 * Rani Assaf <rani@magic.metawire.com> 980929: resolve addresses
13 * Bernhard Reutner-Fischer rewrote to use index_in_substr_array 11 * Bernhard Reutner-Fischer rewrote to use index_in_substr_array
14 */ 12 */
@@ -24,12 +22,14 @@
24 || ENABLE_FEATURE_IP_TUNNEL \ 22 || ENABLE_FEATURE_IP_TUNNEL \
25 || ENABLE_FEATURE_IP_RULE 23 || ENABLE_FEATURE_IP_RULE
26 24
27static int NORETURN ip_print_help(char **argv UNUSED_PARAM) 25static int ip_print_help(char **argv UNUSED_PARAM)
28{ 26{
29 bb_show_usage(); 27 bb_show_usage();
30} 28}
31 29
32static int ip_do(int (*ip_func)(char **argv), char **argv) 30typedef int (*ip_func_ptr_t)(char**);
31
32static int ip_do(ip_func_ptr_t ip_func, char **argv)
33{ 33{
34 argv = ip_parse_common_args(argv + 1); 34 argv = ip_parse_common_args(argv + 1);
35 return ip_func(argv); 35 return ip_func(argv);
@@ -78,45 +78,29 @@ int ip_main(int argc UNUSED_PARAM, char **argv)
78 static const char keywords[] ALIGN1 = 78 static const char keywords[] ALIGN1 =
79 IF_FEATURE_IP_ADDRESS("address\0") 79 IF_FEATURE_IP_ADDRESS("address\0")
80 IF_FEATURE_IP_ROUTE("route\0") 80 IF_FEATURE_IP_ROUTE("route\0")
81 IF_FEATURE_IP_ROUTE("r\0")
81 IF_FEATURE_IP_LINK("link\0") 82 IF_FEATURE_IP_LINK("link\0")
82 IF_FEATURE_IP_TUNNEL("tunnel\0" "tunl\0") 83 IF_FEATURE_IP_TUNNEL("tunnel\0")
84 IF_FEATURE_IP_TUNNEL("tunl\0")
83 IF_FEATURE_IP_RULE("rule\0") 85 IF_FEATURE_IP_RULE("rule\0")
84 ; 86 ;
85 enum { 87 static const ip_func_ptr_t ip_func_ptrs[] = {
86 IF_FEATURE_IP_ADDRESS(IP_addr,) 88 ip_print_help,
87 IF_FEATURE_IP_ROUTE(IP_route,) 89 IF_FEATURE_IP_ADDRESS(do_ipaddr,)
88 IF_FEATURE_IP_LINK(IP_link,) 90 IF_FEATURE_IP_ROUTE(do_iproute,)
89 IF_FEATURE_IP_TUNNEL(IP_tunnel, IP_tunl,) 91 IF_FEATURE_IP_ROUTE(do_iproute,)
90 IF_FEATURE_IP_RULE(IP_rule,) 92 IF_FEATURE_IP_LINK(do_iplink,)
91 IP_none 93 IF_FEATURE_IP_TUNNEL(do_iptunnel,)
94 IF_FEATURE_IP_TUNNEL(do_iptunnel,)
95 IF_FEATURE_IP_RULE(do_iprule,)
92 }; 96 };
93 int (*ip_func)(char**) = ip_print_help; 97 ip_func_ptr_t ip_func;
98 int key;
94 99
95 argv = ip_parse_common_args(argv + 1); 100 argv = ip_parse_common_args(argv + 1);
96 if (*argv) { 101 key = *argv ? index_in_substrings(keywords, *argv++) : -1;
97 int key = index_in_substrings(keywords, *argv); 102 ip_func = ip_func_ptrs[key + 1];
98 argv++; 103
99#if ENABLE_FEATURE_IP_ADDRESS
100 if (key == IP_addr)
101 ip_func = do_ipaddr;
102#endif
103#if ENABLE_FEATURE_IP_ROUTE
104 if (key == IP_route)
105 ip_func = do_iproute;
106#endif
107#if ENABLE_FEATURE_IP_LINK
108 if (key == IP_link)
109 ip_func = do_iplink;
110#endif
111#if ENABLE_FEATURE_IP_TUNNEL
112 if (key == IP_tunnel || key == IP_tunl)
113 ip_func = do_iptunnel;
114#endif
115#if ENABLE_FEATURE_IP_RULE
116 if (key == IP_rule)
117 ip_func = do_iprule;
118#endif
119 }
120 return ip_func(argv); 104 return ip_func(argv);
121} 105}
122 106