proper cloning


git-svn-id: https://asn1c.svn.sourceforge.net/svnroot/asn1c/trunk@108 59561ff5-6e30-0410-9f3c-9617f08c8826
diff --git a/libasn1parser/asn1p_constr.c b/libasn1parser/asn1p_constr.c
index 6e19889..faec6f2 100644
--- a/libasn1parser/asn1p_constr.c
+++ b/libasn1parser/asn1p_constr.c
@@ -55,10 +55,29 @@
 
 	clone = asn1p_constraint_new(src->_lineno);
 	if(clone) {
+		int i;
+
 		clone->type = src->type;
+		clone->presence = src->presence;
 		CLONE(value, asn1p_value_clone);
 		CLONE(range_start, asn1p_value_clone);
 		CLONE(range_stop, asn1p_value_clone);
+
+		for(i = 0; i < src->el_count; i++) {
+			asn1p_constraint_t *t;
+			t = asn1p_constraint_clone(src->elements[i]);
+			if(!t) {
+				asn1p_constraint_free(clone);
+				return NULL;
+			}
+			if(asn1p_constraint_insert(clone, t)) {
+				asn1p_constraint_free(clone);
+				asn1p_constraint_free(t);
+				return NULL;
+			}
+		}
+		assert(clone->el_count == src->el_count);
+		clone->_lineno = src->_lineno;
 	}
 
 	return clone;