diff options
author | Ulrich Drepper <drepper@redhat.com> | 2000-01-05 07:47:25 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2000-01-05 07:47:25 +0000 |
commit | 72c743750c2a76df3611aa9a77ba72edefa2fb88 (patch) | |
tree | 7c3d82137a6a8ef9a830341c8fff007133fa9bd0 /locale | |
parent | f4aa71f4250923db875eb7df2d990020e1f5e2a3 (diff) | |
download | glibc-72c743750c2a76df3611aa9a77ba72edefa2fb88.tar glibc-72c743750c2a76df3611aa9a77ba72edefa2fb88.tar.gz glibc-72c743750c2a76df3611aa9a77ba72edefa2fb88.tar.bz2 glibc-72c743750c2a76df3611aa9a77ba72edefa2fb88.zip |
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.
Diffstat (limited to 'locale')
-rw-r--r-- | locale/findlocale.c | 15 | ||||
-rw-r--r-- | locale/programs/stringtrans.c | 145 | ||||
-rw-r--r-- | locale/programs/stringtrans.h | 38 | ||||
-rw-r--r-- | locale/setlocale.c | 6 |
4 files changed, 10 insertions, 194 deletions
diff --git a/locale/findlocale.c b/locale/findlocale.c index 9cb22068f7..979b90fe88 100644 --- a/locale/findlocale.c +++ b/locale/findlocale.c @@ -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); diff --git a/locale/programs/stringtrans.c b/locale/programs/stringtrans.c deleted file mode 100644 index b810129678..0000000000 --- a/locale/programs/stringtrans.c +++ /dev/null @@ -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; -} diff --git a/locale/programs/stringtrans.h b/locale/programs/stringtrans.h deleted file mode 100644 index 2237032f89..0000000000 --- a/locale/programs/stringtrans.h +++ /dev/null @@ -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 */ diff --git a/locale/setlocale.c b/locale/setlocale.c index 1fdc94ff5b..0bf9eeef7b 100644 --- a/locale/setlocale.c +++ b/locale/setlocale.c @@ -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); |