Cleaned up error handling on dates.
[gedcom-parse.git] / gom / lds_event.c
index c49872973ee2109f853cf90c04ea3c94a154881a..6a7be358df5267a88948c5eeeae7399800b8f73a 100644 (file)
@@ -41,12 +41,8 @@ Gedcom_ctxt sub_lds_event_start(_ELT_PARAMS_)
   if (! ctxt)
     NO_CONTEXT;
   else {
-    struct lds_event *lds_evt
-      = (struct lds_event*)malloc(sizeof(struct lds_event));
-    if (! lds_evt)
-      MEMORY_ERROR;
-    else {
-      memset (lds_evt, 0, sizeof(struct lds_event));
+    struct lds_event *lds_evt = SUB_MAKEFUNC(lds_event)();
+    if (lds_evt) {
       lds_evt->event = parsed_tag;
       lds_evt->event_name = strdup(tag);
       if (! lds_evt->event_name) {
@@ -70,6 +66,8 @@ Gedcom_ctxt sub_lds_event_start(_ELT_PARAMS_)
   return (Gedcom_ctxt)result;
 }
 
+DEFINE_SUB_MAKEFUNC(lds_event)
+     
 DEFINE_STRING_CB(lds_event, sub_lds_event_stat_start, date_status)
 DEFINE_DATE_CB(lds_event, sub_lds_event_date_start, date)
 DEFINE_STRING_CB(lds_event, sub_lds_event_temp_start, temple_code)
@@ -108,6 +106,19 @@ void lds_event_subscribe()
                              sub_lds_event_famc_start, def_elt_end);
 }
 
+void UNREFALLFUNC(lds_event)(struct lds_event* obj)
+{
+  if (obj) {
+    struct lds_event* runner;
+    for (runner = obj; runner; runner = runner->next) {
+      unref_xref_value(runner->family);
+      UNREFALLFUNC(source_citation)(runner->citation);
+      UNREFALLFUNC(note_sub)(runner->note);
+      UNREFALLFUNC(user_data)(runner->extra);
+    }
+  }
+}
+
 void CLEANFUNC(lds_event)(struct lds_event* lds)
 {
   if (lds) {