fix -X bug
diff --git a/libebtc.c b/libebtc.c
index 01bb6f3..02003a7 100644
--- a/libebtc.c
+++ b/libebtc.c
@@ -838,7 +838,8 @@
 	new->kernel_start = NULL;
 }
 
-static void ebt_delete_a_chain(struct ebt_u_replace *replace, int chain, int print_err)
+/* returns -1 if the chain is referenced, 0 on success */
+static int ebt_delete_a_chain(struct ebt_u_replace *replace, int chain, int print_err)
 {
 	int tmp = replace->selected_chain;
 	/* If the chain is referenced, don't delete it,
@@ -846,7 +847,7 @@
 	 * one we're deleting */
 	replace->selected_chain = chain;
 	if (ebt_check_for_references(replace, print_err))
-		return;
+		return -1;
 	decrease_chain_jumps(replace);
 	ebt_flush_chains(replace);
 	replace->selected_chain = tmp;
@@ -854,20 +855,22 @@
 	free(replace->chains[chain]);
 	memmove(replace->chains+chain, replace->chains+chain+1, (replace->num_chains-chain-1)*sizeof(void *));
 	replace->num_chains--;
+	return 0;
 }
 
 /* Selected_chain == -1: delete all non-referenced udc
  * selected_chain < NF_BR_NUMHOOKS is illegal */
 void ebt_delete_chain(struct ebt_u_replace *replace)
 {
-	int i;
-
 	if (replace->selected_chain != -1 && replace->selected_chain < NF_BR_NUMHOOKS)
 		ebt_print_bug("You can't remove a standard chain");
-	if (replace->selected_chain == -1)
-		for (i = NF_BR_NUMHOOKS; i < replace->num_chains; i++)
-			ebt_delete_a_chain(replace, i, 0);
-	else
+	if (replace->selected_chain == -1) {
+		int i = NF_BR_NUMHOOKS;
+
+		while (i < replace->num_chains)
+			if (ebt_delete_a_chain(replace, i, 0))
+				i++;
+	} else
 		ebt_delete_a_chain(replace, replace->selected_chain, 1);
 }