More EasyTree compatibility.
[gedcom-parse.git] / t / src / standalone.c
index 9c2228417782ceea1be48ee79ff7cea2b29321dc..887da0ee08d0fb7349a349d2cf860d50e9abd47c 100644 (file)
@@ -30,7 +30,7 @@
 #include <locale.h>
 #include <errno.h>
 #include <iconv.h>
-#include "utf8.h"
+#include "utf8tools.h"
 
 #define BOGUS_FILE_NAME "bogus.ged"
 int total_conv_fails = 0;
@@ -67,7 +67,8 @@ void header_end(Gedcom_rec rec, Gedcom_ctxt self, Gedcom_val parsed_value)
   output(1, "Header end, context is %ld\n", void_ptr_to_int(self));
 }
 
-char family_xreftags[100][255];
+#define MAXFAMILY 100
+char family_xreftags[MAXFAMILY][255];
 int  family_nr = 1;
 
 Gedcom_ctxt family_start(Gedcom_rec rec, int level, Gedcom_val xref, char *tag,
@@ -76,7 +77,9 @@ Gedcom_ctxt family_start(Gedcom_rec rec, int level, Gedcom_val xref, char *tag,
 {
   struct xref_value *xr = GEDCOM_XREF_PTR(xref);
   output(1, "Family start, xref is %s\n", xr->string);
-  strcpy(family_xreftags[family_nr], xr->string);
+  if (family_nr < MAXFAMILY) {
+    strcpy(family_xreftags[family_nr], xr->string);
+  }
   xr->object = (Gedcom_ctxt)int_to_void_ptr(family_nr);
   return (Gedcom_ctxt)int_to_void_ptr(family_nr++);
 }
@@ -104,8 +107,11 @@ Gedcom_ctxt note_start(Gedcom_rec rec, int level, Gedcom_val xref, char *tag,
 
 void family_end(Gedcom_rec rec, Gedcom_ctxt self, Gedcom_val parsed_value)
 {
-  output(1, "Family end, xref is %s\n",
-        family_xreftags[void_ptr_to_int(self)]);
+  char* family_xref = "<NOTSAVED>";
+  int   family_nr = void_ptr_to_int(self);
+  if (family_nr < MAXFAMILY)
+    family_xref = family_xreftags[void_ptr_to_int(self)];
+  output(1, "Family end, xref is %s\n", family_xref);
 }
 
 Gedcom_ctxt submit_start(Gedcom_rec rec, int level, Gedcom_val xref, char *tag,
@@ -317,6 +323,7 @@ int main(int argc, char* argv[])
   setlocale(LC_ALL, "");
   gedcom_set_debug_level(debug_level, NULL);
   gedcom_set_compat_handling(compat_enabled);
+  gedcom_set_compat_options(COMPAT_ALLOW_OUT_OF_CONTEXT);
   gedcom_set_error_handling(mech);
   gedcom_set_message_handler(gedcom_message_handler);
   gedcom_set_default_callback(default_cb);