X-Git-Url: https://git.dlugolecki.net.pl/?a=blobdiff_plain;ds=sidebyside;f=gom%2Fmultimedia.c;h=13c8b3eaee6db3953778fcd57bfd7269e01737d1;hb=5b045164f4a11b1f4d709820e784e1ca77b61b3f;hp=4faaf1fb6d98a0b52f28fe507d78ccddcbe1f1a9;hpb=bdf47fdee469d5a1d7ddfd06a0e4b26f3b40b0f4;p=gedcom-parse.git diff --git a/gom/multimedia.c b/gom/multimedia.c index 4faaf1f..13c8b3e 100644 --- a/gom/multimedia.c +++ b/gom/multimedia.c @@ -41,10 +41,9 @@ STRING_CB(multimedia, obje_titl_start, title) NULL_CB(multimedia, obje_blob_start) XREF_CB(multimedia, obje_obje_start, continued, make_multimedia_record) -Gedcom_ctxt obje_blob_cont_start(_ELT_PARAMS_) +void obje_blob_end(_ELT_END_PARAMS_) { - Gom_ctxt ctxt = (Gom_ctxt)parent; - Gom_ctxt result = NULL; + Gom_ctxt ctxt = (Gom_ctxt)self; if (! ctxt) NO_CONTEXT; @@ -52,26 +51,25 @@ Gedcom_ctxt obje_blob_cont_start(_ELT_PARAMS_) struct multimedia *obj = SAFE_CTXT_CAST(multimedia, ctxt); if (obj) { char *str = GEDCOM_STRING(parsed_value); - if (obj->data) { - char *newvalue = concat_strings (WITHOUT_NL, obj->data, str); - if (newvalue) - obj->data = newvalue; - else { - free(obj->data); - obj->data = NULL; - } - } - else - obj->data = strdup(str); - - if (! obj->data) { + char *newvalue = strdup(str); + if (! newvalue) MEMORY_ERROR; - free(obj); - } else - result = make_gom_ctxt(elt, ctxt->obj_type, ctxt->ctxt_ptr); + obj->data = newvalue; } } +} + +Gedcom_ctxt obje_blob_cont_start(_ELT_PARAMS_) +{ + Gom_ctxt ctxt = (Gom_ctxt)parent; + Gom_ctxt result = NULL; + + if (! ctxt) + NO_CONTEXT; + else + result = make_gom_ctxt(elt, ctxt->obj_type, ctxt->ctxt_ptr); + return (Gedcom_ctxt)result; } @@ -80,7 +78,7 @@ void multimedia_subscribe() gedcom_subscribe_to_record(REC_OBJE, obje_start, def_rec_end); gedcom_subscribe_to_element(ELT_OBJE_FORM, obje_form_start, def_elt_end); gedcom_subscribe_to_element(ELT_OBJE_TITL, obje_titl_start, def_elt_end); - gedcom_subscribe_to_element(ELT_OBJE_BLOB, obje_blob_start, def_elt_end); + gedcom_subscribe_to_element(ELT_OBJE_BLOB, obje_blob_start, obje_blob_end); gedcom_subscribe_to_element(ELT_OBJE_BLOB_CONT, obje_blob_cont_start, def_elt_end); gedcom_subscribe_to_element(ELT_OBJE_OBJE, obje_obje_start, def_elt_end); @@ -100,7 +98,7 @@ void multimedia_add_user_ref(Gom_ctxt ctxt, struct user_ref_number* ref) LINK_CHAIN_ELT(user_ref_number, obj->ref, ref); } -void multimedia_set_record_id(Gom_ctxt ctxt, char *rin) +void multimedia_set_record_id(Gom_ctxt ctxt, const char *rin) { struct multimedia *obj = SAFE_CTXT_CAST(multimedia, ctxt); if (obj) { @@ -148,7 +146,7 @@ struct multimedia* gom_get_first_multimedia() return gom_first_multimedia; } -struct multimedia* make_multimedia_record(char* xrefstr) +struct multimedia* make_multimedia_record(const char* xrefstr) { struct multimedia* multi = NULL; MAKE_CHAIN_ELT(multimedia, gom_first_multimedia, multi);