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;
 }