Remove superfluous printf statement.
[gedcom-parse.git] / gedcom / encoding.c
index d306dfa7b347627b401f9e7e2308035db39cef2d..94d58d9603cad92fc99c034050a0130e607d7fa2 100644 (file)
 #include <iconv.h>
 #include <search.h>
 #include <stdio.h>
+#include <limits.h>
+#include <stdlib.h>
 #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);
-    }
   }
 }