mirror of git://sourceware.org/git/glibc.git
Update.
* locale/programs/stringtrans.c: Removed. * locale/programs/stringtrans.h: Removed. * locale/findlocale.c (_nl_find_locale): Don't try using mmap is _POSIX_MAPPED_FILES is not defined. * locale/findlocale.c (_nl_find_locale): Correct memory allocation for loc_name copy. * locale/setlocale.c (new_composite_name): Use _nl_C_name and _nl_POSIX_name instead of "C" and "POSIX" strings.
This commit is contained in:
parent
f4aa71f425
commit
72c743750c
13
ChangeLog
13
ChangeLog
|
@ -1,8 +1,19 @@
|
|||
2000-01-04 Ulrich Drepper <drepper@cygnus.com>
|
||||
|
||||
* locale/programs/stringtrans.c: Removed.
|
||||
* locale/programs/stringtrans.h: Removed.
|
||||
|
||||
* locale/findlocale.c (_nl_find_locale): Don't try using mmap is
|
||||
_POSIX_MAPPED_FILES is not defined.
|
||||
|
||||
* locale/findlocale.c (_nl_find_locale): Correct memory allocation
|
||||
for loc_name copy.
|
||||
|
||||
* locale/setlocale.c (new_composite_name): Use _nl_C_name and
|
||||
_nl_POSIX_name instead of "C" and "POSIX" strings.
|
||||
|
||||
* ctype/ctype-info.c (__ctype32_tolower): Use _nl_C_CTYPE_tolower.
|
||||
(__ctype32_toupper): Use _nl_C_CTYPE_toupper.
|
||||
|
||||
* locale/C-ctype.c (_nl_C_LC_CTYPE_tolower32): Removed. We can
|
||||
reuse the _nl_C_LC_CTYPE_tolower table.
|
||||
(_nl_C_LC_CTYPE_toupper32): Likewise.
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* Copyright (C) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
|
||||
|
||||
|
@ -21,7 +21,9 @@
|
|||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/mman.h>
|
||||
#ifdef _POSIX_MAPPED_FILES
|
||||
# include <sys/mman.h>
|
||||
#endif
|
||||
|
||||
#include "localeinfo.h"
|
||||
|
||||
|
@ -86,7 +88,7 @@ _nl_find_locale (const char *locale_path, size_t locale_path_len,
|
|||
loc_name = (char *) *name;
|
||||
|
||||
/* Make a writable copy of the locale name. */
|
||||
loc_name = __strdup (loc_name);
|
||||
loc_name = strdupa (loc_name);
|
||||
|
||||
/* LOCALE can consist of up to four recognized parts for the XPG syntax:
|
||||
|
||||
|
@ -135,11 +137,6 @@ _nl_find_locale (const char *locale_path, size_t locale_path_len,
|
|||
/* This means we are out of core. */
|
||||
return NULL;
|
||||
}
|
||||
else
|
||||
/* If the addressed locale is already available it should be
|
||||
freed. If we would not do this switching back and force
|
||||
between two locales would slowly eat up all memory. */
|
||||
free ((void *) loc_name);
|
||||
|
||||
/* The space for normalized_codeset is dynamically allocated. Free it. */
|
||||
if (mask & XPG_NORM_CODESET)
|
||||
|
@ -215,6 +212,7 @@ _nl_remove_locale (int locale, struct locale_data *data)
|
|||
/* Free the name. */
|
||||
free ((char *) data->name);
|
||||
|
||||
#ifdef _POSIX_MAPPED_FILES
|
||||
/* Really delete the data. First delete the real data. */
|
||||
if (data->mmaped)
|
||||
{
|
||||
|
@ -227,6 +225,7 @@ _nl_remove_locale (int locale, struct locale_data *data)
|
|||
}
|
||||
}
|
||||
else
|
||||
#endif /* _POSIX_MAPPED_FILES */
|
||||
/* The memory was malloced. */
|
||||
free ((void *) data->filedata);
|
||||
|
||||
|
|
|
@ -1,145 +0,0 @@
|
|||
/* Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1996.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C 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
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#include <assert.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "charset.h"
|
||||
#include "stringtrans.h"
|
||||
|
||||
|
||||
/* Global variable. */
|
||||
enum encoding_method encoding_method = ENC_UCS4;
|
||||
|
||||
|
||||
void *xmalloc (size_t __n);
|
||||
void *xrealloc (void *__p, size_t __n);
|
||||
|
||||
|
||||
#define ADDC(ch) \
|
||||
do \
|
||||
{ \
|
||||
char *cp; \
|
||||
if (bufact + (encoding_method == ENC_UCS4 ? 4 : 1) >= bufmax) \
|
||||
{ \
|
||||
bufmax *= 2; \
|
||||
buf = xrealloc (buf, bufmax); \
|
||||
} \
|
||||
cp = &buf[bufact]; \
|
||||
if (encode_char (ch, &cp) < 0) \
|
||||
{ \
|
||||
free (buf); \
|
||||
return NULL; \
|
||||
} \
|
||||
bufact = cp - buf; \
|
||||
} \
|
||||
while (0)
|
||||
|
||||
|
||||
char *
|
||||
translate_string (char *str, struct charset_t *charset)
|
||||
{
|
||||
char *buf;
|
||||
size_t bufact = 0;
|
||||
size_t bufmax = 56;
|
||||
|
||||
buf = (char *) xmalloc (bufmax);
|
||||
|
||||
while (str[0] != '\0')
|
||||
{
|
||||
char *tp;
|
||||
unsigned int value;
|
||||
|
||||
if (str[0] != '<')
|
||||
{
|
||||
ADDC (*str++);
|
||||
continue;
|
||||
}
|
||||
|
||||
tp = &str[1];
|
||||
while (tp[0] != '\0' && tp[0] != '>')
|
||||
if (tp[0] == '\\')
|
||||
if (tp[1] != '\0')
|
||||
tp += 2;
|
||||
else
|
||||
++tp;
|
||||
else
|
||||
++tp;
|
||||
|
||||
if (tp[0] == '\0')
|
||||
{
|
||||
free (buf);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
value = charset_find_value (&charset->char_table, str + 1,
|
||||
tp - (str + 1));
|
||||
if ((wchar_t) value == ILLEGAL_CHAR_VALUE)
|
||||
{
|
||||
free (buf);
|
||||
return NULL;
|
||||
}
|
||||
else
|
||||
/* Encode string using current method. */
|
||||
ADDC (value);
|
||||
|
||||
str = &tp[1];
|
||||
}
|
||||
|
||||
ADDC ('\0');
|
||||
|
||||
return buf;
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
encode_char (unsigned int value, char **cpp)
|
||||
{
|
||||
switch (encoding_method)
|
||||
{
|
||||
case ENC_UCS1:
|
||||
if (value > 255)
|
||||
return -1;
|
||||
*(*cpp)++ = (char) value;
|
||||
break;
|
||||
|
||||
case ENC_UCS4:
|
||||
#if __BYTE_ORDER == __BIG_ENDIAN
|
||||
*(*cpp)++ = (char) (value >> 24);
|
||||
*(*cpp)++ = (char) ((value >> 16) & 0xff);
|
||||
*(*cpp)++ = (char) ((value >> 8) & 0xff);
|
||||
*(*cpp)++ = (char) (value & 0xff);
|
||||
#else
|
||||
*(*cpp)++ = (char) (value & 0xff);
|
||||
*(*cpp)++ = (char) ((value >>= 8) & 0xff);
|
||||
*(*cpp)++ = (char) ((value >>= 8) & 0xff);
|
||||
*(*cpp)++ = (char) ((value >>= 8) & 0xff);
|
||||
#endif
|
||||
break;
|
||||
|
||||
default:
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
|
@ -1,38 +0,0 @@
|
|||
/* Copyright (C) 1996, 1997 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1996.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C 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
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#ifndef _TRANSLATE_H
|
||||
#define _TRANSLATE_H 1
|
||||
|
||||
enum encoding_method
|
||||
{
|
||||
ENC_UCS1,
|
||||
ENC_UCS4
|
||||
};
|
||||
|
||||
|
||||
extern enum encoding_method encoding_method;
|
||||
|
||||
|
||||
char *translate_string (char *__str, struct charset_t *__charset);
|
||||
|
||||
int encode_char (unsigned int __value, char **__cpp);
|
||||
|
||||
|
||||
#endif /* translate.h */
|
|
@ -1,4 +1,4 @@
|
|||
/* Copyright (C) 1991, 92, 95, 96, 97, 98, 99 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1991, 92, 95-99, 2000 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
|
@ -154,8 +154,8 @@ new_composite_name (int category, const char *newnames[__LC_LAST])
|
|||
if (same)
|
||||
{
|
||||
/* All the categories use the same name. */
|
||||
if (strcmp (newnames[0], "C") == 0
|
||||
|| strcmp (newnames[0], "POSIX") == 0)
|
||||
if (strcmp (newnames[0], _nl_C_name) == 0
|
||||
|| strcmp (newnames[0], _nl_POSIX_name) == 0)
|
||||
return (char *) _nl_C_name;
|
||||
|
||||
new = malloc (last_len + 1);
|
||||
|
|
Loading…
Reference in New Issue