Also write empty CONT lines.
[gedcom-parse.git] / gom / submission.c
index 7e5260f54991e7b9aba53f077bff9912697fc81b..cbdde5624537038d57f5c6845fc830d97168daef 100644 (file)
@@ -32,8 +32,6 @@
 
 struct submission* gom_submission = NULL;
 
-DEFINE_MAKELINKFUNC(submission, XREF_SUBN)
-     
 DEFINE_REC_CB(submission, subn_start)
 DEFINE_XREF_CB(submission, subn_subm_start, submitter, submitter)
 DEFINE_STRING_CB(submission, subn_famf_start, family_file)
@@ -57,7 +55,15 @@ void submission_subscribe()
   gedcom_subscribe_to_element(ELT_SUBN_RIN, subn_rin_start, def_elt_end);  
 }
 
-void submission_cleanup()
+void UNREFALLFUNC(submission)()
+{
+  if (gom_submission) {
+    unref_xref_value(gom_submission->submitter);
+    UNREFALLFUNC(user_data)(gom_submission->extra);
+  }
+}
+
+void CLEANFUNC(submission)()
 {
   if (gom_submission) {
     SAFE_FREE(gom_submission->xrefstr);
@@ -68,8 +74,8 @@ void submission_cleanup()
     SAFE_FREE(gom_submission->ordinance_process_flag);
     SAFE_FREE(gom_submission->record_id);
     DESTROY_CHAIN_ELTS(user_data, gom_submission->extra);
-    SAFE_FREE(gom_submission);
   }
+  SAFE_FREE(gom_submission);
 }
 
 struct submission* gom_get_submission()
@@ -97,8 +103,7 @@ void DESTROYFUNC(submission)()
 {
   if (gom_submission) {
     submission_cleanup();
-    free(gom_submission);
-    gom_submission = NULL;
+    SAFE_FREE(gom_submission);
   }
 }
 
@@ -129,8 +134,10 @@ int DELETEFUNC(submission)()
   int result = 1;
   if (gom_submission) {
     result = gedcom_delete_xref(gom_submission->xrefstr);
-    if (result == 0)
+    if (result == 0) {
+      UNREFALLFUNC(submission)();
       DESTROYFUNC(submission)();
+    }
   }
   return result;
 }