diff options
Diffstat (limited to 'intl')
-rw-r--r-- | intl/bindtextdom.c | 58 | ||||
-rw-r--r-- | intl/dcgettext.c | 11 | ||||
-rw-r--r-- | intl/dgettext.c | 2 | ||||
-rw-r--r-- | intl/explodename.c | 2 | ||||
-rw-r--r-- | intl/finddomain.c | 8 | ||||
-rw-r--r-- | intl/gettext.c | 2 | ||||
-rw-r--r-- | intl/gettext.h | 2 | ||||
-rw-r--r-- | intl/hash-string.h | 2 | ||||
-rw-r--r-- | intl/l10nflist.c | 2 | ||||
-rw-r--r-- | intl/libintl.h | 10 | ||||
-rw-r--r-- | intl/loadinfo.h | 19 | ||||
-rw-r--r-- | intl/loadmsgcat.c | 2 | ||||
-rw-r--r-- | intl/localealias.c | 35 | ||||
-rw-r--r-- | intl/textdomain.c | 5 |
14 files changed, 117 insertions, 43 deletions
diff --git a/intl/bindtextdom.c b/intl/bindtextdom.c index b8f22b6c5d..0540d1e162 100644 --- a/intl/bindtextdom.c +++ b/intl/bindtextdom.c @@ -2,7 +2,7 @@ Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. This file is part of the GNU C Library. Its master source is NOT part of - the C library, however. The master source lives in /gd/gnu/lib. + the C library, however. 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 @@ -65,6 +65,7 @@ extern struct binding *_nl_domain_bindings; prefix. So we have to make a difference here. */ #ifdef _LIBC # define BINDTEXTDOMAIN __bindtextdomain +# define strdup(str) __strdup (str) #else # define BINDTEXTDOMAIN bindtextdomain__ #endif @@ -102,25 +103,36 @@ BINDTEXTDOMAIN (domainname, dirname) if (binding != NULL) { - /* The domain is already bound. Replace the old binding. */ - char *new_dirname; - - if (strcmp (dirname, _nl_default_dirname) == 0) - new_dirname = (char *) _nl_default_dirname; - else + /* The domain is already bound. If the new value and the old + one are equal we simply do nothing. Otherwise replace the + old binding. */ + if (strcmp (dirname, binding->dirname) != 0) { - size_t len = strlen (dirname) + 1; - new_dirname = (char *) malloc (len); - if (new_dirname == NULL) - return NULL; + char *new_dirname; + + if (strcmp (dirname, _nl_default_dirname) == 0) + new_dirname = (char *) _nl_default_dirname; + else + { +#if defined _LIBC || defined HAVE_STRDUP + new_dirname = strdup (dirname); + if (new_dirname == NULL) + return NULL; +#else + size_t len = strlen (dirname) + 1; + new_dirname = (char *) malloc (len); + if (new_dirname == NULL) + return NULL; - memcpy (new_dirname, dirname, len); - } + memcpy (new_dirname, dirname, len); +#endif + } - if (strcmp (binding->dirname, _nl_default_dirname) != 0) - free (binding->dirname); + if (binding->dirname != _nl_default_dirname) + free (binding->dirname); - binding->dirname = new_dirname; + binding->dirname = new_dirname; + } } else { @@ -132,21 +144,33 @@ BINDTEXTDOMAIN (domainname, dirname) if (new_binding == NULL) return NULL; +#if defined _LIBC || defined HAVE_STRDUP + new_binding->domainname = strdup (domainname); + if (new_binding->domainname == NULL) + return NULL; +#else len = strlen (domainname) + 1; new_binding->domainname = (char *) malloc (len); if (new_binding->domainname == NULL) - return NULL; + return NULL; memcpy (new_binding->domainname, domainname, len); +#endif if (strcmp (dirname, _nl_default_dirname) == 0) new_binding->dirname = (char *) _nl_default_dirname; else { +#if defined _LIBC || defined HAVE_STRDUP + new_binding->dirname = strdup (dirname); + if (new_binding->dirname == NULL) + return NULL; +#else len = strlen (dirname) + 1; new_binding->dirname = (char *) malloc (len); if (new_binding->dirname == NULL) return NULL; memcpy (new_binding->dirname, dirname, len); +#endif } /* Now enqueue it. */ diff --git a/intl/dcgettext.c b/intl/dcgettext.c index 152acef9a1..c7540053b2 100644 --- a/intl/dcgettext.c +++ b/intl/dcgettext.c @@ -2,7 +2,7 @@ Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. This file is part of the GNU C Library. Its master source is NOT part of - the C library, however. The master source lives in /gd/gnu/lib. + the C library, however. 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 @@ -298,10 +298,6 @@ DCGETTEXT (domainname, msgid, category) return (char *) msgid; } - /* We don't want libintl.a to depend on any other library. So - we avoid the non-standard function stpcpy. In GNU C Library - this function is available, though. Also allow the symbol - HAVE_STPCPY to be defined. */ stpcpy (stpcpy (strchr (dirname, '\0'), "/"), binding->dirname); } @@ -312,10 +308,7 @@ DCGETTEXT (domainname, msgid, category) xdomainname = (char *) alloca (strlen (categoryname) + strlen (domainname) + 5); ADD_BLOCK (block_list, xdomainname); - /* We don't want libintl.a to depend on any other library. So we - avoid the non-standard function stpcpy. In GNU C Library this - function is available, though. Also allow the symbol HAVE_STPCPY - to be defined. */ + stpcpy (stpcpy (stpcpy (stpcpy (xdomainname, categoryname), "/"), domainname), ".mo"); diff --git a/intl/dgettext.c b/intl/dgettext.c index b63e083162..f7899579f7 100644 --- a/intl/dgettext.c +++ b/intl/dgettext.c @@ -2,7 +2,7 @@ Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. This file is part of the GNU C Library. Its master source is NOT part of - the C library, however. The master source lives in /gd/gnu/lib. + the C library, however. 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 diff --git a/intl/explodename.c b/intl/explodename.c index e938ff234b..ce5b06b288 100644 --- a/intl/explodename.c +++ b/intl/explodename.c @@ -2,7 +2,7 @@ Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995. This file is part of the GNU C Library. Its master source is NOT part of - the C library, however. The master source lives in /gd/gnu/lib. + the C library, however. 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 diff --git a/intl/finddomain.c b/intl/finddomain.c index 27163a6f66..c1ab68bfed 100644 --- a/intl/finddomain.c +++ b/intl/finddomain.c @@ -3,7 +3,7 @@ Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995. This file is part of the GNU C Library. Its master source is NOT part of - the C library, however. The master source lives in /gd/gnu/lib. + the C library, however. 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 @@ -146,12 +146,18 @@ _nl_find_domain (dirname, locale, domainname) alias_value = _nl_expand_alias (locale); if (alias_value != NULL) { +#if defined _LIBC || defined HAVE_STRDUP + locale = strdup (alias_value); + if (locale == NULL) + return NULL; +#else size_t len = strlen (alias_value) + 1; locale = (char *) malloc (len); if (locale == NULL) return NULL; memcpy (locale, alias_value, len); +#endif } /* Now we determine the single parts of the locale name. First diff --git a/intl/gettext.c b/intl/gettext.c index a08bd11d8a..d4687ceb24 100644 --- a/intl/gettext.c +++ b/intl/gettext.c @@ -2,7 +2,7 @@ Copyright (C) 1995, 1997 Free Software Foundation, Inc. This file is part of the GNU C Library. Its master source is NOT part of - the C library, however. The master source lives in /gd/gnu/lib. + the C library, however. 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 diff --git a/intl/gettext.h b/intl/gettext.h index 8d5c121234..804b219ee2 100644 --- a/intl/gettext.h +++ b/intl/gettext.h @@ -2,7 +2,7 @@ Copyright (C) 1995, 1997 Free Software Foundation, Inc. This file is part of the GNU C Library. Its master source is NOT part of - the C library, however. The master source lives in /gd/gnu/lib. + the C library, however. 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 diff --git a/intl/hash-string.h b/intl/hash-string.h index 7212eb0254..8b675c10e4 100644 --- a/intl/hash-string.h +++ b/intl/hash-string.h @@ -2,7 +2,7 @@ Copyright (C) 1995, 1997 Free Software Foundation, Inc. This file is part of the GNU C Library. Its master source is NOT part of - the C library, however. The master source lives in /gd/gnu/lib. + the C library, however. 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 diff --git a/intl/l10nflist.c b/intl/l10nflist.c index bda2105ac7..640b932b01 100644 --- a/intl/l10nflist.c +++ b/intl/l10nflist.c @@ -2,7 +2,7 @@ Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995. This file is part of the GNU C Library. Its master source is NOT part of - the C library, however. The master source lives in /gd/gnu/lib. + the C library, however. 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 diff --git a/intl/libintl.h b/intl/libintl.h index 86b44650e8..2c8e8a49eb 100644 --- a/intl/libintl.h +++ b/intl/libintl.h @@ -1,10 +1,10 @@ -/* libintl.h -- Message catalogs for internationalization. - Copyright (C) 1995, 1996 Free Software Foundation, Inc. +/* Message catalogs for internationalization. + Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995. This file is derived from the file libgettext.h in the GNU gettext package. This file is part of the GNU C Library. Its master source is NOT part of - the C library, however. The master source lives in /gd/gnu/lib. + the C library, however. 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 @@ -71,8 +71,8 @@ extern char *__bindtextdomain __P ((__const char *__domainname, #if defined __OPTIMIZE__ /* We need NULL for `gettext'. */ -#define __need_NULL -#include <stddef.h> +# define __need_NULL +# include <stddef.h> /* We need LC_MESSAGES for `dgettext'. */ # include <locale.h> diff --git a/intl/loadinfo.h b/intl/loadinfo.h index c67c2eb2e8..274066764c 100644 --- a/intl/loadinfo.h +++ b/intl/loadinfo.h @@ -1,3 +1,22 @@ +/* Copyright (C) 1996, 1997 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper <drepper@cygnus.com>, 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 PARAMS # if __STDC__ # define PARAMS(args) args diff --git a/intl/loadmsgcat.c b/intl/loadmsgcat.c index 3fe8f69cdd..f4352d00eb 100644 --- a/intl/loadmsgcat.c +++ b/intl/loadmsgcat.c @@ -2,7 +2,7 @@ Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. This file is part of the GNU C Library. Its master source is NOT part of - the C library, however. The master source lives in /gd/gnu/lib. + the C library, however. 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 diff --git a/intl/localealias.c b/intl/localealias.c index 4547873414..99fcfa511f 100644 --- a/intl/localealias.c +++ b/intl/localealias.c @@ -2,7 +2,7 @@ Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. This file is part of the GNU C Library. Its master source is NOT part of - the C library, however. The master source lives in /gd/gnu/lib. + the C library, however. 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 @@ -82,6 +82,12 @@ void free (); because some ANSI C functions will require linking with this object file and the name space must not be polluted. */ # define strcasecmp __strcasecmp +# define strdup __strdup + +/* We need locking here since we can be called from different palces. */ +# include <libc-lock.h> + +__libc_lock_define_initialized (static, lock); #endif @@ -146,8 +152,13 @@ _nl_expand_alias (name) { static const char *locale_alias_path = LOCALE_ALIAS_PATH; struct alias_map *retval; + const char *result = NULL; size_t added; +#ifdef _LIBC + __libc_lock_lock (lock); +#endif + do { struct alias_map item; @@ -165,7 +176,10 @@ _nl_expand_alias (name) /* We really found an alias. Return the value. */ if (retval != NULL) - return retval->value; + { + result = retval->value; + break; + } /* Perhaps we can find another alias file. */ added = 0; @@ -186,7 +200,11 @@ _nl_expand_alias (name) } while (added != 0); - return NULL; +#ifdef _LIBC + __libc_lock_unlock (lock); +#endif + + return result; } @@ -274,7 +292,15 @@ read_alias_file (fname, fname_len) if (nmap >= maxmap) extend_alias_table (); - /* We cannot depend on strdup available in the libc. Sigh! */ +#if defined _LIBC || defined HAVE_STRDUP + map[nmap].alias = strdup (alias); + map[nmap].value = strdup (value); + if (map[nmap].alias == NULL || map[nmap].value == NULL) + { + FREE_BLOCKS (block_list); + return added; + } +#else len = strlen (alias) + 1; tp = (char *) malloc (len); if (tp == NULL) @@ -294,6 +320,7 @@ read_alias_file (fname, fname_len) } memcpy (tp, value, len); map[nmap].value = tp; +#endif ++nmap; ++added; diff --git a/intl/textdomain.c b/intl/textdomain.c index bad9d166c0..116419dd12 100644 --- a/intl/textdomain.c +++ b/intl/textdomain.c @@ -57,6 +57,7 @@ extern const char *_nl_current_default_domain; prefix. So we have to make a difference here. */ #ifdef _LIBC # define TEXTDOMAIN __textdomain +# define strdup(str) __strdup (str) #else # define TEXTDOMAIN textdomain__ #endif @@ -85,11 +86,15 @@ TEXTDOMAIN (domainname) /* If the following malloc fails `_nl_current_default_domain' will be NULL. This value will be returned and so signals we are out of core. */ +#if defined _LIBC || defined HAVE_STRDUP + _nl_current_default_domain = strdup (domainname); +#else size_t len = strlen (domainname) + 1; char *cp = (char *) malloc (len); if (cp != NULL) memcpy (cp, domainname, len); _nl_current_default_domain = cp; +#endif } if (old != _nl_default_default_domain) |