diff options
author | Claudio Fontana <sick_soul@users.sourceforge.net> | 2005-12-11 03:16:26 +0000 |
---|---|---|
committer | Claudio Fontana <sick_soul@users.sourceforge.net> | 2005-12-11 03:16:26 +0000 |
commit | f882440b3724bcb442f3aaed65316a1671c35db0 (patch) | |
tree | bbc72a9eabe7dedd2c5cecca7b6fac6e77034229 /intl/localcharset.c | |
parent | 80e3f00037547654fc1aca601235936475a319b4 (diff) | |
download | idutils-f882440b3724bcb442f3aaed65316a1671c35db0.tar.gz idutils-f882440b3724bcb442f3aaed65316a1671c35db0.tar.bz2 idutils-f882440b3724bcb442f3aaed65316a1671c35db0.zip |
* updated libintl
Diffstat (limited to 'intl/localcharset.c')
-rw-r--r-- | intl/localcharset.c | 29 |
1 files changed, 20 insertions, 9 deletions
diff --git a/intl/localcharset.c b/intl/localcharset.c index 4865f10..1252f3f 100644 --- a/intl/localcharset.c +++ b/intl/localcharset.c @@ -1,6 +1,6 @@ /* Determine a canonical name for the current locale's character encoding. - Copyright (C) 2000-2003 Free Software Foundation, Inc. + Copyright (C) 2000-2004 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published @@ -14,7 +14,7 @@ You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Written by Bruno Haible <bruno@clisp.org>. */ @@ -73,8 +73,8 @@ # define relocate(pathname) (pathname) #endif -#if defined _WIN32 || defined __WIN32__ || defined __EMX__ || defined __DJGPP__ - /* Win32, OS/2, DOS */ +#if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__ + /* Win32, Cygwin, OS/2, DOS */ # define ISSLASH(C) ((C) == '/' || (C) == '\\') #endif @@ -116,10 +116,16 @@ get_charset_aliases () { #if !(defined VMS || defined WIN32) FILE *fp; - const char *dir = relocate (LIBDIR); + const char *dir; const char *base = "charset.alias"; char *file_name; + /* Make it possible to override the charset.alias location. This is + necessary for running the testsuite before "make install". */ + dir = getenv ("CHARSETALIASDIR"); + if (dir == NULL || dir[0] == '\0') + dir = relocate (LIBDIR); + /* Concatenate dir and base into freshly allocated file_name. */ { size_t dir_len = strlen (dir); @@ -141,15 +147,17 @@ get_charset_aliases () else { /* Parse the file's contents. */ - int c; - char buf1[50+1]; - char buf2[50+1]; char *res_ptr = NULL; size_t res_size = 0; - size_t l1, l2; for (;;) { + int c; + char buf1[50+1]; + char buf2[50+1]; + size_t l1, l2; + char *old_res_ptr; + c = getc (fp); if (c == EOF) break; @@ -170,6 +178,7 @@ get_charset_aliases () break; l1 = strlen (buf1); l2 = strlen (buf2); + old_res_ptr = res_ptr; if (res_size == 0) { res_size = l1 + 1 + l2 + 1; @@ -184,6 +193,8 @@ get_charset_aliases () { /* Out of memory. */ res_size = 0; + if (old_res_ptr != NULL) + free (old_res_ptr); break; } strcpy (res_ptr + res_size - (l2 + 1) - (l1 + 1), buf1); |