summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorBernhard Reutner-Fischer <rep.dot.nop@gmail.com>2010-05-25 17:22:17 +0200
committerBernhard Reutner-Fischer <rep.dot.nop@gmail.com>2010-05-25 18:48:33 +0200
commit1b3549875cf8beb236a17a456fc0cab66bfd1d72 (patch)
tree17d1bf545bec45a686014a22d02dbfe97bda4347
parent96913f9254d288d61d893015f92e9f75b13f5d2a (diff)
ip rule: unify parsing args
function old new delta do_iprule 83 134 +51 print_rule 736 726 -10 iprule_list 73 - -73 ------------------------------------------------------------------------------ (add/remove: 0/1 grow/shrink: 1/1 up/down: 51/-83) Total: -32 bytes Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
-rw-r--r--networking/libiproute/iprule.c36
1 files changed, 11 insertions, 25 deletions
diff --git a/networking/libiproute/iprule.c b/networking/libiproute/iprule.c
index 535019d87..835529ec4 100644
--- a/networking/libiproute/iprule.c
+++ b/networking/libiproute/iprule.c
@@ -69,11 +69,9 @@ static int FAST_FUNC print_rule(const struct sockaddr_nl *who UNUSED_PARAM,
else if (r->rtm_family == AF_IPX)
host_len = 80;
*/
- if (tb[RTA_PRIORITY])
- printf("%u:\t", *(unsigned*)RTA_DATA(tb[RTA_PRIORITY]));
- else
- printf("0:\t");
-
+ printf("%u:\t", tb[RTA_PRIORITY] ?
+ *(unsigned*)RTA_DATA(tb[RTA_PRIORITY])
+ : 0);
printf("from ");
if (tb[RTA_SRC]) {
if (r->rtm_src_len != host_len) {
@@ -310,25 +308,13 @@ int do_iprule(char **argv)
{
static const char ip_rule_commands[] ALIGN1 =
"add\0""delete\0""list\0""show\0";
- int cmd = 2; /* list */
-
- if (!*argv)
- return iprule_list(argv);
-
- cmd = index_in_substrings(ip_rule_commands, *argv);
- switch (cmd) {
- case 0: /* add */
- cmd = RTM_NEWRULE;
- break;
- case 1: /* delete */
- cmd = RTM_DELRULE;
- break;
- case 2: /* list */
- case 3: /* show */
- return iprule_list(argv+1);
- break;
- default:
- bb_error_msg_and_die("unknown command %s", *argv);
+ if (*argv) {
+ smalluint cmd = index_in_substrings(ip_rule_commands, *argv);
+ if (cmd > 3)
+ bb_error_msg_and_die(bb_msg_invalid_arg, *argv, applet_name);
+ argv++;
+ if (cmd < 2)
+ return iprule_modify((cmd == 0) ? RTM_NEWRULE : RTM_DELRULE, argv);
}
- return iprule_modify(cmd, argv+1);
+ return iprule_list(argv);
}