| 1 |
/* Header describing internals of libintl library. |
|---|
| 2 |
Copyright (C) 1995-1999, 2000-2005 Free Software Foundation, Inc. |
|---|
| 3 |
Written by Ulrich Drepper <drepper@cygnus.com>, 1995. |
|---|
| 4 |
|
|---|
| 5 |
This program is free software; you can redistribute it and/or modify it |
|---|
| 6 |
under the terms of the GNU Library General Public License as published |
|---|
| 7 |
by the Free Software Foundation; either version 2, or (at your option) |
|---|
| 8 |
any later version. |
|---|
| 9 |
|
|---|
| 10 |
This program is distributed in the hope that it will be useful, |
|---|
| 11 |
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|---|
| 12 |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
|---|
| 13 |
Library General Public License for more details. |
|---|
| 14 |
|
|---|
| 15 |
You should have received a copy of the GNU Library General Public |
|---|
| 16 |
License along with this program; if not, write to the Free Software |
|---|
| 17 |
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, |
|---|
| 18 |
USA. */ |
|---|
| 19 |
|
|---|
| 20 |
#ifndef _GETTEXTP_H |
|---|
| 21 |
#define _GETTEXTP_H |
|---|
| 22 |
|
|---|
| 23 |
#include <stddef.h> /* Get size_t. */ |
|---|
| 24 |
|
|---|
| 25 |
#ifdef _LIBC |
|---|
| 26 |
# include "../iconv/gconv_int.h" |
|---|
| 27 |
#else |
|---|
| 28 |
# if HAVE_ICONV |
|---|
| 29 |
# include <iconv.h> |
|---|
| 30 |
# endif |
|---|
| 31 |
#endif |
|---|
| 32 |
|
|---|
| 33 |
#include "loadinfo.h" |
|---|
| 34 |
|
|---|
| 35 |
#include "gmo.h" /* Get nls_uint32. */ |
|---|
| 36 |
|
|---|
| 37 |
/* @@ end of prolog @@ */ |
|---|
| 38 |
|
|---|
| 39 |
#ifndef internal_function |
|---|
| 40 |
# define internal_function |
|---|
| 41 |
#endif |
|---|
| 42 |
|
|---|
| 43 |
#ifndef attribute_hidden |
|---|
| 44 |
# define attribute_hidden |
|---|
| 45 |
#endif |
|---|
| 46 |
|
|---|
| 47 |
/* Tell the compiler when a conditional or integer expression is |
|---|
| 48 |
almost always true or almost always false. */ |
|---|
| 49 |
#ifndef HAVE_BUILTIN_EXPECT |
|---|
| 50 |
# define __builtin_expect(expr, val) (expr) |
|---|
| 51 |
#endif |
|---|
| 52 |
|
|---|
| 53 |
#ifndef W |
|---|
| 54 |
# define W(flag, data) ((flag) ? SWAP (data) : (data)) |
|---|
| 55 |
#endif |
|---|
| 56 |
|
|---|
| 57 |
|
|---|
| 58 |
#ifdef _LIBC |
|---|
| 59 |
# include <byteswap.h> |
|---|
| 60 |
# define SWAP(i) bswap_32 (i) |
|---|
| 61 |
#else |
|---|
| 62 |
static inline nls_uint32 |
|---|
| 63 |
SWAP (i) |
|---|
| 64 |
nls_uint32 i; |
|---|
| 65 |
{ |
|---|
| 66 |
return (i << 24) | ((i & 0xff00) << 8) | ((i >> 8) & 0xff00) | (i >> 24); |
|---|
| 67 |
} |
|---|
| 68 |
#endif |
|---|
| 69 |
|
|---|
| 70 |
|
|---|
| 71 |
/* In-memory representation of system dependent string. */ |
|---|
| 72 |
struct sysdep_string_desc |
|---|
| 73 |
{ |
|---|
| 74 |
/* Length of addressed string, including the trailing NUL. */ |
|---|
| 75 |
size_t length; |
|---|
| 76 |
/* Pointer to addressed string. */ |
|---|
| 77 |
const char *pointer; |
|---|
| 78 |
}; |
|---|
| 79 |
|
|---|
| 80 |
/* The representation of an opened message catalog. */ |
|---|
| 81 |
struct loaded_domain |
|---|
| 82 |
{ |
|---|
| 83 |
/* Pointer to memory containing the .mo file. */ |
|---|
| 84 |
const char *data; |
|---|
| 85 |
/* 1 if the memory is mmap()ed, 0 if the memory is malloc()ed. */ |
|---|
| 86 |
int use_mmap; |
|---|
| 87 |
/* Size of mmap()ed memory. */ |
|---|
| 88 |
size_t mmap_size; |
|---|
| 89 |
/* 1 if the .mo file uses a different endianness than this machine. */ |
|---|
| 90 |
int must_swap; |
|---|
| 91 |
/* Pointer to additional malloc()ed memory. */ |
|---|
| 92 |
void *malloced; |
|---|
| 93 |
|
|---|
| 94 |
/* Number of static strings pairs. */ |
|---|
| 95 |
nls_uint32 nstrings; |
|---|
| 96 |
/* Pointer to descriptors of original strings in the file. */ |
|---|
| 97 |
const struct string_desc *orig_tab; |
|---|
| 98 |
/* Pointer to descriptors of translated strings in the file. */ |
|---|
| 99 |
const struct string_desc *trans_tab; |
|---|
| 100 |
|
|---|
| 101 |
/* Number of system dependent strings pairs. */ |
|---|
| 102 |
nls_uint32 n_sysdep_strings; |
|---|
| 103 |
/* Pointer to descriptors of original sysdep strings. */ |
|---|
| 104 |
const struct sysdep_string_desc *orig_sysdep_tab; |
|---|
| 105 |
/* Pointer to descriptors of translated sysdep strings. */ |
|---|
| 106 |
const struct sysdep_string_desc *trans_sysdep_tab; |
|---|
| 107 |
|
|---|
| 108 |
/* Size of hash table. */ |
|---|
| 109 |
nls_uint32 hash_size; |
|---|
| 110 |
/* Pointer to hash table. */ |
|---|
| 111 |
const nls_uint32 *hash_tab; |
|---|
| 112 |
/* 1 if the hash table uses a different endianness than this machine. */ |
|---|
| 113 |
int must_swap_hash_tab; |
|---|
| 114 |
|
|---|
| 115 |
int codeset_cntr; |
|---|
| 116 |
#ifdef _LIBC |
|---|
| 117 |
__gconv_t conv; |
|---|
| 118 |
#else |
|---|
| 119 |
# if HAVE_ICONV |
|---|
| 120 |
iconv_t conv; |
|---|
| 121 |
# endif |
|---|
| 122 |
#endif |
|---|
| 123 |
char **conv_tab; |
|---|
| 124 |
|
|---|
| 125 |
struct expression *plural; |
|---|
| 126 |
unsigned long int nplurals; |
|---|
| 127 |
}; |
|---|
| 128 |
|
|---|
| 129 |
/* We want to allocate a string at the end of the struct. But ISO C |
|---|
| 130 |
doesn't allow zero sized arrays. */ |
|---|
| 131 |
#ifdef __GNUC__ |
|---|
| 132 |
# define ZERO 0 |
|---|
| 133 |
#else |
|---|
| 134 |
# define ZERO 1 |
|---|
| 135 |
#endif |
|---|
| 136 |
|
|---|
| 137 |
/* A set of settings bound to a message domain. Used to store settings |
|---|
| 138 |
from bindtextdomain() and bind_textdomain_codeset(). */ |
|---|
| 139 |
struct binding |
|---|
| 140 |
{ |
|---|
| 141 |
struct binding *next; |
|---|
| 142 |
char *dirname; |
|---|
| 143 |
int codeset_cntr; /* Incremented each time codeset changes. */ |
|---|
| 144 |
char *codeset; |
|---|
| 145 |
char domainname[ZERO]; |
|---|
| 146 |
}; |
|---|
| 147 |
|
|---|
| 148 |
/* A counter which is incremented each time some previous translations |
|---|
| 149 |
become invalid. |
|---|
| 150 |
This variable is part of the external ABI of the GNU libintl. */ |
|---|
| 151 |
extern int _nl_msg_cat_cntr; |
|---|
| 152 |
|
|---|
| 153 |
#ifndef _LIBC |
|---|
| 154 |
const char *_nl_language_preferences_default (void); |
|---|
| 155 |
const char *_nl_locale_name_posix (int category, const char *categoryname); |
|---|
| 156 |
const char *_nl_locale_name_default (void); |
|---|
| 157 |
const char *_nl_locale_name (int category, const char *categoryname); |
|---|
| 158 |
#endif |
|---|
| 159 |
|
|---|
| 160 |
struct loaded_l10nfile *_nl_find_domain (const char *__dirname, char *__locale, |
|---|
| 161 |
const char *__domainname, |
|---|
| 162 |
struct binding *__domainbinding) |
|---|
| 163 |
internal_function; |
|---|
| 164 |
void _nl_load_domain (struct loaded_l10nfile *__domain, |
|---|
| 165 |
struct binding *__domainbinding) |
|---|
| 166 |
internal_function; |
|---|
| 167 |
void _nl_unload_domain (struct loaded_domain *__domain) |
|---|
| 168 |
internal_function; |
|---|
| 169 |
const char *_nl_init_domain_conv (struct loaded_l10nfile *__domain_file, |
|---|
| 170 |
struct loaded_domain *__domain, |
|---|
| 171 |
struct binding *__domainbinding) |
|---|
| 172 |
internal_function; |
|---|
| 173 |
void _nl_free_domain_conv (struct loaded_domain *__domain) |
|---|
| 174 |
internal_function; |
|---|
| 175 |
|
|---|
| 176 |
char *_nl_find_msg (struct loaded_l10nfile *domain_file, |
|---|
| 177 |
struct binding *domainbinding, const char *msgid, |
|---|
| 178 |
size_t *lengthp) |
|---|
| 179 |
internal_function; |
|---|
| 180 |
|
|---|
| 181 |
#ifdef _LIBC |
|---|
| 182 |
extern char *__gettext (const char *__msgid); |
|---|
| 183 |
extern char *__dgettext (const char *__domainname, const char *__msgid); |
|---|
| 184 |
extern char *__dcgettext (const char *__domainname, const char *__msgid, |
|---|
| 185 |
int __category); |
|---|
| 186 |
extern char *__ngettext (const char *__msgid1, const char *__msgid2, |
|---|
| 187 |
unsigned long int __n); |
|---|
| 188 |
extern char *__dngettext (const char *__domainname, |
|---|
| 189 |
const char *__msgid1, const char *__msgid2, |
|---|
| 190 |
unsigned long int n); |
|---|
| 191 |
extern char *__dcngettext (const char *__domainname, |
|---|
| 192 |
const char *__msgid1, const char *__msgid2, |
|---|
| 193 |
unsigned long int __n, int __category); |
|---|
| 194 |
extern char *__dcigettext (const char *__domainname, |
|---|
| 195 |
const char *__msgid1, const char *__msgid2, |
|---|
| 196 |
int __plural, unsigned long int __n, |
|---|
| 197 |
int __category); |
|---|
| 198 |
extern char *__textdomain (const char *__domainname); |
|---|
| 199 |
extern char *__bindtextdomain (const char *__domainname, |
|---|
| 200 |
const char *__dirname); |
|---|
| 201 |
extern char *__bind_textdomain_codeset (const char *__domainname, |
|---|
| 202 |
const char *__codeset); |
|---|
| 203 |
#else |
|---|
| 204 |
/* Declare the exported libintl_* functions, in a way that allows us to |
|---|
| 205 |
call them under their real name. */ |
|---|
| 206 |
# undef _INTL_REDIRECT_INLINE |
|---|
| 207 |
# undef _INTL_REDIRECT_MACROS |
|---|
| 208 |
# define _INTL_REDIRECT_MACROS |
|---|
| 209 |
# include "libgnuintl.h" |
|---|
| 210 |
extern char *libintl_dcigettext (const char *__domainname, |
|---|
| 211 |
const char *__msgid1, const char *__msgid2, |
|---|
| 212 |
int __plural, unsigned long int __n, |
|---|
| 213 |
int __category); |
|---|
| 214 |
#endif |
|---|
| 215 |
|
|---|
| 216 |
/* @@ begin of epilog @@ */ |
|---|
| 217 |
|
|---|
| 218 |
#endif /* gettextP.h */ |
|---|