X-Git-Url: https://git.dlugolecki.net.pl/?a=blobdiff_plain;f=gom%2Fuser_rec.c;h=9531cf144f58fd4cc28a34224c587daf53e81dec;hb=60162324857b1e8d84b8346d99f8b7dce07d0d40;hp=90ffb0b995549443ce630451fcf7679290dd4f60;hpb=72689522e287ca3b2231e7d8881f0fe5bea48f15;p=gedcom-parse.git diff --git a/gom/user_rec.c b/gom/user_rec.c index 90ffb0b..9531cf1 100644 --- a/gom/user_rec.c +++ b/gom/user_rec.c @@ -181,7 +181,7 @@ Gedcom_ctxt user_elt_start(_ELT_PARAMS_) data->xref_value = GEDCOM_XREF_PTR(parsed_value); if (! err) { - switch (ctxt->obj_type) { + switch (ctxt_obj_type(ctxt)) { case T_header: ADDFUNC2(header,user_data)(ctxt, data); break; case T_submission: @@ -231,9 +231,9 @@ Gedcom_ctxt user_elt_start(_ELT_PARAMS_) case T_source_description: ADDFUNC2(source_description,user_data)(ctxt, data); break; default: - UNEXPECTED_CONTEXT(ctxt->ctxt_type); + UNEXPECTED_CONTEXT(ctxt_type(ctxt)); } - result = make_gom_ctxt(elt, ctxt->obj_type, ctxt->ctxt_ptr); + result = dup_gom_ctxt(ctxt, elt); } } } @@ -241,12 +241,27 @@ Gedcom_ctxt user_elt_start(_ELT_PARAMS_) return (Gedcom_ctxt)result; } +DEFINE_SUB_MAKEFUNC(user_data) +DEFINE_SUB_ADDFUNC(user_data) +DEFINE_SUB_FINDFUNC(user_data) +DEFINE_SUB_REMOVEFUNC(user_data) +DEFINE_SUB_MOVEFUNC(user_data) + void user_rec_subscribe() { gedcom_subscribe_to_record(REC_USER, user_rec_start, def_rec_end); gedcom_subscribe_to_element(ELT_USER, user_elt_start, def_elt_end); } +void UNREFALLFUNC(user_data)(struct user_data *obj) +{ + if (obj) { + struct user_data* runner; + for (runner = obj; runner; runner = runner->next) + unref_xref_value(runner->xref_value); + } +} + void CLEANFUNC(user_data)(struct user_data* data) { if (data) { @@ -255,6 +270,14 @@ void CLEANFUNC(user_data)(struct user_data* data) } } +void UNREFALLFUNC(user_rec)(struct user_rec *obj) +{ + if (obj) { + unref_xref_value(obj->xref_value); + UNREFALLFUNC(user_data)(obj->extra); + } +} + void CLEANFUNC(user_rec)(struct user_rec* rec) { if (rec) { @@ -300,13 +323,14 @@ int write_user_data(Gedcom_write_hndl hndl, struct user_data* data) if (!data) return 1; - for (obj = data; data; data = data->next) { + for (obj = data; obj; obj = obj->next) { if (obj->xref_value) result |= gedcom_write_user_xref(hndl, obj->level, obj->tag, NULL, obj->xref_value); - else + else { result |= gedcom_write_user_str(hndl, obj->level, obj->tag, NULL, obj->str_value); + } } return result; }