X-Git-Url: https://git.dlugolecki.net.pl/?a=blobdiff_plain;f=gom%2Fmultimedia_link.c;h=b2ee55925918c681fb28f201232de2affc275138;hb=866835ac8928d7e40919c2ca59799cb37023856f;hp=147b838fa7e0204f67f5d65785ca4554bfc8d434;hpb=72689522e287ca3b2231e7d8881f0fe5bea48f15;p=gedcom-parse.git diff --git a/gom/multimedia_link.c b/gom/multimedia_link.c index 147b838..b2ee559 100644 --- a/gom/multimedia_link.c +++ b/gom/multimedia_link.c @@ -44,16 +44,13 @@ Gedcom_ctxt sub_obje_start(_ELT_PARAMS_) if (! ctxt) NO_CONTEXT; else { - struct multimedia_link *mm - = (struct multimedia_link *)malloc(sizeof(struct multimedia_link)); - if (! mm) - MEMORY_ERROR; - else { - memset (mm, 0, sizeof(struct multimedia_link)); + struct multimedia_link *mm = SUB_MAKEFUNC(multimedia_link)(); + if (mm) { + int type = ctxt_type(ctxt); if (GEDCOM_IS_XREF_PTR(parsed_value)) mm->reference = GEDCOM_XREF_PTR(parsed_value); - switch (ctxt->ctxt_type) { + switch (type) { case ELT_SUB_FAM_EVT: case ELT_SUB_FAM_EVT_EVEN: case ELT_SUB_INDIV_ATTR: @@ -74,7 +71,7 @@ Gedcom_ctxt sub_obje_start(_ELT_PARAMS_) case REC_SUBM: ADDFUNC2(submitter,multimedia_link)(ctxt, mm); break; default: - UNEXPECTED_CONTEXT(ctxt->ctxt_type); + UNEXPECTED_CONTEXT(type); } result = MAKE_GOM_CTXT(elt, multimedia_link, mm); } @@ -83,6 +80,12 @@ Gedcom_ctxt sub_obje_start(_ELT_PARAMS_) return (Gedcom_ctxt)result; } +DEFINE_SUB_MAKEFUNC(multimedia_link) +DEFINE_SUB_ADDFUNC(multimedia_link) +DEFINE_SUB_FINDFUNC(multimedia_link) +DEFINE_SUB_REMOVEFUNC(multimedia_link) +DEFINE_SUB_MOVEFUNC(multimedia_link) + DEFINE_STRING_CB(multimedia_link, sub_obje_form_start, form) DEFINE_STRING_CB(multimedia_link, sub_obje_titl_start, title) DEFINE_STRING_CB(multimedia_link, sub_obje_file_start, file) @@ -102,6 +105,18 @@ void multimedia_link_subscribe() sub_obje_file_start, def_elt_end); } +void UNREFALLFUNC(multimedia_link)(struct multimedia_link* obj) +{ + if (obj) { + struct multimedia_link* runner; + for (runner = obj; runner; runner = runner->next) { + unref_xref_value(runner->reference); + UNREFALLFUNC(note_sub)(runner->note); + UNREFALLFUNC(user_data)(runner->extra); + } + } +} + void CLEANFUNC(multimedia_link)(struct multimedia_link* mm) { if (mm) {