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"
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