X-Git-Url: https://git.dlugolecki.net.pl/?a=blobdiff_plain;f=gedcom%2Fencoding.c;h=94d58d9603cad92fc99c034050a0130e607d7fa2;hb=4740927403892701279eff7a2b69de67f96bb2f0;hp=d306dfa7b347627b401f9e7e2308035db39cef2d;hpb=8093e53a57e174b019f07760f5bf815271ceee9b;p=gedcom-parse.git diff --git a/gedcom/encoding.c b/gedcom/encoding.c index d306dfa..94d58d9 100644 --- a/gedcom/encoding.c +++ b/gedcom/encoding.c @@ -14,11 +14,14 @@ #include #include #include +#include +#include #include "gedcom_internal.h" #include "encoding.h" #define INTERNAL_ENCODING "UTF8" #define ENCODING_CONF_FILE "gedcom.enc" +#define GCONV_SEARCH_PATH "GCONV_PATH" #define MAXBUF 255 static iconv_t cd_to_internal = (iconv_t) -1; @@ -83,8 +86,44 @@ void init_encodings() char gedcom_n[MAXBUF + 1]; char charwidth[MAXBUF + 1]; char iconv_n[MAXBUF + 1]; + char *gconv_path; + + /* Add gedcom data directory to gconv search path */ + gconv_path = getenv(GCONV_SEARCH_PATH); + if (gconv_path == NULL || strstr(gconv_path, PKGDATADIR) == NULL) { + char *new_gconv_path; + if (gconv_path == NULL) { + new_gconv_path = (char *)malloc(strlen(GCONV_SEARCH_PATH) + + strlen(PKGDATADIR) + + 2); + sprintf(new_gconv_path, "%s=%s", GCONV_SEARCH_PATH, PKGDATADIR); + } + else { + new_gconv_path = (char *)malloc(strlen(GCONV_SEARCH_PATH) + + strlen(gconv_path) + + strlen(PKGDATADIR) + + 3); + sprintf(new_gconv_path, "%s=%s:%s", + GCONV_SEARCH_PATH, gconv_path, PKGDATADIR); + } + if (putenv(new_gconv_path) != 0) { + gedcom_warning("Failed updating environment variable %s", + GCONV_SEARCH_PATH); + } + } + + /* Open gedcom configuration file and read */ in = fopen(ENCODING_CONF_FILE, "r"); - if (in != NULL) { + if (in == NULL) { + char path[PATH_MAX]; + sprintf(path, "%s/%s", PKGDATADIR, ENCODING_CONF_FILE); + in = fopen(path, "r"); + } + if (in == NULL) { + gedcom_warning("Could not open encoding configuration file '%s'", + ENCODING_CONF_FILE); + } + else { while (fgets(buffer, sizeof(buffer), in) != NULL) { if (buffer[strlen(buffer) - 1] != '\n') { gedcom_error("Line too long in encoding configuration file '%s'", @@ -104,10 +143,6 @@ void init_encodings() } fclose(in); } - else { - gedcom_warning("Could not open encoding configuration file '%s'", - ENCODING_CONF_FILE); - } } }