GET_REC_BY_XREF(source, XREF_SOUR, gom_get_source_by_xref)
NULL_CB(source, sour_data_start)
STRING_CB(source, sour_data_agnc_start, data.agency)
-STRING_CB(source, sour_auth_start, author)
-STRING_CB(source, sour_titl_start, title)
+NULL_CB(source, sour_auth_start) /* value set by end callback */
+STRING_END_CB(source, sour_auth_end, author)
+NULL_CB(source, sour_titl_start) /* value set by end callback */
+STRING_END_CB(source, sour_titl_end, title)
STRING_CB(source, sour_abbr_start, abbreviation)
-STRING_CB(source, sour_publ_start, publication)
-STRING_CB(source, sour_text_start, text)
+NULL_CB(source, sour_publ_start) /* value set by end callback */
+STRING_END_CB(source, sour_publ_end, publication)
+NULL_CB(source, sour_text_start) /* value set by end callback */
+STRING_END_CB(source, sour_text_end, text)
XREF_CB(source, sour_repo_start, repository.link, make_repository_record)
void source_subscribe()
gedcom_subscribe_to_element(ELT_SOUR_DATA, sour_data_start, def_elt_end);
gedcom_subscribe_to_element(ELT_SOUR_DATA_AGNC, sour_data_agnc_start,
def_elt_end);
- gedcom_subscribe_to_element(ELT_SOUR_AUTH, sour_auth_start, def_elt_end);
- gedcom_subscribe_to_element(ELT_SOUR_TITL, sour_titl_start, def_elt_end);
+ gedcom_subscribe_to_element(ELT_SOUR_AUTH, sour_auth_start, sour_auth_end);
+ gedcom_subscribe_to_element(ELT_SOUR_TITL, sour_titl_start, sour_titl_end);
gedcom_subscribe_to_element(ELT_SOUR_ABBR, sour_abbr_start, def_elt_end);
- gedcom_subscribe_to_element(ELT_SOUR_PUBL, sour_publ_start, def_elt_end);
- gedcom_subscribe_to_element(ELT_SOUR_TEXT, sour_text_start, def_elt_end);
+ gedcom_subscribe_to_element(ELT_SOUR_PUBL, sour_publ_start, sour_publ_end);
+ gedcom_subscribe_to_element(ELT_SOUR_TEXT, sour_text_start, sour_text_end);
gedcom_subscribe_to_element(ELT_SUB_REPO, sour_repo_start, def_elt_end);
}
void source_add_event(Gom_ctxt ctxt, struct source_event* evt)
{
struct source *sour = SAFE_CTXT_CAST(source, ctxt);
- LINK_CHAIN_ELT(source_event, sour->data.event, evt)
+ if (sour)
+ LINK_CHAIN_ELT(source_event, sour->data.event, evt);
}
void source_add_note_to_data(Gom_ctxt ctxt, struct note_sub* note)
{
struct source *sour = SAFE_CTXT_CAST(source, ctxt);
- LINK_CHAIN_ELT(note_sub, sour->data.note, note)
+ if (sour)
+ LINK_CHAIN_ELT(note_sub, sour->data.note, note);
}
void source_add_note_to_repo(Gom_ctxt ctxt, struct note_sub* note)
{
struct source *sour = SAFE_CTXT_CAST(source, ctxt);
- LINK_CHAIN_ELT(note_sub, sour->repository.note, note)
+ if (sour)
+ LINK_CHAIN_ELT(note_sub, sour->repository.note, note);
}
void source_add_description(Gom_ctxt ctxt, struct source_description* desc)
{
struct source *sour = SAFE_CTXT_CAST(source, ctxt);
- LINK_CHAIN_ELT(source_description, sour->repository.description, desc)
-}
-
-void source_add_to_value(NL_TYPE type, Gom_ctxt ctxt, char* str)
-{
- struct source *sour = SAFE_CTXT_CAST(source, ctxt);
- switch (ctxt->ctxt_type) {
- case ELT_SOUR_AUTH:
- sour->author = concat_strings (type, sour->author, str); break;
- case ELT_SOUR_TITL:
- sour->title = concat_strings (type, sour->title, str); break;
- case ELT_SOUR_PUBL:
- sour->publication = concat_strings (type, sour->publication, str); break;
- case ELT_SOUR_TEXT:
- sour->text = concat_strings (type, sour->text, str); break;
- default:
- UNEXPECTED_CONTEXT(ctxt->ctxt_type);
- }
+ if (sour)
+ LINK_CHAIN_ELT(source_description, sour->repository.description, desc);
}
void source_add_mm_link(Gom_ctxt ctxt, struct multimedia_link* link)
{
struct source *sour = SAFE_CTXT_CAST(source, ctxt);
- LINK_CHAIN_ELT(multimedia_link, sour->mm_link, link)
+ if (sour)
+ LINK_CHAIN_ELT(multimedia_link, sour->mm_link, link);
}
void source_add_note(Gom_ctxt ctxt, struct note_sub* note)
{
struct source *sour = SAFE_CTXT_CAST(source, ctxt);
- LINK_CHAIN_ELT(note_sub, sour->note, note)
+ if (sour)
+ LINK_CHAIN_ELT(note_sub, sour->note, note);
}
void source_add_user_ref(Gom_ctxt ctxt, struct user_ref_number* ref)
{
struct source *sour = SAFE_CTXT_CAST(source, ctxt);
- LINK_CHAIN_ELT(user_ref_number, sour->ref, ref)
+ if (sour)
+ LINK_CHAIN_ELT(user_ref_number, sour->ref, ref);
}
-void source_set_record_id(Gom_ctxt ctxt, char *rin)
+void source_set_record_id(Gom_ctxt ctxt, const char *rin)
{
struct source *sour = SAFE_CTXT_CAST(source, ctxt);
- sour->record_id = strdup(rin);
+ if (sour) {
+ sour->record_id = strdup(rin);
+ if (! sour->record_id) MEMORY_ERROR;
+ }
}
void source_set_change_date(Gom_ctxt ctxt, struct change_date* chan)
{
struct source *sour = SAFE_CTXT_CAST(source, ctxt);
- sour->change_date = chan;
+ if (sour)
+ sour->change_date = chan;
}
void source_add_user_data(Gom_ctxt ctxt, struct user_data* data)
{
struct source *obj = SAFE_CTXT_CAST(source, ctxt);
- LINK_CHAIN_ELT(user_data, obj->extra, data)
+ if (obj)
+ LINK_CHAIN_ELT(user_data, obj->extra, data);
}
void source_cleanup(struct source* sour)
{
- SAFE_FREE(sour->xrefstr);
- DESTROY_CHAIN_ELTS(source_event, sour->data.event, source_event_cleanup)
- SAFE_FREE(sour->data.agency)
- DESTROY_CHAIN_ELTS(note_sub, sour->data.note, note_sub_cleanup)
- SAFE_FREE(sour->author);
- SAFE_FREE(sour->title);
- SAFE_FREE(sour->abbreviation);
- SAFE_FREE(sour->publication);
- SAFE_FREE(sour->text);
- DESTROY_CHAIN_ELTS(note_sub, sour->repository.note, note_sub_cleanup)
- DESTROY_CHAIN_ELTS(source_description, sour->repository.description,
- source_description_cleanup)
- DESTROY_CHAIN_ELTS(multimedia_link, sour->mm_link, multimedia_link_cleanup)
- DESTROY_CHAIN_ELTS(note_sub, sour->note, note_sub_cleanup)
- DESTROY_CHAIN_ELTS(user_ref_number, sour->ref, user_ref_cleanup)
- SAFE_FREE(sour->record_id);
- change_date_cleanup(sour->change_date);
- DESTROY_CHAIN_ELTS(user_data, sour->extra, user_data_cleanup)
+ if (sour) {
+ SAFE_FREE(sour->xrefstr);
+ DESTROY_CHAIN_ELTS(source_event, sour->data.event, source_event_cleanup);
+ SAFE_FREE(sour->data.agency)
+ DESTROY_CHAIN_ELTS(note_sub, sour->data.note, note_sub_cleanup);
+ SAFE_FREE(sour->author);
+ SAFE_FREE(sour->title);
+ SAFE_FREE(sour->abbreviation);
+ SAFE_FREE(sour->publication);
+ SAFE_FREE(sour->text);
+ DESTROY_CHAIN_ELTS(note_sub, sour->repository.note, note_sub_cleanup);
+ DESTROY_CHAIN_ELTS(source_description, sour->repository.description,
+ source_description_cleanup);
+ DESTROY_CHAIN_ELTS(multimedia_link, sour->mm_link,multimedia_link_cleanup);
+ DESTROY_CHAIN_ELTS(note_sub, sour->note, note_sub_cleanup);
+ DESTROY_CHAIN_ELTS(user_ref_number, sour->ref, user_ref_cleanup);
+ SAFE_FREE(sour->record_id);
+ change_date_cleanup(sour->change_date);
+ DESTROY_CHAIN_ELTS(user_data, sour->extra, user_data_cleanup);
+ }
}
void sources_cleanup()
return gom_first_source;
}
-struct source* make_source_record(char* xrefstr)
+struct source* make_source_record(const char* xrefstr)
{
- struct source* src;
+ struct source* src = NULL;
MAKE_CHAIN_ELT(source, gom_first_source, src);
- src->xrefstr = strdup(xrefstr);
+ if (src) {
+ src->xrefstr = strdup(xrefstr);
+ if (! src->xrefstr) MEMORY_ERROR;
+ }
return src;
}