Fix strict aliasing warnings
diff --git a/ip6tables.c b/ip6tables.c
index 79c31bb..d43029e 100644
--- a/ip6tables.c
+++ b/ip6tables.c
@@ -1413,6 +1413,7 @@
 	const char *jumpto = "";
 	char *protocol = NULL;
 	int proto_used = 0;
+	u_int64_t *cnt;
 
 	memset(&fw, 0, sizeof(fw));
 
@@ -1727,12 +1728,14 @@
 					"-%c requires packet and byte counter",
 					opt2char(OPT_COUNTERS));
 
-			if (sscanf(pcnt, "%llu", (unsigned long long *)&fw.counters.pcnt) != 1)
+			cnt = &fw.counters.pcnt;
+			if (sscanf(pcnt, "%llu", (unsigned long long *)cnt) != 1)
 				exit_error(PARAMETER_PROBLEM,
 					"-%c packet counter not numeric",
 					opt2char(OPT_COUNTERS));
 
-			if (sscanf(bcnt, "%llu", (unsigned long long *)&fw.counters.bcnt) != 1)
+			cnt = &fw.counters.bcnt;
+			if (sscanf(bcnt, "%llu", (unsigned long long *)cnt) != 1)
 				exit_error(PARAMETER_PROBLEM,
 					"-%c byte counter not numeric",
 					opt2char(OPT_COUNTERS));
diff --git a/iptables-restore.c b/iptables-restore.c
index 1a4beeb..df351ad 100644
--- a/iptables-restore.c
+++ b/iptables-restore.c
@@ -74,7 +74,11 @@
 
 static int parse_counters(char *string, struct ipt_counters *ctr)
 {
-	return (sscanf(string, "[%llu:%llu]", (unsigned long long *)&ctr->pcnt, (unsigned long long *)&ctr->bcnt) == 2);
+	u_int64_t *pcnt, *bcnt;
+
+	pcnt = &ctr->pcnt;
+	bcnt = &ctr->bcnt;
+	return (sscanf(string, "[%llu:%llu]", (unsigned long long *)pcnt, (unsigned long long *)bcnt) == 2);
 }
 
 /* global new argv and argc */
diff --git a/iptables-xml.c b/iptables-xml.c
index 1bb2e20..2aefb1a 100644
--- a/iptables-xml.c
+++ b/iptables-xml.c
@@ -70,12 +70,16 @@
 static int
 parse_counters(char *string, struct ipt_counters *ctr)
 {
-	if (string != NULL)
+	u_int64_t *pcnt, *bcnt;
+
+	if (string != NULL) {
+		pcnt = &ctr->pcnt;
+		bcnt = &ctr->bcnt;
 		return (sscanf
 			(string, "[%llu:%llu]",
-			 (unsigned long long *) &ctr->pcnt,
-			 (unsigned long long *) &ctr->bcnt) == 2);
-	else
+			 (unsigned long long *)pcnt,
+			 (unsigned long long *)bcnt) == 2);
+	} else
 		return (0 == 2);
 }
 
diff --git a/iptables.c b/iptables.c
index 344d2d6..549c6cd 100644
--- a/iptables.c
+++ b/iptables.c
@@ -1469,6 +1469,7 @@
 	const char *jumpto = "";
 	char *protocol = NULL;
 	int proto_used = 0;
+	u_int64_t *cnt;
 
 	memset(&fw, 0, sizeof(fw));
 
@@ -1793,12 +1794,14 @@
 					"-%c requires packet and byte counter",
 					opt2char(OPT_COUNTERS));
 
-			if (sscanf(pcnt, "%llu", (unsigned long long *)&fw.counters.pcnt) != 1)
+			cnt = &fw.counters.pcnt;
+			if (sscanf(pcnt, "%llu", (unsigned long long *)cnt) != 1)
 				exit_error(PARAMETER_PROBLEM,
 					"-%c packet counter not numeric",
 					opt2char(OPT_COUNTERS));
 
-			if (sscanf(bcnt, "%llu", (unsigned long long *)&fw.counters.bcnt) != 1)
+			cnt = &fw.counters.bcnt;
+			if (sscanf(bcnt, "%llu", (unsigned long long *)cnt) != 1)
 				exit_error(PARAMETER_PROBLEM,
 					"-%c byte counter not numeric",
 					opt2char(OPT_COUNTERS));