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