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;