X-Git-Url: https://git.dlugolecki.net.pl/?a=blobdiff_plain;ds=sidebyside;f=gom%2Fassociation.c;h=9e392099c5fe73daed06146a375ed7e339952c11;hb=bb2090762d3ae9355a04286c33b78d24736b783c;hp=7c7ec68abb890ff01639354219d582dcae3bf3f7;hpb=72689522e287ca3b2231e7d8881f0fe5bea48f15;p=gedcom-parse.git diff --git a/gom/association.c b/gom/association.c index 7c7ec68..9e39209 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,12 @@ Gedcom_ctxt sub_assoc_start(_ELT_PARAMS_) return (Gedcom_ctxt)result; } +DEFINE_SUB_MAKEFUNC(association) +DEFINE_SUB_ADDFUNC(association) +DEFINE_SUB_FINDFUNC(association) +DEFINE_SUB_REMOVEFUNC(association) +DEFINE_SUB_MOVEFUNC(association) + DEFINE_STRING_CB(association, sub_assoc_rela_start, relation) DEFINE_ADDFUNC2(association, note_sub, note) @@ -99,6 +101,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) {