static gboolean billterm_guid_handler (xmlNodePtr node, gpointer billterm_pdata) { struct billterm_pdata *pdata = billterm_pdata; GncGUID *guid; GncBillTerm *term; guid = dom_tree_to_guid(node); g_return_val_if_fail (guid, FALSE); term = gncBillTermLookup (pdata->book, guid); if (term) { gncBillTermDestroy (pdata->term); pdata->term = term; gncBillTermBeginEdit (term); } else { gncBillTermSetGUID(pdata->term, guid); } g_free(guid); return TRUE; }
GncBillTerm * gnc_billterm_xml_find_or_create(QofBook *book, GncGUID *guid) { GncBillTerm *term; g_return_val_if_fail(book, NULL); g_return_val_if_fail(guid, NULL); term = gncBillTermLookup(book, guid); DEBUG("looking for billterm %s, found %p", guid_to_string(guid), term); if (!term) { term = gncBillTermCreate(book); gncBillTermBeginEdit(term); gncBillTermSetGUID(term, guid); gncBillTermCommitEdit(term); DEBUG("Created term: %p", term); } else gncBillTermDecRef(term); return term; }
static gboolean set_parent_child (xmlNodePtr node, struct billterm_pdata *pdata, void (*func)(GncBillTerm *, GncBillTerm *)) { GncGUID *guid; GncBillTerm *term; guid = dom_tree_to_guid(node); g_return_val_if_fail (guid, FALSE); term = gncBillTermLookup (pdata->book, guid); if (!term) { term = gncBillTermCreate (pdata->book); gncBillTermBeginEdit (term); gncBillTermSetGUID (term, guid); gncBillTermCommitEdit (term); } g_free (guid); g_return_val_if_fail (term, FALSE); func (pdata->term, term); return TRUE; }