diff --git a/dongle.c b/dongle.c index 4580550061d305ea57a645a9b8f152a5b288572f..db9fba9206d537e13de8415ab703ff826c554baf 100644 --- a/dongle.c +++ b/dongle.c @@ -523,14 +523,14 @@ fail_dr: char *get_device_ip(char *device_name) { char *iface, *destination, *gateway, *flags, *route, *ipv4_addr = NULL; - bool host_flag; + int host_flag; struct in_addr addr; FILE *fp; fp = fopen("/proc/net/route", "r"); if (!fp) { perror("fopen"); - goto fail; + goto fail_fopen; } route = (char *)calloc(1, 1024); @@ -548,34 +548,34 @@ char *get_device_ip(char *device_name) flags = lexer(&route, "\t"); if (strncmp(iface, device_name, 10) != 0) - continue; + goto free_vars; host_flag = atoi(flags) & 4; - if (!host_flag) { - free(route); + if (!host_flag) + goto free_vars; + + ipv4_addr = (char *)calloc(1, IPV4_MAX); + if (!ipv4_addr) { free(iface); free(destination); free(gateway); free(flags); - continue; - } - ipv4_addr = (char *)calloc(1, IPV4_MAX); - if (!ipv4_addr) break; - + } addr.s_addr = strtoul(destination, NULL, IPV4_MAX); inet_ntop(AF_INET, &(addr.s_addr), ipv4_addr, IPV4_MAX); - //printf("ipv4_addr %s\n", ipv4_addr); +free_vars: + free(iface); + free(destination); + free(gateway); + free(flags); } + free(route); - free(iface); - free(destination); - free(gateway); - free(flags); fail_route: fclose(fp); -fail: +fail_fopen: return ipv4_addr; }