Changeset 3621 in MondoRescue for branches/3.3/mindi-busybox/networking/interface.c
- Timestamp:
- Dec 20, 2016, 4:07:32 PM (7 years ago)
- Location:
- branches/3.3
- Files:
-
- 1 edited
- 1 copied
Legend:
- Unmodified
- Added
- Removed
-
branches/3.3/mindi-busybox/networking/interface.c
r3232 r3621 90 90 static const char* FAST_FUNC INET_sprint(struct sockaddr *sap, int numeric) 91 91 { 92 static char *buff; /* defaults to NULL */93 94 free(buff);95 92 if (sap->sa_family == 0xFFFF || sap->sa_family == 0) 96 93 return "[NONE SET]"; 97 buff = INET_rresolve((struct sockaddr_in *) sap, numeric, 0xffffff00); 98 return buff; 94 return auto_string(INET_rresolve((struct sockaddr_in *) sap, numeric, 0xffffff00)); 99 95 } 100 96 … … 172 168 static const char* FAST_FUNC INET6_sprint(struct sockaddr *sap, int numeric) 173 169 { 174 static char *buff;175 176 free(buff);177 170 if (sap->sa_family == 0xFFFF || sap->sa_family == 0) 178 171 return "[NONE SET]"; 179 buff = INET6_rresolve((struct sockaddr_in6 *) sap, numeric); 180 return buff; 172 return auto_string(INET6_rresolve((struct sockaddr_in6 *) sap, numeric)); 181 173 } 182 174 … … 224 216 static char* FAST_FUNC UNSPEC_print(unsigned char *ptr) 225 217 { 226 static char *buff; 227 218 char *buff; 228 219 char *pos; 229 220 unsigned int i; 230 221 231 if (!buff) 232 buff = xmalloc(sizeof(struct sockaddr) * 3 + 1); 222 buff = auto_string(xmalloc(sizeof(struct sockaddr) * 3 + 1)); 233 223 pos = buff; 234 224 for (i = 0; i < sizeof(struct sockaddr); i++) { … … 713 703 static char* FAST_FUNC ether_print(unsigned char *ptr) 714 704 { 715 static char *buff; 716 717 free(buff); 705 char *buff; 718 706 buff = xasprintf("%02X:%02X:%02X:%02X:%02X:%02X", 719 707 (ptr[0] & 0377), (ptr[1] & 0377), (ptr[2] & 0377), 720 708 (ptr[3] & 0377), (ptr[4] & 0377), (ptr[5] & 0377) 721 709 ); 722 return buff; 723 } 724 725 static int FAST_FUNC ether_input(const char *bufp, struct sockaddr *sap); 710 return auto_string(buff); 711 } 726 712 727 713 static const struct hwtype ether_hwtype = { … … 731 717 .alen = ETH_ALEN, 732 718 .print = ether_print, 733 .input = ether_input 734 }; 735 736 static unsigned hexchar2int(char c) 737 { 738 if (isdigit(c)) 739 return c - '0'; 740 c &= ~0x20; /* a -> A */ 741 if ((unsigned)(c - 'A') <= 5) 742 return c - ('A' - 10); 743 return ~0U; 744 } 745 746 /* Input an Ethernet address and convert to binary. */ 747 static int FAST_FUNC ether_input(const char *bufp, struct sockaddr *sap) 748 { 749 unsigned char *ptr; 750 char c; 751 int i; 752 unsigned val; 753 754 sap->sa_family = ether_hwtype.type; 755 ptr = (unsigned char*) sap->sa_data; 756 757 i = 0; 758 while ((*bufp != '\0') && (i < ETH_ALEN)) { 759 val = hexchar2int(*bufp++) * 0x10; 760 if (val > 0xff) { 761 errno = EINVAL; 762 return -1; 763 } 764 c = *bufp; 765 if (c == ':' || c == 0) 766 val >>= 4; 767 else { 768 val |= hexchar2int(c); 769 if (val > 0xff) { 770 errno = EINVAL; 771 return -1; 772 } 773 } 774 if (c != 0) 775 bufp++; 776 *ptr++ = (unsigned char) val; 777 i++; 778 779 /* We might get a semicolon here - not required. */ 780 if (*bufp == ':') { 781 bufp++; 782 } 783 } 784 return 0; 785 } 719 .input = in_ether 720 }; 786 721 787 722 static const struct hwtype ppp_hwtype = { … … 928 863 { 929 864 FILE *f; 930 char addr6[40], devname[2 0];865 char addr6[40], devname[21]; 931 866 struct sockaddr_in6 sap; 932 867 int plen, scope, dad_status, if_idx; … … 947 882 addr6p[0], addr6p[1], addr6p[2], addr6p[3], 948 883 addr6p[4], addr6p[5], addr6p[6], addr6p[7]); 884 memset(&sap, 0, sizeof(sap)); 949 885 inet_pton(AF_INET6, addr6, 950 886 (struct sockaddr *) &sap.sin6_addr);
Note:
See TracChangeset
for help on using the changeset viewer.