--- tcpdump-3.4/print-ether.c.jbj Tue Aug 3 19:45:06 1999 +++ tcpdump-3.4/print-ether.c Wed Aug 4 09:08:36 1999 @@ -54,6 +54,7 @@ #include #include +#include #include #include "interface.h" @@ -103,20 +104,23 @@ static char ifnames[16][16]; if (h->ifindex>0 && h->ifindex <= 16) { if (ifnames[h->ifindex-1][0] == 0) { - int tmp_fd; + int tmp_fd, err; struct ifreq ifr; ifr.ifr_ifindex = h->ifindex; tmp_fd = socket(AF_INET, SOCK_DGRAM, 0); - if (ioctl(tmp_fd, SIOCGIFNAME, (char*)&ifr) == 0) { + err = ioctl(tmp_fd, SIOCGIFNAME, (char*)&ifr); + /* XXX SIOCGIFNAME fubar on sparc64 2.2.10-3 */ + if (err == 0 && + (isprint(ifr.ifr_name[0]) && isprint(ifr.ifr_name[1]))) { memcpy(ifnames[h->ifindex-1], ifr.ifr_name, 16); } else { - sprintf(ifnames[h->ifindex-1], "if%2d ", h->ifindex); + sprintf(ifnames[h->ifindex-1], "if%02d ", h->ifindex); } close(tmp_fd); } printf("%4s ", ifnames[h->ifindex-1]); } else - printf("if%2d ", h->ifindex); + printf("if%02d ", h->ifindex); } switch (h->pkt_type) {