summary refs log tree commit diff
path: root/intl/bindtextdom.c
diff options
context:
space:
mode:
Diffstat (limited to 'intl/bindtextdom.c')
-rw-r--r--intl/bindtextdom.c92
1 files changed, 31 insertions, 61 deletions
diff --git a/intl/bindtextdom.c b/intl/bindtextdom.c
index c3624961a8..29a1b12e9f 100644
--- a/intl/bindtextdom.c
+++ b/intl/bindtextdom.c
@@ -1,20 +1,18 @@
 /* Implementation of the bindtextdomain(3) function
    Copyright (C) 1995-2014 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
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
+   This program is free software: you can redistribute it and/or modify
+   it under the terms of the GNU Lesser General Public License as published by
+   the Free Software Foundation; either version 2.1 of the License, or
+   (at your option) any later version.
 
-   The GNU C Library is distributed in the hope that it will be useful,
+   This program 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
-   Lesser General Public License for more details.
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU Lesser General Public License for more details.
 
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <http://www.gnu.org/licenses/>.  */
+   You should have received a copy of the GNU Lesser General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #ifdef HAVE_CONFIG_H
 # include <config.h>
@@ -24,29 +22,21 @@
 #include <stdlib.h>
 #include <string.h>
 
+#include "gettextP.h"
 #ifdef _LIBC
 # include <libintl.h>
 #else
 # include "libgnuintl.h"
 #endif
-#include "gettextP.h"
 
+/* Handle multi-threaded applications.  */
 #ifdef _LIBC
-/* We have to handle multi-threaded applications.  */
 # include <bits/libc-lock.h>
+# define gl_rwlock_define __libc_rwlock_define
+# define gl_rwlock_wrlock __libc_rwlock_wrlock
+# define gl_rwlock_unlock __libc_rwlock_unlock
 #else
-/* Provide dummy implementation if this is outside glibc.  */
-# define __libc_rwlock_define(CLASS, NAME)
-# define __libc_rwlock_wrlock(NAME)
-# define __libc_rwlock_unlock(NAME)
-#endif
-
-/* The internal variables in the standalone libintl.a must have different
-   names than the internal variables in GNU libc, otherwise programs
-   using libintl.a cannot be linked statically.  */
-#if !defined _LIBC
-# define _nl_default_dirname libintl_nl_default_dirname
-# define _nl_domain_bindings libintl_nl_domain_bindings
+# include "lock.h"
 #endif
 
 /* Some compilers, like SunOS4 cc, don't have offsetof in <stddef.h>.  */
@@ -56,17 +46,8 @@
 
 /* @@ end of prolog @@ */
 
-/* Contains the default location of the message catalogs.  */
-extern const char _nl_default_dirname[];
-#ifdef _LIBC
-libc_hidden_proto (_nl_default_dirname)
-#endif
-
-/* List with bindings of specific domains.  */
-extern struct binding *_nl_domain_bindings;
-
 /* Lock variable to protect the global data in the gettext implementation.  */
-__libc_rwlock_define (extern, _nl_state_lock attribute_hidden)
+gl_rwlock_define (extern, _nl_state_lock attribute_hidden)
 
 
 /* Names for the libintl functions are a problem.  They must not clash
@@ -84,11 +65,6 @@ __libc_rwlock_define (extern, _nl_state_lock attribute_hidden)
 # define BIND_TEXTDOMAIN_CODESET libintl_bind_textdomain_codeset
 #endif
 
-/* Prototypes for local functions.  */
-static void set_binding_values PARAMS ((const char *domainname,
-					const char **dirnamep,
-					const char **codesetp));
-
 /* Specifies the directory name *DIRNAMEP and the output codeset *CODESETP
    to be used for the DOMAINNAME message catalog.
    If *DIRNAMEP or *CODESETP is NULL, the corresponding attribute is not
@@ -96,10 +72,8 @@ static void set_binding_values PARAMS ((const char *domainname,
    If DIRNAMEP or CODESETP is NULL, the corresponding attribute is neither
    modified nor returned.  */
 static void
-set_binding_values (domainname, dirnamep, codesetp)
-     const char *domainname;
-     const char **dirnamep;
-     const char **codesetp;
+set_binding_values (const char *domainname,
+		    const char **dirnamep, const char **codesetp)
 {
   struct binding *binding;
   int modified;
@@ -114,7 +88,7 @@ set_binding_values (domainname, dirnamep, codesetp)
       return;
     }
 
