--- embedaddon/libnet/src/libnet_if_addr.c 2012/02/21 22:14:23 1.1.1.1 +++ embedaddon/libnet/src/libnet_if_addr.c 2013/07/22 11:54:42 1.1.1.2 @@ -1,5 +1,5 @@ /* - * $Id: libnet_if_addr.c,v 1.1.1.1 2012/02/21 22:14:23 misho Exp $ + * $Id: libnet_if_addr.c,v 1.1.1.2 2013/07/22 11:54:42 misho Exp $ * * libnet * libnet_if_addr.c - interface selection code @@ -109,12 +109,12 @@ libnet_check_iface(libnet_t *l) #endif int -libnet_ifaddrlist(register struct libnet_ifaddr_list **ipaddrp, int8_t *dev, -register int8_t *errbuf) +libnet_ifaddrlist(register struct libnet_ifaddr_list **ipaddrp, char *dev, +register char *errbuf) { register struct libnet_ifaddr_list *al; struct ifreq *ifr, *lifr, *pifr, nifr; - int8_t device[sizeof(nifr.ifr_name)]; + char device[sizeof(nifr.ifr_name)]; static struct libnet_ifaddr_list ifaddrlist[MAX_IPADDR]; char *p; @@ -154,6 +154,9 @@ register int8_t *errbuf) snprintf(errbuf, LIBNET_ERRBUF_SIZE, "%s(): ioctl(SIOCGIFCONF) error: %s\n", __func__, strerror(errno)); +#ifdef HAVE_LINUX_PROCFS + fclose(fp); +#endif return(-1); } @@ -224,6 +227,9 @@ register int8_t *errbuf) "%s(): SIOCGIFADDR: dev=%s: %s\n", __func__, device, strerror(errno)); close(fd); +#ifdef HAVE_LINUX_PROCFS + fclose(fp); +#endif return (-1); } else /* device has no IP address => set to 0 */ @@ -235,11 +241,17 @@ register int8_t *errbuf) { al->addr = ((struct sockaddr_in *)&nifr.ifr_addr)->sin_addr.s_addr; } + + free(al->device); + al->device = NULL; if ((al->device = strdup(device)) == NULL) { snprintf(errbuf, LIBNET_ERRBUF_SIZE, "%s(): strdup not enough memory\n", __func__); +#ifdef HAVE_LINUX_PROCFS + fclose(fp); +#endif return(-1); } @@ -257,6 +269,7 @@ register int8_t *errbuf) { snprintf(errbuf, LIBNET_ERRBUF_SIZE, "%s(): ferror: %s\n", __func__, strerror(errno)); + fclose(fp); return (-1); } fclose(fp); @@ -268,13 +281,13 @@ register int8_t *errbuf) #else /* From tcptraceroute, convert a numeric IP address to a string */ #define IPTOSBUFFERS 12 -static int8_t *iptos(u_int32_t in) +static int8_t *iptos(uint32_t in) { static int8_t output[IPTOSBUFFERS][ 3 * 4 + 3 + 1]; static int16_t which; - u_int8_t *p; + uint8_t *p; - p = (u_int8_t *)∈ + p = (uint8_t *)∈ which = (which + 1 == IPTOSBUFFERS ? 0 : which + 1); snprintf(output[which], IPTOSBUFFERS, "%d.%d.%d.%d", p[0], p[1], p[2], p[3]); @@ -282,8 +295,8 @@ static int8_t *iptos(u_int32_t in) } int -libnet_ifaddrlist(register struct libnet_ifaddr_list **ipaddrp, int8_t *dev, -register int8_t *errbuf) +libnet_ifaddrlist(register struct libnet_ifaddr_list **ipaddrp, char *dev, +register char *errbuf) { int nipaddr = 0; int i = 0; @@ -310,7 +323,7 @@ register int8_t *errbuf) /* XXX - strdup */ ifaddrlist[i].device = strdup(d->name); - ifaddrlist[i].addr = (u_int32_t) + ifaddrlist[i].addr = (uint32_t) strdup(iptos(((struct sockaddr_in *) d->addresses->addr)->sin_addr.s_addr)); ++i; @@ -326,9 +339,9 @@ int libnet_select_device(libnet_t *l) { int c, i; - int8_t err_buf[LIBNET_ERRBUF_SIZE]; + char err_buf[LIBNET_ERRBUF_SIZE]; struct libnet_ifaddr_list *address_list, *al; - u_int32_t addr; + uint32_t addr; if (l == NULL) @@ -401,6 +414,7 @@ good: for (i = 0; i < c; i++) { free(al[i].device); + al[i].device = NULL; } return (1); @@ -408,6 +422,7 @@ bad: for (i = 0; i < c; i++) { free(al[i].device); + al[i].device = NULL; } return (-1); }