fix connmark and mark match save() functions
diff --git a/extensions/libipt_connmark.c b/extensions/libipt_connmark.c
index 14cbe33..8f81f02 100644
--- a/extensions/libipt_connmark.c
+++ b/extensions/libipt_connmark.c
@@ -65,11 +65,8 @@
 }
 
 static void
-print_mark(unsigned long mark, unsigned long mask, int invert, int numeric)
+print_mark(unsigned long mark, unsigned long mask, int numeric)
 {
-	if (invert)
-		fputc('!', stdout);
-
 	if(mask != 0xffffffff)
 		printf("0x%lx/0x%lx ", mark, mask);
 	else
@@ -91,20 +88,25 @@
       const struct ipt_entry_match *match,
       int numeric)
 {
+	struct ipt_connmark_info *info = (struct ipt_connmark_info *)match->data;
+
 	printf("CONNMARK match ");
-	print_mark(((struct ipt_connmark_info *)match->data)->mark,
-		  ((struct ipt_connmark_info *)match->data)->mask,
-		  ((struct ipt_connmark_info *)match->data)->invert, numeric);
+	if (info->invert)
+		printf("!");
+	print_mark(info->mark, info->mask, numeric);
 }
 
 /* Saves the union ipt_matchinfo in parsable form to stdout. */
 static void
 save(const struct ipt_ip *ip, const struct ipt_entry_match *match)
 {
+	struct ipt_connmark_info *info = (struct ipt_connmark_info *)match->data;
+
+	if (info->invert)
+		printf("! ");
+
 	printf("--mark ");
-	print_mark(((struct ipt_connmark_info *)match->data)->mark,
-		  ((struct ipt_connmark_info *)match->data)->mask,
-		  ((struct ipt_connmark_info *)match->data)->invert, 0);
+	print_mark(info->mark, info->mask, 0);
 }
 
 static
diff --git a/extensions/libipt_mark.c b/extensions/libipt_mark.c
index 82e826d..4aa780b 100644
--- a/extensions/libipt_mark.c
+++ b/extensions/libipt_mark.c
@@ -65,11 +65,8 @@
 }
 
 static void
-print_mark(unsigned long mark, unsigned long mask, int invert, int numeric)
+print_mark(unsigned long mark, unsigned long mask, int numeric)
 {
-	if (invert)
-		fputc('!', stdout);
-
 	if(mask != 0xffffffff)
 		printf("0x%lx/0x%lx ", mark, mask);
 	else
@@ -91,20 +88,27 @@
       const struct ipt_entry_match *match,
       int numeric)
 {
+	struct ipt_mark_info *info = (struct ipt_mark_info *)match->data;
+
 	printf("MARK match ");
-	print_mark(((struct ipt_mark_info *)match->data)->mark,
-		  ((struct ipt_mark_info *)match->data)->mask,
-		  ((struct ipt_mark_info *)match->data)->invert, numeric);
+
+	if (info->invert)
+		printf("!");
+	
+	print_mark(info->mark, info->mask, numeric);
 }
 
 /* Saves the union ipt_matchinfo in parsable form to stdout. */
 static void
 save(const struct ipt_ip *ip, const struct ipt_entry_match *match)
 {
+	struct ipt_mark_info *info = (struct ipt_mark_info *)match->data;
+
+	if (info->invert)
+		printf("! ");
+	
 	printf("--mark ");
-	print_mark(((struct ipt_mark_info *)match->data)->mark,
-		  ((struct ipt_mark_info *)match->data)->mask,
-		  ((struct ipt_mark_info *)match->data)->invert, 0);
+	print_mark(info->mark, info->mask, 0);
 }
 
 static