libiproute: use stdout directly instead of passing it as a parameter
authorDenis Vlasenko <vda.linux@googlemail.com>
Thu, 5 Jun 2008 05:00:24 +0000 (05:00 -0000)
committerDenis Vlasenko <vda.linux@googlemail.com>
Thu, 5 Jun 2008 05:00:24 +0000 (05:00 -0000)
function                                             old     new   delta
iprule_list                                           86      82      -4
print_rule                                           860     791     -69
ipaddr_list_or_flush                                2484    2384    -100
print_addrinfo                                      1498    1292    -206
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/4 up/down: 0/-379)           Total: -379 bytes

networking/libiproute/ipaddress.c
networking/libiproute/iprule.c

index b3cbe38400a6e58b516e33872535d4852e46b967..4bc87e7b8f542beec52cf95f059a57d10cd3d2e7 100644 (file)
@@ -39,13 +39,13 @@ typedef struct filter_t {
 #define filter (*(filter_t*)&bb_common_bufsiz1)
 
 
-static void print_link_flags(FILE *fp, unsigned flags, unsigned mdown)
+static void print_link_flags(unsigned flags, unsigned mdown)
 {
-       fprintf(fp, "<");
+       printf("<");
        flags &= ~IFF_RUNNING;
 #define _PF(f) if (flags & IFF_##f) { \
                  flags &= ~IFF_##f; \
-                 fprintf(fp, #f "%s", flags ? "," : ""); }
+                 printf(#f "%s", flags ? "," : ""); }
        _PF(LOOPBACK);
        _PF(BROADCAST);
        _PF(POINTOPOINT);
@@ -65,10 +65,10 @@ static void print_link_flags(FILE *fp, unsigned flags, unsigned mdown)
        _PF(UP);
 #undef _PF
        if (flags)
-               fprintf(fp, "%x", flags);
+               printf("%x", flags);
        if (mdown)
-               fprintf(fp, ",M-DOWN");
-       fprintf(fp, "> ");
+               printf(",M-DOWN");
+       printf("> ");
 }
 
 static void print_queuelen(char *name)
@@ -92,10 +92,8 @@ static void print_queuelen(char *name)
                printf("qlen %d", ifr.ifr_qlen);
 }
 
-static int print_linkinfo(struct sockaddr_nl ATTRIBUTE_UNUSED *who,
-               const struct nlmsghdr *n, void ATTRIBUTE_UNUSED *arg)
+static int print_linkinfo(const struct nlmsghdr *n)
 {
-       FILE *fp = (FILE*)arg;
        struct ifinfomsg *ifi = NLMSG_DATA(n);
        struct rtattr * tb[IFLA_MAX+1];
        int len = n->nlmsg_len;
@@ -127,34 +125,34 @@ static int print_linkinfo(struct sockaddr_nl ATTRIBUTE_UNUSED *who,
        }
 
        if (n->nlmsg_type == RTM_DELLINK)
-               fprintf(fp, "Deleted ");
+               printf("Deleted ");
 
-       fprintf(fp, "%d: %s", ifi->ifi_index,
+       printf("%d: %s", ifi->ifi_index,
                tb[IFLA_IFNAME] ? (char*)RTA_DATA(tb[IFLA_IFNAME]) : "<nil>");
 
        if (tb[IFLA_LINK]) {
                SPRINT_BUF(b1);
                int iflink = *(int*)RTA_DATA(tb[IFLA_LINK]);
                if (iflink == 0)
-                       fprintf(fp, "@NONE: ");
+                       printf("@NONE: ");
                else {
-                       fprintf(fp, "@%s: ", ll_idx_n2a(iflink, b1));
+                       printf("@%s: ", ll_idx_n2a(iflink, b1));
                        m_flag = ll_index_to_flags(iflink);
                        m_flag = !(m_flag & IFF_UP);
                }
        } else {
-               fprintf(fp, ": ");
+               printf(": ");
        }
-       print_link_flags(fp, ifi->ifi_flags, m_flag);
+       print_link_flags(ifi->ifi_flags, m_flag);
 
        if (tb[IFLA_MTU])
-               fprintf(fp, "mtu %u ", *(int*)RTA_DATA(tb[IFLA_MTU]));
+               printf("mtu %u ", *(int*)RTA_DATA(tb[IFLA_MTU]));
        if (tb[IFLA_QDISC])
-               fprintf(fp, "qdisc %s ", (char*)RTA_DATA(tb[IFLA_QDISC]));
+               printf("qdisc %s ", (char*)RTA_DATA(tb[IFLA_QDISC]));
 #ifdef IFLA_MASTER
        if (tb[IFLA_MASTER]) {
                SPRINT_BUF(b1);
-               fprintf(fp, "master %s ", ll_idx_n2a(*(int*)RTA_DATA(tb[IFLA_MASTER]), b1));
+               printf("master %s ", ll_idx_n2a(*(int*)RTA_DATA(tb[IFLA_MASTER]), b1));
        }
 #endif
        if (filter.showqueue)
@@ -162,27 +160,27 @@ static int print_linkinfo(struct sockaddr_nl ATTRIBUTE_UNUSED *who,
 
        if (!filter.family || filter.family == AF_PACKET) {
                SPRINT_BUF(b1);
-               fprintf(fp, "%c    link/%s ", _SL_, ll_type_n2a(ifi->ifi_type, b1, sizeof(b1)));
+               printf("%c    link/%s ", _SL_, ll_type_n2a(ifi->ifi_type, b1, sizeof(b1)));
 
                if (tb[IFLA_ADDRESS]) {
                        fputs(ll_addr_n2a(RTA_DATA(tb[IFLA_ADDRESS]),
                                                      RTA_PAYLOAD(tb[IFLA_ADDRESS]),
                                                      ifi->ifi_type,
-                                                     b1, sizeof(b1)), fp);
+                                                     b1, sizeof(b1)), stdout);
                }
                if (tb[IFLA_BROADCAST]) {
                        if (ifi->ifi_flags & IFF_POINTOPOINT)
-                               fprintf(fp, " peer ");
+                               printf(" peer ");
                        else
-                               fprintf(fp, " brd ");
+                               printf(" brd ");
                        fputs(ll_addr_n2a(RTA_DATA(tb[IFLA_BROADCAST]),
                                                      RTA_PAYLOAD(tb[IFLA_BROADCAST]),
                                                      ifi->ifi_type,
-                                                     b1, sizeof(b1)), fp);
+                                                     b1, sizeof(b1)), stdout);
                }
        }
-       fputc('\n', fp);
-       fflush(fp);
+       bb_putchar('\n');
+       /*fflush(stdout);*/
        return 0;
 }
 
