ip rule: unify parsing args
authorBernhard Reutner-Fischer <rep.dot.nop@gmail.com>
Tue, 25 May 2010 15:22:17 +0000 (17:22 +0200)
committerBernhard Reutner-Fischer <rep.dot.nop@gmail.com>
Tue, 25 May 2010 16:48:33 +0000 (18:48 +0200)
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>
networking/libiproute/iprule.c

index 535019d87c67f7769213ade49e631c7885950809..835529ec486c0e38a62b471afe40d1b990c3f1db 100644 (file)
@@ -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);
 }