X-Git-Url: https://git.dlugolecki.net.pl/?a=blobdiff_plain;f=gom%2Fassociation.c;h=9398bbc49182929cb32efc2d7fe1cf536a825736;hb=f197c791489f1537db4aebc7ce29b6d4f9adc2b3;hp=7c7ec68abb890ff01639354219d582dcae3bf3f7;hpb=72689522e287ca3b2231e7d8881f0fe5bea48f15;p=gedcom-parse.git diff --git a/gom/association.c b/gom/association.c index 7c7ec68..9398bbc 100644 --- a/gom/association.c +++ b/gom/association.c @@ -40,12 +40,8 @@ Gedcom_ctxt sub_assoc_start(_ELT_PARAMS_) if (!ctxt) NO_CONTEXT; else { - struct association *assoc; - assoc = (struct association *)malloc(sizeof(struct association)); - if (! assoc) - MEMORY_ERROR; - else { - memset (assoc, 0, sizeof(struct association)); + struct association *assoc = SUB_MAKEFUNC(association)(); + if (assoc) { assoc->to = GEDCOM_XREF_PTR(parsed_value); switch (ctxt->ctxt_type) { @@ -61,6 +57,8 @@ Gedcom_ctxt sub_assoc_start(_ELT_PARAMS_) return (Gedcom_ctxt)result; } +DEFINE_SUB_MAKEFUNC(association) + DEFINE_STRING_CB(association, sub_assoc_rela_start, relation) DEFINE_ADDFUNC2(association, note_sub, note) @@ -99,6 +97,19 @@ void association_subscribe() def_elt_end); } +void UNREFALLFUNC(association)(struct association *obj) +{ + if (obj) { + struct association* runner; + for (runner = obj; runner; runner = runner->next) { + unref_xref_value(runner->to); + UNREFALLFUNC(source_citation)(runner->citation); + UNREFALLFUNC(note_sub)(runner->note); + UNREFALLFUNC(user_data)(runner->extra); + } + } +} + void CLEANFUNC(association)(struct association* assoc) { if (assoc) {