@@ -196,10 +194,9 @@ static int flush_update(void)
        return 0;
 }
 
-static int print_addrinfo(struct sockaddr_nl ATTRIBUTE_UNUSED *who,
-               struct nlmsghdr *n, void ATTRIBUTE_UNUSED *arg)
+static int print_addrinfo(struct sockaddr_nl *who ATTRIBUTE_UNUSED,
+               struct nlmsghdr *n, void *arg ATTRIBUTE_UNUSED)
 {
-       FILE *fp = (FILE*)arg;
        struct ifaddrmsg *ifa = NLMSG_DATA(n);
        int len = n->nlmsg_len;
        struct rtattr * rta_tb[IFA_MAX+1];
@@ -268,28 +265,28 @@ static int print_addrinfo(struct sockaddr_nl ATTRIBUTE_UNUSED *who,
        }
 
        if (n->nlmsg_type == RTM_DELADDR)
-               fprintf(fp, "Deleted ");
+               printf("Deleted ");
 
        if (filter.oneline)
-               fprintf(fp, "%u: %s", ifa->ifa_index, ll_index_to_name(ifa->ifa_index));
+               printf("%u: %s", ifa->ifa_index, ll_index_to_name(ifa->ifa_index));
        if (ifa->ifa_family == AF_INET)
-               fprintf(fp, "    inet ");
+               printf("    inet ");
        else if (ifa->ifa_family == AF_INET6)
-               fprintf(fp, "    inet6 ");
+               printf("    inet6 ");
        else
-               fprintf(fp, "    family %d ", ifa->ifa_family);
+               printf("    family %d ", ifa->ifa_family);
 
        if (rta_tb[IFA_LOCAL]) {
                fputs(rt_addr_n2a(ifa->ifa_family,
                                              RTA_PAYLOAD(rta_tb[IFA_LOCAL]),
                                              RTA_DATA(rta_tb[IFA_LOCAL]),
-                                             abuf, sizeof(abuf)), fp);
+                                             abuf, sizeof(abuf)), stdout);
 
                if (rta_tb[IFA_ADDRESS] == NULL ||
                    memcmp(RTA_DATA(rta_tb[IFA_ADDRESS]), RTA_DATA(rta_tb[IFA_LOCAL]), 4) == 0) {
-                       fprintf(fp, "/%d ", ifa->ifa_prefixlen);
+                       printf("/%d ", ifa->ifa_prefixlen);
                } else {
-                       fprintf(fp, " peer %s/%d ",
+                       printf(" peer %s/%d ",
                                rt_addr_n2a(ifa->ifa_family,
                                            RTA_PAYLOAD(rta_tb[IFA_ADDRESS]),
                                            RTA_DATA(rta_tb[IFA_ADDRESS]),
@@ -299,44 +296,44 @@ static int print_addrinfo(struct sockaddr_nl ATTRIBUTE_UNUSED *who,
        }
 
        if (rta_tb[IFA_BROADCAST]) {
-               fprintf(fp, "brd %s ",
+               printf("brd %s ",
                        rt_addr_n2a(ifa->ifa_family,
                                    RTA_PAYLOAD(rta_tb[IFA_BROADCAST]),
                                    RTA_DATA(rta_tb[IFA_BROADCAST]),
                                    abuf, sizeof(abuf)));
        }
        if (rta_tb[IFA_ANYCAST]) {
-               fprintf(fp, "any %s ",
+               printf("any %s ",
                        rt_addr_n2a(ifa->ifa_family,
                                    RTA_PAYLOAD(rta_tb[IFA_ANYCAST]),
                                    RTA_DATA(rta_tb[IFA_ANYCAST]),
                                    abuf, sizeof(abuf)));
        }
-       fprintf(fp, "scope %s ", rtnl_rtscope_n2a(ifa->ifa_scope, b1, sizeof(b1)));
+       printf("scope %s ", rtnl_rtscope_n2a(ifa->ifa_scope, b1, sizeof(b1)));
        if (ifa->ifa_flags & IFA_F_SECONDARY) {
                ifa->ifa_flags &= ~IFA_F_SECONDARY;
-               fprintf(fp, "secondary ");
+               printf("secondary ");
        }
        if (ifa->ifa_flags & IFA_F_TENTATIVE) {
                ifa->ifa_flags &= ~IFA_F_TENTATIVE;
-               fprintf(fp, "tentative ");
+               printf("tentative ");
        }
        if (ifa->ifa_flags & IFA_F_DEPRECATED) {
                ifa->ifa_flags &= ~IFA_F_DEPRECATED;
-               fprintf(fp, "deprecated ");
+               printf("deprecated ");
        }
        if (!(ifa->ifa_flags & IFA_F_PERMANENT)) {
-               fprintf(fp, "dynamic ");
+               printf("dynamic ");
        } else
                ifa->ifa_flags &= ~IFA_F_PERMANENT;
        if (ifa->ifa_flags)
-               fprintf(fp, "flags %02x ", ifa->ifa_flags);
+               printf("flags %02x ", ifa->ifa_flags);
        if (rta_tb[IFA_LABEL])
-               fputs((char*)RTA_DATA(rta_tb[IFA_LABEL]), fp);
+               fputs((char*)RTA_DATA(rta_tb[IFA_LABEL]), stdout);
        if (rta_tb[IFA_CACHEINFO]) {
                struct ifa_cacheinfo *ci = RTA_DATA(rta_tb[IFA_CACHEINFO]);
                char buf[128];
-               fputc(_SL_, fp);
+               bb_putchar(_SL_);
                if (ci->ifa_valid == 0xFFFFFFFFU)
                        sprintf(buf, "valid_lft forever");
                else
@@ -345,10 +342,10 @@ static int print_addrinfo(struct sockaddr_nl ATTRIBUTE_UNUSED *who,
                        sprintf(buf+strlen(buf), " preferred_lft forever");
                else
                        sprintf(buf+strlen(buf), " preferred_lft %dsec", ci->ifa_prefered);
-               fprintf(fp, "       %s", buf);
+               printf("       %s", buf);
        }
-       fputc('\n', fp);
-       fflush(fp);
+       bb_putchar('\n');
+       /*fflush(stdout);*/
        return 0;
 }
 
@@ -359,7 +356,7 @@ struct nlmsg_list
        struct nlmsghdr   h;
 };
 
-static int print_selected_addrinfo(int ifindex, struct nlmsg_list *ainfo, FILE *fp)
+static int print_selected_addrinfo(int ifindex, struct nlmsg_list *ainfo)
 {
        for (; ainfo; ainfo = ainfo->next) {
                struct nlmsghdr *n = &ainfo->h;
@@ -375,7 +372,7 @@ static int print_selected_addrinfo(int ifindex, struct nlmsg_list *ainfo, FILE *
                    (filter.family && filter.family != ifa->ifa_family))
                        continue;
 
-               print_addrinfo(NULL, n, fp);
+               print_addrinfo(NULL, n, NULL);
        }
        return 0;
 }
@@ -498,7 +495,7 @@ int ipaddr_list_or_flush(char **argv, int flush)
                for (;;) {
                        xrtnl_wilddump_request(&rth, filter.family, RTM_GETADDR);
                        filter.flushed = 0;
-                       xrtnl_dump_filter(&rth, print_addrinfo, stdout);
+                       xrtnl_dump_filter(&rth, print_addrinfo, NULL);
                        if (filter.flushed == 0) {
                                return 0;
                        }
@@ -574,10 +571,10 @@ int ipaddr_list_or_flush(char **argv, int flush)
        }
 
        for (l = linfo; l; l = l->next) {
-               if (no_link || print_linkinfo(NULL, &l->h, stdout) == 0) {
+               if (no_link || print_linkinfo(&l->h) == 0) {
                        struct ifinfomsg *ifi = NLMSG_DATA(&l->h);
                        if (filter.family != AF_PACKET)
-                               print_selected_addrinfo(ifi->ifi_index, ainfo, stdout);
+                               print_selected_addrinfo(ifi->ifi_index, ainfo);
                }
        }
 
index 3f9007ee953dc7e7307894ac764f5509eb2bac19..f62429a7ca410e38a49ad70f754f829b2de8693d 100644 (file)
@@ -41,9 +41,8 @@ static void usage(void)
 */
 
 static int print_rule(struct sockaddr_nl *who ATTRIBUTE_UNUSED,
-                                       struct nlmsghdr *n, void *arg)
+                                       struct nlmsghdr *n, void *arg ATTRIBUTE_UNUSED)
 {
-       FILE *fp = (FILE*)arg;
        struct rtmsg *r = NLMSG_DATA(n);
        int len = n->nlmsg_len;
        int host_len = -1;
@@ -71,14 +70,14 @@ static int print_rule(struct sockaddr_nl *who ATTRIBUTE_UNUSED,
                host_len = 80;
 */
        if (tb[RTA_PRIORITY])
-               fprintf(fp, "%u:\t", *(unsigned*)RTA_DATA(tb[RTA_PRIORITY]));
+               printf("%u:\t", *(unsigned*)RTA_DATA(tb[RTA_PRIORITY]));
        else
-               fprintf(fp, "0:\t");
+               printf("0:\t");
 
-       fprintf(fp, "from ");
+       printf("from ");
        if (tb[RTA_SRC]) {
                if (r->rtm_src_len != host_len) {
-                       fprintf(fp, "%s/%u", rt_addr_n2a(r->rtm_family,
+                       printf("%s/%u", rt_addr_n2a(r->rtm_family,
                                                         RTA_PAYLOAD(tb[RTA_SRC]),
                                                         RTA_DATA(tb[RTA_SRC]),
                                                         abuf, sizeof(abuf)),
@@ -88,73 +87,73 @@ static int print_rule(struct sockaddr_nl *who ATTRIBUTE_UNUSED,
                        fputs(format_host(r->rtm_family,
                                                       RTA_PAYLOAD(tb[RTA_SRC]),
                                                       RTA_DATA(tb[RTA_SRC]),
-                                                      abuf, sizeof(abuf)), fp);
+                                                      abuf, sizeof(abuf)), stdout);
                }
        } else if (r->rtm_src_len) {
-               fprintf(fp, "0/%d", r->rtm_src_len);
+               printf("0/%d", r->rtm_src_len);
        } else {
-               fprintf(fp, "all");
+               printf("all");
        }
-       fprintf(fp, " ");
+       bb_putchar(' ');
 
        if (tb[RTA_DST]) {
                if (r->rtm_dst_len != host_len) {
-                       fprintf(fp, "to %s/%u ", rt_addr_n2a(r->rtm_family,
+                       printf("to %s/%u ", rt_addr_n2a(r->rtm_family,
                                                         RTA_PAYLOAD(tb[RTA_DST]),
                                                         RTA_DATA(tb[RTA_DST]),
                                                         abuf, sizeof(abuf)),
                                r->rtm_dst_len
                                );
                } else {
-                       fprintf(fp, "to %s ", format_host(r->rtm_family,
+                       printf("to %s ", format_host(r->rtm_family,
                                                       RTA_PAYLOAD(tb[RTA_DST]),
                                                       RTA_DATA(tb[RTA_DST]),
                                                       abuf, sizeof(abuf)));
                }
        } else if (r->rtm_dst_len) {
-               fprintf(fp, "to 0/%d ", r->rtm_dst_len);
+               printf("to 0/%d ", r->rtm_dst_len);
        }
 
        if (r->rtm_tos) {
-               fprintf(fp, "tos %s ", rtnl_dsfield_n2a(r->rtm_tos, b1, sizeof(b1)));
+               printf("tos %s ", rtnl_dsfield_n2a(r->rtm_tos, b1, sizeof(b1)));
        }
        if (tb[RTA_PROTOINFO]) {
-               fprintf(fp, "fwmark %#x ", *(uint32_t*)RTA_DATA(tb[RTA_PROTOINFO]));
+               printf("fwmark %#x ", *(uint32_t*)RTA_DATA(tb[RTA_PROTOINFO]));
        }
 
        if (tb[RTA_IIF]) {
-               fprintf(fp, "iif %s ", (char*)RTA_DATA(tb[RTA_IIF]));
+               printf("iif %s ", (char*)RTA_DATA(tb[RTA_IIF]));
        }
 
        if (r->rtm_table)
-               fprintf(fp, "lookup %s ", rtnl_rttable_n2a(r->rtm_table, b1, sizeof(b1)));
+               printf("lookup %s ", rtnl_rttable_n2a(r->rtm_table, b1, sizeof(b1)));
 
        if (tb[RTA_FLOW]) {
                uint32_t to = *(uint32_t*)RTA_DATA(tb[RTA_FLOW]);
                uint32_t from = to>>16;
                to &= 0xFFFF;
                if (from) {
-                       fprintf(fp, "realms %s/",
+                       printf("realms %s/",
                                rtnl_rtrealm_n2a(from, b1, sizeof(b1)));
                }
-               fprintf(fp, "%s ",
+               printf("%s ",
                        rtnl_rtrealm_n2a(to, b1, sizeof(b1)));
        }
 
        if (r->rtm_type == RTN_NAT) {
                if (tb[RTA_GATEWAY]) {
-                       fprintf(fp, "map-to %s ",
+                       printf("map-to %s ",
                                format_host(r->rtm_family,
                                            RTA_PAYLOAD(tb[RTA_GATEWAY]),
                                            RTA_DATA(tb[RTA_GATEWAY]),
                                            abuf, sizeof(abuf)));
                } else
-                       fprintf(fp, "masquerade");
+                       printf("masquerade");
        } else if (r->rtm_type != RTN_UNICAST)
-               fputs(rtnl_rtntype_n2a(r->rtm_type, b1, sizeof(b1)), fp);
+               fputs(rtnl_rtntype_n2a(r->rtm_type, b1, sizeof(b1)), stdout);
 
-       fputc('\n', fp);
-       fflush(fp);
+       bb_putchar('\n');
+       /*fflush(stdout);*/
        return 0;
 }
 
@@ -176,7 +175,7 @@ static int iprule_list(char **argv)
        xrtnl_open(&rth);
 
        xrtnl_wilddump_request(&rth, af, RTM_GETRULE);
-       xrtnl_dump_filter(&rth, print_rule, stdout);
+       xrtnl_dump_filter(&rth, print_rule, NULL);
 
        return 0;
 }