X-Git-Url: https://git.dlugolecki.net.pl/?a=blobdiff_plain;f=gom%2Fuser_ref.c;h=c43874f829d2561d277540d4fc30ccef28774ec9;hb=866835ac8928d7e40919c2ca59799cb37023856f;hp=c9440ab7e8b63efe78d67f20876deabaf1d62e64;hpb=763e8737b5118c5f23dca84a3290c2d805bbefe6;p=gedcom-parse.git diff --git a/gom/user_ref.c b/gom/user_ref.c index c9440ab..c43874f 100644 --- a/gom/user_ref.c +++ b/gom/user_ref.c @@ -51,7 +51,8 @@ Gedcom_ctxt sub_user_ref_start(_ELT_PARAMS_) free(refn); } else { - switch (ctxt->ctxt_type) { + int type = ctxt_type(ctxt); + switch (type) { case REC_FAM: ADDFUNC2(family,user_ref_number)(ctxt, refn); break; case REC_INDI: @@ -65,7 +66,7 @@ Gedcom_ctxt sub_user_ref_start(_ELT_PARAMS_) case REC_SOUR: ADDFUNC2(source,user_ref_number)(ctxt, refn); break; default: - UNEXPECTED_CONTEXT(ctxt->ctxt_type); + UNEXPECTED_CONTEXT(type); } result = MAKE_GOM_CTXT(elt, user_ref_number, refn); @@ -77,6 +78,10 @@ Gedcom_ctxt sub_user_ref_start(_ELT_PARAMS_) } DEFINE_SUB_MAKEFUNC(user_ref_number) +DEFINE_SUB_ADDFUNC(user_ref_number) +DEFINE_SUB_FINDFUNC(user_ref_number) +DEFINE_SUB_REMOVEFUNC(user_ref_number) +DEFINE_SUB_MOVEFUNC(user_ref_number) DEFINE_STRING_CB(user_ref_number, sub_user_ref_type_start, type) @@ -91,8 +96,9 @@ Gedcom_ctxt sub_user_rin_start(_ELT_PARAMS_) NO_CONTEXT; else { char *str = GEDCOM_STRING(parsed_value); + int type = ctxt_type(ctxt); - switch (ctxt->ctxt_type) { + switch (type) { case REC_FAM: ADDFUNC2_STR(family,record_id)(ctxt, str); break; case REC_INDI: @@ -106,9 +112,9 @@ Gedcom_ctxt sub_user_rin_start(_ELT_PARAMS_) case REC_SOUR: ADDFUNC2_STR(source,record_id)(ctxt, str); break; default: - UNEXPECTED_CONTEXT(ctxt->ctxt_type); + UNEXPECTED_CONTEXT(type); } - result = make_gom_ctxt(elt, ctxt->obj_type, ctxt->ctxt_ptr); + result = dup_gom_ctxt(ctxt, elt); } return (Gedcom_ctxt)result; } @@ -123,6 +129,15 @@ void user_ref_subscribe() def_elt_end); } +void UNREFALLFUNC(user_ref_number)(struct user_ref_number* obj) +{ + if (obj) { + struct user_ref_number* runner; + for (runner = obj; runner; runner = runner->next) + UNREFALLFUNC(user_data)(runner->extra); + } +} + void CLEANFUNC(user_ref_number)(struct user_ref_number* refn) { if (refn) {