X-Git-Url: https://git.dlugolecki.net.pl/?a=blobdiff_plain;f=gom%2Faddress.c;h=fa8a3ee0a98eba2d3ae0aed727177984f8902186;hb=763e8737b5118c5f23dca84a3290c2d805bbefe6;hp=6c0332a64a89727d4f1fa3ab61a2a9541c3703c3;hpb=082066d0c776403b70c366f9a7d1333c7a9fac15;p=gedcom-parse.git diff --git a/gom/address.c b/gom/address.c index 6c0332a..fa8a3ee 100644 --- a/gom/address.c +++ b/gom/address.c @@ -41,14 +41,11 @@ Gedcom_ctxt sub_addr_start(_ELT_PARAMS_) if (!ctxt) NO_CONTEXT; else { - struct address *addr = (struct address *)malloc(sizeof(struct address)); - if (!addr) - MEMORY_ERROR; - else { - memset (addr, 0, sizeof(struct address)); + struct address *addr = SUB_MAKEFUNC(address)(); + if (addr) { switch (ctxt->ctxt_type) { case ELT_HEAD_SOUR_CORP: - header_add_address(ctxt, addr); break; + ADDFUNC2_NOLIST(header,address)(ctxt, addr); break; case ELT_SUB_FAM_EVT: case ELT_SUB_FAM_EVT_EVEN: case ELT_SUB_INDIV_ATTR: @@ -57,11 +54,11 @@ Gedcom_ctxt sub_addr_start(_ELT_PARAMS_) case ELT_SUB_INDIV_GEN: case ELT_SUB_INDIV_ADOP: case ELT_SUB_INDIV_EVEN: - event_add_address(ctxt, addr); break; + ADDFUNC2_NOLIST(event,address)(ctxt, addr); break; case REC_REPO: - repository_add_address(ctxt, addr); break; + ADDFUNC2_NOLIST(repository,address)(ctxt, addr); break; case REC_SUBM: - submitter_add_address(ctxt, addr); break; + ADDFUNC2_NOLIST(submitter,address)(ctxt, addr); break; default: UNEXPECTED_CONTEXT(ctxt->ctxt_type); } @@ -84,13 +81,19 @@ Gedcom_ctxt sub_addr_cont_start(_ELT_PARAMS_) return (Gedcom_ctxt)result; } -STRING_END_CB(address, sub_addr_end, full_label) -STRING_CB(address, sub_addr_adr1_start, line1) -STRING_CB(address, sub_addr_adr2_start, line2) -STRING_CB(address, sub_addr_city_start, city) -STRING_CB(address, sub_addr_stae_start, state) -STRING_CB(address, sub_addr_post_start, postal) -STRING_CB(address, sub_addr_ctry_start, country) +DEFINE_SUB_MAKEFUNC(address) +DEFINE_SUB_ADDFUNC(address) +DEFINE_SUB_DELETEFUNC(address) + +DEFINE_STRING_END_CB(address, sub_addr_end, full_label) +DEFINE_STRING_CB(address, sub_addr_adr1_start, line1) +DEFINE_STRING_CB(address, sub_addr_adr2_start, line2) +DEFINE_STRING_CB(address, sub_addr_city_start, city) +DEFINE_STRING_CB(address, sub_addr_stae_start, state) +DEFINE_STRING_CB(address, sub_addr_post_start, postal) +DEFINE_STRING_CB(address, sub_addr_ctry_start, country) + +DEFINE_ADDFUNC2(address, user_data, extra) Gedcom_ctxt sub_phon_start(_ELT_PARAMS_) { @@ -144,14 +147,7 @@ void address_subscribe() gedcom_subscribe_to_element(ELT_SUB_PHON, sub_phon_start, def_elt_end); } -void address_add_user_data(Gom_ctxt ctxt, struct user_data* data) -{ - struct address *obj = SAFE_CTXT_CAST(address, ctxt); - if (obj) - LINK_CHAIN_ELT(user_data, obj->extra, data); -} - -void address_cleanup(struct address *address) +void CLEANFUNC(address)(struct address *address) { if (address) { SAFE_FREE(address->full_label); @@ -161,7 +157,7 @@ void address_cleanup(struct address *address) SAFE_FREE(address->state); SAFE_FREE(address->postal); SAFE_FREE(address->country); - DESTROY_CHAIN_ELTS(user_data, address->extra, user_data_cleanup); + DESTROY_CHAIN_ELTS(user_data, address->extra); } SAFE_FREE(address); }