X-Git-Url: https://git.dlugolecki.net.pl/?a=blobdiff_plain;f=gedcom%2Fencoding.c;h=0c7af44d652b855ed6e71912b430e0484bc7ac4a;hb=e00e467d3d1de49cfc5f261d91ab272cd6fae065;hp=5fdaba57f1588fa88f8498d1c57f06e2cd285c0d;hpb=8831b70a872f0999a1de7082064559956d45171a;p=gedcom-parse.git diff --git a/gedcom/encoding.c b/gedcom/encoding.c index 5fdaba5..0c7af44 100644 --- a/gedcom/encoding.c +++ b/gedcom/encoding.c @@ -1,11 +1,22 @@ -/* This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License as published by * - * the Free Software Foundation; either version 2 of the License, or * - * (at your option) any later version. * - - (C) 2001 by The Genes Development Team - Original author: Peter Verthez (Peter.Verthez@advalvas.be) -*/ +/* Conversion between encodings. + Copyright (C) 2001 The Genes Development Team + This file is part of the Gedcom parser library. + Contributed by Peter Verthez , 2001. + + The Gedcom parser library is free software; you can redistribute it + and/or modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The Gedcom parser library is distributed in the hope that it will be + useful, but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the Gedcom parser library; if not, write to the + Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ /* $Id$ */ /* $Name$ */ @@ -15,11 +26,13 @@ #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; @@ -51,7 +64,7 @@ void add_encoding(char *gedcom_n, char* charwidth, char *iconv_n) strcpy(nodeptr->iconv_name, iconv_n); datum = tsearch(nodeptr, &encoding_mapping, node_compare); if ((datum == NULL) || (*datum != nodeptr)) { - gedcom_warning("Duplicate entry found for encoding '%s', ignoring", + gedcom_warning(_("Duplicate entry found for encoding '%s', ignoring"), gedcom_n); } } @@ -68,7 +81,7 @@ char* get_encoding(char* gedcom_n, ENCODING enc) datum = tfind(&search_node, &encoding_mapping, node_compare); free(buffer); if (datum == NULL) { - gedcom_error("No encoding found for '%s'", gedcom_n); + gedcom_error(_("No encoding found for '%s'"), gedcom_n); return NULL; } else { @@ -84,6 +97,33 @@ 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) { char path[PATH_MAX]; @@ -91,13 +131,13 @@ void init_encodings() in = fopen(path, "r"); } if (in == NULL) { - gedcom_warning("Could not open encoding configuration file '%s'", + 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'", + gedcom_error(_("Line too long in encoding configuration file '%s'"), ENCODING_CONF_FILE); return; } @@ -106,7 +146,7 @@ void init_encodings() add_encoding(gedcom_n, charwidth, iconv_n); } else { - gedcom_error("Missing data in encoding configuration file '%s'", + gedcom_error(_("Missing data in encoding configuration file '%s'"), ENCODING_CONF_FILE); return; } @@ -138,7 +178,7 @@ int open_conv_to_internal(char* fromcode) conv_buf_size = 0; cd_to_internal = iconv_open(INTERNAL_ENCODING, encoding); if (cd_to_internal == (iconv_t) -1) { - gedcom_error("Error opening conversion context for encoding %s: %s", + gedcom_error(_("Error opening conversion context for encoding %s: %s"), encoding, strerror(errno)); } }