diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2010-07-24 23:26:58 +0200 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2010-07-24 23:26:58 +0200 |
commit | e0a622093c6c1f3e3a1f58713118395994000fd9 (patch) | |
tree | 3a3518bddb93f7352603c8b47e7dcd9ce755b7d5 /networking/ip.c | |
parent | b78ac5a20ea2f3038f9738cb05bc3bc3725fabba (diff) | |
download | busybox-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.c | 62 |
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 | ||
27 | static int NORETURN ip_print_help(char **argv UNUSED_PARAM) | 25 | static int ip_print_help(char **argv UNUSED_PARAM) |
28 | { | 26 | { |
29 | bb_show_usage(); | 27 | bb_show_usage(); |
30 | } | 28 | } |
31 | 29 | ||
32 | static int ip_do(int (*ip_func)(char **argv), char **argv) | 30 | typedef int (*ip_func_ptr_t)(char**); |
31 | |||
32 | static 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 | ||