intl-compat.c 4.65 KB
Newer Older
1 2
/* intl-compat.c - Stub functions to call gettext functions from GNU gettext
   Library.
Thomas Roessler's avatar
Thomas Roessler committed
3
   Copyright (C) 1995, 2000, 2001 Software Foundation, Inc.
4

5 6 7 8 9 10 11 12 13 14 15 16 17 18
   This program 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, or (at your option)
   any later version.

   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
   Library General Public License for more details.

   You should have received a copy of the GNU Library General Public
   License along with this program; if not, write to the Free Software
   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
   USA.  */
19 20 21 22 23

#ifdef HAVE_CONFIG_H
# include <config.h>
#endif

Thomas Roessler's avatar
Thomas Roessler committed
24 25
#include "libgnuintl.h"
#include "gettextP.h"
26 27 28

/* @@ end of prolog @@ */

Thomas Roessler's avatar
Thomas Roessler committed
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
/* This file redirects the gettext functions (without prefix or suffix) to
   those defined in the included GNU gettext library (with "__" suffix).
   It is compiled into libintl when the included GNU gettext library is
   configured --with-included-gettext.

   This redirection works also in the case that the system C library or
   the system libintl library contain gettext/textdomain/... functions.
   If it didn't, we would need to add preprocessor level redirections to
   libgnuintl.h of the following form:

#    define gettext gettext__
#    define dgettext dgettext__
#    define dcgettext dcgettext__
#    define ngettext ngettext__
#    define dngettext dngettext__
#    define dcngettext dcngettext__
#    define textdomain textdomain__
#    define bindtextdomain bindtextdomain__
#    define bind_textdomain_codeset bind_textdomain_codeset__

   How does this redirection work? There are two cases.
   A. When libintl.a is linked into an executable, it works because
      functions defined in the executable always override functions in
      the shared libraries.
   B. When libintl.so is used, it works because
      1. those systems defining gettext/textdomain/... in the C library
         (namely, Solaris 2.4 and newer, and GNU libc 2.0 and newer) are
         ELF systems and define these symbols as weak, thus explicitly
         letting other shared libraries override it.
      2. those systems defining gettext/textdomain/... in a standalone
         libintl.so library (namely, Solaris 2.3 and newer) have this
         shared library in /usr/lib, and the linker will search /usr/lib
         *after* the directory where the GNU gettext library is installed.

   A third case, namely when libintl.a is linked into a shared library
   whose name is not libintl.so, is not supported. In this case, on
   Solaris, when -lintl precedes the linker option for the shared library
   containing GNU gettext, the system's gettext would indeed override
   the GNU gettext. Anyone doing this kind of stuff must be clever enough
   to 1. compile libintl.a with -fPIC, 2. remove -lintl from his linker
   command line.  */

71 72 73 74

#undef gettext
#undef dgettext
#undef dcgettext
Thomas Roessler's avatar
Thomas Roessler committed
75 76 77
#undef ngettext
#undef dngettext
#undef dcngettext
78 79
#undef textdomain
#undef bindtextdomain
Thomas Roessler's avatar
Thomas Roessler committed
80
#undef bind_textdomain_codeset
81 82 83


char *
Thomas Roessler's avatar
Thomas Roessler committed
84 85 86 87 88 89 90 91 92
gettext (msgid)
     const char *msgid;
{
  return gettext__ (msgid);
}


char *
dgettext (domainname, msgid)
93
     const char *domainname;
Thomas Roessler's avatar
Thomas Roessler committed
94
     const char *msgid;
95
{
Thomas Roessler's avatar
Thomas Roessler committed
96
  return dgettext__ (domainname, msgid);
97 98 99 100 101 102 103 104 105 106 107 108 109 110
}


char *
dcgettext (domainname, msgid, category)
     const char *domainname;
     const char *msgid;
     int category;
{
  return dcgettext__ (domainname, msgid, category);
}


char *
Thomas Roessler's avatar
Thomas Roessler committed
111 112 113 114 115 116 117 118 119 120 121
ngettext (msgid1, msgid2, n)
     const char *msgid1;
     const char *msgid2;
     unsigned long int n;
{
  return ngettext__ (msgid1, msgid2, n);
}


char *
dngettext (domainname, msgid1, msgid2, n)
122
     const char *domainname;
Thomas Roessler's avatar
Thomas Roessler committed
123 124 125
     const char *msgid1;
     const char *msgid2;
     unsigned long int n;
126
{
Thomas Roessler's avatar
Thomas Roessler committed
127
  return dngettext__ (domainname, msgid1, msgid2, n);
128 129 130 131
}


char *
Thomas Roessler's avatar
Thomas Roessler committed
132 133 134 135 136 137
dcngettext (domainname, msgid1, msgid2, n, category)
     const char *domainname;
     const char *msgid1;
     const char *msgid2;
     unsigned long int n;
     int category;
138
{
Thomas Roessler's avatar
Thomas Roessler committed
139
  return dcngettext__ (domainname, msgid1, msgid2, n, category);
140 141 142 143 144 145 146 147 148
}


char *
textdomain (domainname)
     const char *domainname;
{
  return textdomain__ (domainname);
}
Thomas Roessler's avatar
Thomas Roessler committed
149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166


char *
bindtextdomain (domainname, dirname)
     const char *domainname;
     const char *dirname;
{
  return bindtextdomain__ (domainname, dirname);
}


char *
bind_textdomain_codeset (domainname, codeset)
     const char *domainname;
     const char *codeset;
{
  return bind_textdomain_codeset__ (domainname, codeset);
}