X-Git-Url: https://git.dlugolecki.net.pl/?a=blobdiff_plain;f=gom%2Fevent.c;h=b585a688abca91f686c7e5ac5d840e85ff0ff8fa;hb=b9348809a34ddce7d1e97c0d5b016f5d0492e8d7;hp=2d05ee9f28f3ce96b9dbcae6d4a4a733e79ee32f;hpb=72689522e287ca3b2231e7d8881f0fe5bea48f15;p=gedcom-parse.git diff --git a/gom/event.c b/gom/event.c index 2d05ee9..b585a68 100644 --- a/gom/event.c +++ b/gom/event.c @@ -44,11 +44,8 @@ Gedcom_ctxt sub_evt_start(_ELT_PARAMS_) if (! ctxt) NO_CONTEXT; else { - struct event *evt = (struct event *)malloc(sizeof(struct event)); - if (! evt) - MEMORY_ERROR; - else { - memset (evt, 0, sizeof(struct event)); + struct event *evt = SUB_MAKEFUNC(event)(); + if (evt) { evt->event = parsed_tag; evt->event_name = strdup(tag); if (! evt->event_name) { @@ -68,13 +65,14 @@ Gedcom_ctxt sub_evt_start(_ELT_PARAMS_) } if (! err) { - switch (ctxt->ctxt_type) { + int type = ctxt_type(ctxt); + switch (type) { case REC_FAM: ADDFUNC2(family,event)(ctxt, evt); break; case REC_INDI: ADDFUNC2(individual,event)(ctxt, evt); break; default: - UNEXPECTED_CONTEXT(ctxt->ctxt_type); + UNEXPECTED_CONTEXT(type); } result = MAKE_GOM_CTXT(elt, event, evt); } @@ -93,11 +91,8 @@ Gedcom_ctxt sub_attr_start(_ELT_PARAMS_) if (! ctxt) NO_CONTEXT; else { - struct event *evt = (struct event *)malloc(sizeof(struct event)); - if (! evt) - MEMORY_ERROR; - else { - memset (evt, 0, sizeof(struct event)); + struct event *evt = SUB_MAKEFUNC(event)(); + if (evt) { evt->event = parsed_tag; evt->event_name = strdup(tag); if (! evt->event_name) { @@ -117,11 +112,12 @@ Gedcom_ctxt sub_attr_start(_ELT_PARAMS_) } if (! err) { - switch (ctxt->ctxt_type) { + int type = ctxt_type(ctxt); + switch (type) { case REC_INDI: ADDFUNC2_TOVAR(individual,event,attribute)(ctxt, evt); break; default: - UNEXPECTED_CONTEXT(ctxt->ctxt_type); + UNEXPECTED_CONTEXT(type); } result = MAKE_GOM_CTXT(elt, event, evt); } @@ -131,6 +127,12 @@ Gedcom_ctxt sub_attr_start(_ELT_PARAMS_) return (Gedcom_ctxt)result; } +DEFINE_SUB_MAKEFUNC(event) +DEFINE_SUB_ADDFUNC(event) +DEFINE_SUB_FINDFUNC(event) +DEFINE_SUB_REMOVEFUNC(event) +DEFINE_SUB_MOVEFUNC(event) + DEFINE_STRING_CB(event, sub_evt_type_start, type) DEFINE_DATE_CB(event, sub_evt_date_start, date) DEFINE_AGE_CB(event, sub_evt_age_start, age) @@ -160,7 +162,8 @@ Gedcom_ctxt sub_fam_evt_age_start(_ELT_PARAMS_) if (evt) { int err = 0; struct age_value age = GEDCOM_AGE(parsed_value); - switch (ctxt->ctxt_type) { + int type = ctxt_type(ctxt); + switch (type) { case ELT_SUB_FAM_EVT_HUSB: evt->husband_age = gedcom_new_age_value(&age); if (! evt->husband_age) { @@ -176,7 +179,7 @@ Gedcom_ctxt sub_fam_evt_age_start(_ELT_PARAMS_) } break; default: - UNEXPECTED_CONTEXT(ctxt->ctxt_type); + UNEXPECTED_CONTEXT(type); } if (! err) result = MAKE_GOM_CTXT(elt, event, evt); @@ -226,6 +229,22 @@ void event_subscribe() sub_evt_caus_start, def_elt_end); } +void UNREFALLFUNC(event)(struct event* obj) +{ + if (obj) { + struct event* runner; + for (runner = obj; runner; runner = runner->next) { + UNREFALLFUNC(place)(runner->place); + UNREFALLFUNC(address)(runner->address); + UNREFALLFUNC(source_citation)(runner->citation); + UNREFALLFUNC(multimedia_link)(runner->mm_link); + UNREFALLFUNC(note_sub)(runner->note); + unref_xref_value(runner->family); + UNREFALLFUNC(user_data)(runner->extra); + } + } +} + void CLEANFUNC(event)(struct event* evt) { if (evt) {