-  __libc_rwlock_wrlock (_nl_state_lock);
+  gl_rwlock_wrlock (_nl_state_lock);
 
   modified = 0;
 
@@ -158,12 +132,12 @@ set_binding_values (domainname, dirnamep, codesetp)
 #else
 		      size_t len = strlen (dirname) + 1;
 		      result = (char *) malloc (len);
-		      if (__glibc_likely (result != NULL))
+		      if (__builtin_expect (result != NULL, 1))
 			memcpy (result, dirname, len);
 #endif
 		    }
 
-		  if (__glibc_likely (result != NULL))
+		  if (__builtin_expect (result != NULL, 1))
 		    {
 		      if (binding->dirname != _nl_default_dirname)
 			free (binding->dirname);
@@ -196,11 +170,11 @@ set_binding_values (domainname, dirnamep, codesetp)
 #else
 		  size_t len = strlen (codeset) + 1;
 		  result = (char *) malloc (len);
-		  if (__glibc_likely (result != NULL))
+		  if (__builtin_expect (result != NULL, 1))
 		    memcpy (result, codeset, len);
 #endif
 
-		  if (__glibc_likely (result != NULL))
+		  if (__builtin_expect (result != NULL, 1))
 		    {
 		      free (binding->codeset);
 
@@ -228,7 +202,7 @@ set_binding_values (domainname, dirnamep, codesetp)
       struct binding *new_binding =
 	(struct binding *) malloc (offsetof (struct binding, domainname) + len);
 
-      if (__glibc_unlikely (new_binding == NULL))
+      if (__builtin_expect (new_binding == NULL, 0))
 	goto failed;
 
       memcpy (new_binding->domainname, domainname, len);
@@ -249,12 +223,12 @@ set_binding_values (domainname, dirnamep, codesetp)
 		  char *result;
 #if defined _LIBC || defined HAVE_STRDUP
 		  result = strdup (dirname);
-		  if (__glibc_unlikely (result == NULL))
+		  if (__builtin_expect (result == NULL, 0))
 		    goto failed_dirname;
 #else
 		  size_t len = strlen (dirname) + 1;
 		  result = (char *) malloc (len);
-		  if (__glibc_unlikely (result == NULL))
+		  if (__builtin_expect (result == NULL, 0))
 		    goto failed_dirname;
 		  memcpy (result, dirname, len);
 #endif
@@ -278,12 +252,12 @@ set_binding_values (domainname, dirnamep, codesetp)
 
 #if defined _LIBC || defined HAVE_STRDUP
 	      result = strdup (codeset);
-	      if (__glibc_unlikely (result == NULL))
+	      if (__builtin_expect (result == NULL, 0))
 		goto failed_codeset;
 #else
 	      size_t len = strlen (codeset) + 1;
 	      result = (char *) malloc (len);
-	      if (__glibc_unlikely (result == NULL))
+	      if (__builtin_expect (result == NULL, 0))
 		goto failed_codeset;
 	      memcpy (result, codeset, len);
 #endif
@@ -335,15 +309,13 @@ set_binding_values (domainname, dirnamep, codesetp)
   if (modified)
     ++_nl_msg_cat_cntr;
 
-  __libc_rwlock_unlock (_nl_state_lock);
+  gl_rwlock_unlock (_nl_state_lock);
 }
 
 /* Specify that the DOMAINNAME message catalog will be found
    in DIRNAME rather than in the system locale data base.  */
 char *
-BINDTEXTDOMAIN (domainname, dirname)
-     const char *domainname;
-     const char *dirname;
+BINDTEXTDOMAIN (const char *domainname, const char *dirname)
 {
   set_binding_values (domainname, &dirname, NULL);
   return (char *) dirname;
@@ -352,9 +324,7 @@ BINDTEXTDOMAIN (domainname, dirname)
 /* Specify the character encoding in which the messages from the
    DOMAINNAME message catalog will be returned.  */
 char *
-BIND_TEXTDOMAIN_CODESET (domainname, codeset)
-     const char *domainname;
-     const char *codeset;
+BIND_TEXTDOMAIN_CODESET (const char *domainname, const char *codeset)
 {
   set_binding_values (domainname, NULL, &codeset);
   return (char *) codeset;