aboutsummaryrefslogtreecommitdiff
path: root/locale
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2000-01-05 07:47:25 +0000
committerUlrich Drepper <drepper@redhat.com>2000-01-05 07:47:25 +0000
commit72c743750c2a76df3611aa9a77ba72edefa2fb88 (patch)
tree7c3d82137a6a8ef9a830341c8fff007133fa9bd0 /locale
parentf4aa71f4250923db875eb7df2d990020e1f5e2a3 (diff)
downloadglibc-72c743750c2a76df3611aa9a77ba72edefa2fb88.zip
glibc-72c743750c2a76df3611aa9a77ba72edefa2fb88.tar.gz
glibc-72c743750c2a76df3611aa9a77ba72edefa2fb88.tar.bz2
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.c15
-rw-r--r--locale/programs/stringtrans.c145
-rw-r--r--locale/programs/stringtrans.h38
-rw-r--r--locale/setlocale.c6
4 files changed, 10 insertions, 194 deletions
diff --git a/locale/findlocale.c b/locale/findlocale.c
index 9cb2206..979b90f 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 b810129..0000000
--- 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 2237032..0000000
--- 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 1fdc94f..0bf9eee 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);