int compat_enabled = 1;
int compatibility = 0;
int compat_at = 0;
-char* default_charset;
+const char* default_charset = "";
#define SUBMITTER_LINK "@__COMPAT__SUBM__@"
#define DEFAULT_SUBMITTER_NAME "Submitter"
#define DEFAULT_GEDCOM_VERS "5.5"
#define DEFAULT_GEDCOM_FORM "LINEAGE-LINKED"
-/* Incompatibily list (with GEDCOM 5.5):
+/* Incompatibility list (with GEDCOM 5.5):
- ftree:
- no submitter record, no submitter link in the header
- no submitter record, no submitter link in the header
- no GEDC field in the header
- no CHAR field in the header
- - TIME field outside of DATE field in the header (will be ignored here)
+ - HEAD.TIME instead of HEAD.DATE.TIME (will be ignored here)
- '@' not written as '@@' in values
+ - lots of missing required values
*/
/* Compatibility handling */
compat_enabled = enable_compat;
}
-void set_compatibility(char* program)
+void set_compatibility(const char* program)
{
+ /* Reinitialize compatibility */
+ compat_at = 0;
+ default_charset = "";
+ compatibility = 0;
+
if (compat_enabled) {
if (! strncmp(program, "ftree", 6)) {
gedcom_warning(_("Enabling compatibility with 'ftree'"));
compatibility = C_FTREE;
- default_charset = "ANSI";
}
else if (! strncmp(program, "LIFELINES", 9)) {
/* Matches "LIFELINES 3.0.2" */
default_charset = "ANSI";
compat_at = 1;
}
- else {
- compatibility = 0;
- }
}
}
{
struct tag_struct ts;
Gedcom_ctxt self1;
+ char* charset;
/* first generate "1 CHAR <DEFAULT_CHAR>" */
ts.string = "CHAR";
ts.value = TAG_CHAR;
- self1 = start_element(ELT_HEAD_CHAR, parent, 1, ts, default_charset,
- GEDCOM_MAKE_STRING(val1, default_charset));
-
- /* close "1 CHAR" */
- end_element(ELT_HEAD_CHAR, parent, self1, NULL);
+
+ /* Must strdup, because default_charset is const char */
+ charset = strdup(default_charset);
+ if (! charset)
+ MEMORY_ERROR;
+ else {
+ self1 = start_element(ELT_HEAD_CHAR, parent, 1, ts, charset,
+ GEDCOM_MAKE_STRING(val1, charset));
+ free(charset);
+
+ /* close "1 CHAR" */
+ end_element(ELT_HEAD_CHAR, parent, self1, NULL);
+ }
if (open_conv_to_internal(default_charset) == 0)
return 1;
else