projects
/
gnulib.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Add, forgotten in last commit.
[gnulib.git]
/
lib
/
localcharset.c
diff --git
a/lib/localcharset.c
b/lib/localcharset.c
index
eb5563d
..
10c69b0
100644
(file)
--- a/
lib/localcharset.c
+++ b/
lib/localcharset.c
@@
-1,6
+1,6
@@
/* Determine a canonical name for the current locale's character encoding.
/* Determine a canonical name for the current locale's character encoding.
- Copyright (C) 2000-200
3
Free Software Foundation, Inc.
+ Copyright (C) 2000-200
4
Free Software Foundation, Inc.
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
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
@@
-14,7
+14,7
@@
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation,
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation,
- Inc., 5
9 Temple Place - Suite 330, Boston, MA 02111-1307
, USA. */
+ Inc., 5
1 Franklin Street, Fifth Floor, Boston, MA 02110-1301
, USA. */
/* Written by Bruno Haible <bruno@clisp.org>. */
/* Written by Bruno Haible <bruno@clisp.org>. */
@@
-72,8
+72,8
@@
# define relocate(pathname) (pathname)
#endif
# 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
# define ISSLASH(C) ((C) == '/' || (C) == '\\')
#endif
@@
-85,7
+85,7
@@
# define ISSLASH(C) ((C) == DIRECTORY_SEPARATOR)
#endif
# define ISSLASH(C) ((C) == DIRECTORY_SEPARATOR)
#endif
-#if
def HAVE
_GETC_UNLOCKED
+#if
HAVE_DECL
_GETC_UNLOCKED
# undef getc
# define getc getc_unlocked
#endif
# undef getc
# define getc getc_unlocked
#endif
@@
-115,10
+115,16
@@
get_charset_aliases ()
{
#if !(defined VMS || defined WIN32)
FILE *fp;
{
#if !(defined VMS || defined WIN32)
FILE *fp;
- const char *dir
= relocate (LIBDIR)
;
+ const char *dir;
const char *base = "charset.alias";
char *file_name;
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);
/* Concatenate dir and base into freshly allocated file_name. */
{
size_t dir_len = strlen (dir);
@@
-140,15
+146,17
@@
get_charset_aliases ()
else
{
/* Parse the file's contents. */
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;
char *res_ptr = NULL;
size_t res_size = 0;
- size_t l1, l2;
for (;;)
{
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;
c = getc (fp);
if (c == EOF)
break;
@@
-169,6
+177,7
@@
get_charset_aliases ()
break;
l1 = strlen (buf1);
l2 = strlen (buf2);
break;
l1 = strlen (buf1);
l2 = strlen (buf2);
+ old_res_ptr = res_ptr;
if (res_size == 0)
{
res_size = l1 + 1 + l2 + 1;
if (res_size == 0)
{
res_size = l1 + 1 + l2 + 1;
@@
-183,6
+192,8
@@
get_charset_aliases ()
{
/* Out of memory. */
res_size = 0;
{
/* 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);
break;
}
strcpy (res_ptr + res_size - (l2 + 1) - (l1 + 1), buf1);