removed duplicate includes; moved CHOICE enumeration to higher level


git-svn-id: https://asn1c.svn.sourceforge.net/svnroot/asn1c/trunk@77 59561ff5-6e30-0410-9f3c-9617f08c8826
diff --git a/libasn1compiler/asn1c_out.c b/libasn1compiler/asn1c_out.c
index a643241..2f7c573 100644
--- a/libasn1compiler/asn1c_out.c
+++ b/libasn1compiler/asn1c_out.c
@@ -35,6 +35,8 @@
 			if(ret == -1) return -1;
 		}
 	}
+	if(lf_found)
+		arg->indented = 0;
 
 	/*
 	 * Estimate necessary size.
@@ -66,10 +68,22 @@
 	m->len = ret;
 	va_end(ap);
 
-	TQ_ADD(&(arg->target->targets[arg->target->target]), m, next);
+	if(arg->target->target == OT_INCLUDES) {
+		out_chunk_t *v;
+		TQ_FOR(v, &(arg->target->targets[OT_INCLUDES]), next) {
+			if(m->len == v->len
+			&& !memcmp(m->buf, v->buf, m->len))
+				break;
+		}
+		if(v) {
+			/* Entry is already present. Skip it. */
+			free(m->buf);
+			free(m);
+			return 0;
+		}
+	}
 
-	if(lf_found)
-		arg->indented = 0;
+	TQ_ADD(&(arg->target->targets[arg->target->target]), m, next);
 
 	return 0;
 }