telnet: use poll, it's shorter
[oweals/busybox.git] / networking / interface.c
index 204febf7d5a54fc3e8c8f4b3dec704acf29bc422..04d12b37e4e6695afeb2eebd9ede04dd0e0fe347 100644 (file)
@@ -248,7 +248,7 @@ static const struct aftype unspec_aftype = {
        .name   = "unspec",
        .title  = "UNSPEC",
        .af     = AF_UNSPEC,
-       .alen    = 0,
+       .alen   = 0,
        .print  = UNSPEC_print,
        .sprint = UNSPEC_sprint,
 };
@@ -405,24 +405,25 @@ static char *get_name(char *name, char *p)
        /* Extract <name> from nul-terminated p where p matches
           <name>: after leading whitespace.
           If match is not made, set name empty and return unchanged p */
-       int namestart=0, nameend=0;
+       int namestart = 0, nameend = 0;
+
        while (isspace(p[namestart]))
                namestart++;
-       nameend=namestart;
-       while (p[nameend] && p[nameend]!=':' && !isspace(p[nameend]))
+       nameend = namestart;
+       while (p[nameend] && p[nameend] != ':' && !isspace(p[nameend]))
                nameend++;
-       if (p[nameend]==':') {
-               if ((nameend-namestart)<IFNAMSIZ) {
-                       memcpy(name,&p[namestart],nameend-namestart);
-                       name[nameend-namestart]='\0';
-                       p=&p[nameend];
+       if (p[nameend] == ':') {
+               if ((nameend - namestart) < IFNAMSIZ) {
+                       memcpy(name, &p[namestart], nameend - namestart);
+                       name[nameend - namestart] = '\0';
+                       p = &p[nameend];
                } else {
                        /* Interface name too large */
-                       name[0]='\0';
+                       name[0] = '\0';
                }
        } else {
                /* trailing ':' not found - return empty */
-               name[0]='\0';
+               name[0] = '\0';
        }
        return p + 1;
 }
@@ -521,8 +522,7 @@ static int if_readconf(void)
                ifc.ifc_len = sizeof(struct ifreq) * numreqs;
                ifc.ifc_buf = xrealloc(ifc.ifc_buf, ifc.ifc_len);
 
-               if (ioctl(skfd, SIOCGIFCONF, &ifc) < 0) {
-                       bb_perror_msg("SIOCGIFCONF");
+               if (ioctl_or_warn(skfd, SIOCGIFCONF, &ifc) < 0) {
                        goto out;
                }
                if (ifc.ifc_len == sizeof(struct ifreq) * numreqs) {
@@ -804,7 +804,7 @@ static const struct hwtype sit_hwtype = {
        .type =                 ARPHRD_SIT,
        .print =                UNSPEC_print,
        .suppress_null_addr =   1
-} ;
+};
 #endif
 
 static const struct hwtype *const hwtypes[] = {
@@ -872,7 +872,7 @@ static int hw_null_address(const struct hwtype *hw, void *ap)
        return 1;
 }
 
-static const char TRext[] = "\0\0\0Ki\0Mi\0Gi\0Ti";
+static const char TRext[] ALIGN1 = "\0\0\0Ki\0Mi\0Gi\0Ti";
 
 static void print_bytes_scaled(unsigned long long ull, const char *end)
 {
@@ -897,45 +897,6 @@ static void print_bytes_scaled(unsigned long long ull, const char *end)
        printf("X bytes:%llu (%llu.%u %sB)%s", ull, int_part, frac_part, ext, end);
 }
 
-static const char *const ife_print_flags_strs[] = {
-       "UP ",
-       "BROADCAST ",
-       "DEBUG ",
-       "LOOPBACK ",
-       "POINTOPOINT ",
-       "NOTRAILERS ",
-       "RUNNING ",
-       "NOARP ",
-       "PROMISC ",
-       "ALLMULTI ",
-       "SLAVE ",
-       "MASTER ",
-       "MULTICAST ",
-#ifdef HAVE_DYNAMIC
-       "DYNAMIC "
-#endif
-};
-
-static const unsigned short ife_print_flags_mask[] = {
-       IFF_UP,
-       IFF_BROADCAST,
-       IFF_DEBUG,
-       IFF_LOOPBACK,
-       IFF_POINTOPOINT,
-       IFF_NOTRAILERS,
-       IFF_RUNNING,
-       IFF_NOARP,
-       IFF_PROMISC,
-       IFF_ALLMULTI,
-       IFF_SLAVE,
-       IFF_MASTER,
-       IFF_MULTICAST,
-#ifdef HAVE_DYNAMIC
-       IFF_DYNAMIC
-#endif
-       0
-};
-
 static void ife_print(struct interface *ptr)
 {
        const struct aftype *ap;
@@ -977,7 +938,7 @@ static void ife_print(struct interface *ptr)
                        printf("(auto)");
        }
 #endif
-       puts("");
+       bb_putchar('\n');
 
        if (ptr->has_ip) {
                printf("          %s addr:%s ", ap->name,
@@ -1013,7 +974,7 @@ static void ife_print(struct interface *ptr)
        f = fopen(_PATH_PROCNET_IFINET6, "r");
        if (f != NULL) {
                while (fscanf
-                          (f, "%4s%4s%4s%4s%4s%4s%4s%4s %02x %02x %02x %02x %20s\n",
+                          (f, "%4s%4s%4s%4s%4s%4s%4s%4s %08x %02x %02x %02x %20s\n",
                                addr6p[0], addr6p[1], addr6p[2], addr6p[3], addr6p[4],
                                addr6p[5], addr6p[6], addr6p[7], &if_idx, &plen, &scope,
                                &dad_status, devname) != EOF
@@ -1060,12 +1021,51 @@ static void ife_print(struct interface *ptr)
        if (ptr->flags == 0) {
                printf("[NO FLAGS] ");
        } else {
-               int i = 0;
+               static const char ife_print_flags_strs[] ALIGN1 =
+                       "UP\0"
+                       "BROADCAST\0"
+                       "DEBUG\0"
+                       "LOOPBACK\0"
+                       "POINTOPOINT\0"
+                       "NOTRAILERS\0"
+                       "RUNNING\0"
+                       "NOARP\0"
+                       "PROMISC\0"
+                       "ALLMULTI\0"
+                       "SLAVE\0"
+                       "MASTER\0"
+                       "MULTICAST\0"
+#ifdef HAVE_DYNAMIC
+                       "DYNAMIC\0"
+#endif
+                       ;
+               static const unsigned short ife_print_flags_mask[] ALIGN2 = {
+                       IFF_UP,
+                       IFF_BROADCAST,
+                       IFF_DEBUG,
+                       IFF_LOOPBACK,
+                       IFF_POINTOPOINT,
+                       IFF_NOTRAILERS,
+                       IFF_RUNNING,
+                       IFF_NOARP,
+                       IFF_PROMISC,
+                       IFF_ALLMULTI,
+                       IFF_SLAVE,
+                       IFF_MASTER,
+                       IFF_MULTICAST
+#ifdef HAVE_DYNAMIC
+                       ,IFF_DYNAMIC
+#endif
+               };
+               const unsigned short *mask = ife_print_flags_mask;
+               const char *str = ife_print_flags_strs;
                do {
-                       if (ptr->flags & ife_print_flags_mask[i]) {
-                               printf(ife_print_flags_strs[i]);
+                       if (ptr->flags & *mask) {
+                               printf("%s ", str);
                        }
-               } while (ife_print_flags_mask[++i]);
+                       mask++;
+                       str += strlen(str) + 1;
+               } while (*str);
        }
 
        /* DONT FORGET TO ADD THE FLAGS IN ife_print_short */
@@ -1074,7 +1074,7 @@ static void ife_print(struct interface *ptr)
        if (ptr->outfill || ptr->keepalive)
                printf("  Outfill:%d  Keepalive:%d", ptr->outfill, ptr->keepalive);
 #endif
-       puts("");
+       bb_putchar('\n');
 
        /* If needed, display the interface statistics. */
 
@@ -1123,9 +1123,9 @@ static void ife_print(struct interface *ptr)
                }
                if (ptr->map.dma)
                        printf("DMA chan:%x ", ptr->map.dma);
-               puts("");
+               bb_putchar('\n');
        }
-       puts("");
+       bb_putchar('\n');
 }