Added some missing code for LSS.
[gedcom-parse.git] / gom / user_rec.c
index 90ffb0b995549443ce630451fcf7679290dd4f60..4dfd14fba66e59ee85654c39f9d622e7a7b8529a 100644 (file)
@@ -247,6 +247,15 @@ void user_rec_subscribe()
   gedcom_subscribe_to_element(ELT_USER, user_elt_start, def_elt_end);
 }
 
+void UNREFALLFUNC(user_data)(struct user_data *obj)
+{
+  if (obj) {
+    struct user_data* runner;
+    for (runner = obj; runner; runner = runner->next)
+      unref_xref_value(runner->xref_value);
+  }
+}
+
 void CLEANFUNC(user_data)(struct user_data* data)
 {
   if (data) {
@@ -255,6 +264,14 @@ void CLEANFUNC(user_data)(struct user_data* data)
   }
 }
 
+void UNREFALLFUNC(user_rec)(struct user_rec *obj)
+{
+  if (obj) {
+    unref_xref_value(obj->xref_value);
+    UNREFALLFUNC(user_data)(obj->extra);
+  }
+}
+
 void CLEANFUNC(user_rec)(struct user_rec* rec)
 {
   if (rec) {
@@ -300,13 +317,14 @@ int write_user_data(Gedcom_write_hndl hndl, struct user_data* data)
 
   if (!data) return 1;
 
-  for (obj = data; data; data = data->next) {
+  for (obj = data; obj; obj = obj->next) {
     if (obj->xref_value)
       result |= gedcom_write_user_xref(hndl, obj->level, obj->tag, NULL,
                                       obj->xref_value);
-    else
+    else {
       result |= gedcom_write_user_str(hndl, obj->level, obj->tag, NULL,
                                      obj->str_value);
+    }
   }
   return result;
 }