1049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* Copyright (C) 1996-1999, 2000-2003 Free Software Foundation, Inc. 2049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project This file is part of the GNU C Library. 3049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996. 4049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 5049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project This program is free software; you can redistribute it and/or modify it 6049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project under the terms of the GNU Library General Public License as published 7727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease by the Free Software Foundation; either version 2, or (at your option) 8049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project any later version. 9049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 10049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project This program is distributed in the hope that it will be useful, 11049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project but WITHOUT ANY WARRANTY; without even the implied warranty of 12049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project Library General Public License for more details. 14049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 15049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project You should have received a copy of the GNU Library General Public 16049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project License along with this program; if not, write to the Free Software 17049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, 18049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project USA. */ 19049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 20049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifndef _LOADINFO_H 21049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define _LOADINFO_H 1 22049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 23049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* Declarations of locale dependent catalog lookup functions. 24049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project Implemented in 25049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 26049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project localealias.c Possibly replace a locale name by another. 27049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project explodename.c Split a locale name into its various fields. 28049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project l10nflist.c Generate a list of filenames of possible message catalogs. 29049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project finddomain.c Find and open the relevant message catalogs. 30049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 31049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project The main function _nl_find_domain() in finddomain.c is declared 32049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project in gettextP.h. 33049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project */ 34049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 35049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifndef internal_function 36049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# define internal_function 37049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif 38049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 39049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* Tell the compiler when a conditional or integer expression is 40049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project almost always true or almost always false. */ 41049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifndef HAVE_BUILTIN_EXPECT 42049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# define __builtin_expect(expr, val) (expr) 43049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif 44049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 45049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* Separator in PATH like lists of pathnames. */ 46049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#if defined _WIN32 || defined __WIN32__ || defined __EMX__ || defined __DJGPP__ 47049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* Win32, OS/2, DOS */ 48049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# define PATH_SEPARATOR ';' 49049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#else 50049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* Unix */ 51049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# define PATH_SEPARATOR ':' 52049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif 53049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 54049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* Encoding of locale name parts. */ 55049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define CEN_REVISION 1 56049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define CEN_SPONSOR 2 57049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define CEN_SPECIAL 4 58049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define XPG_NORM_CODESET 8 59049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define XPG_CODESET 16 60049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define TERRITORY 32 61049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define CEN_AUDIENCE 64 62049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define XPG_MODIFIER 128 63049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 64049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define CEN_SPECIFIC (CEN_REVISION|CEN_SPONSOR|CEN_SPECIAL|CEN_AUDIENCE) 65049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define XPG_SPECIFIC (XPG_CODESET|XPG_NORM_CODESET|XPG_MODIFIER) 66049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 67049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 68049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Projectstruct loaded_l10nfile 69049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project{ 70049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project const char *filename; 71049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project int decided; 72049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 73049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project const void *data; 74049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 75049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project struct loaded_l10nfile *next; 76049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project struct loaded_l10nfile *successor[1]; 77049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project}; 78049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 79049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 80049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* Normalize codeset name. There is no standard for the codeset 81049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project names. Normalization allows the user to use any of the common 82049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project names. The return value is dynamically allocated and has to be 83049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project freed by the caller. */ 84049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Projectextern const char *_nl_normalize_codeset (const char *codeset, 85049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project size_t name_len); 86049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 87049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* Lookup a locale dependent file. 88049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project *L10NFILE_LIST denotes a pool of lookup results of locale dependent 89049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project files of the same kind, sorted in decreasing order of ->filename. 90049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project DIRLIST and DIRLIST_LEN are an argz list of directories in which to 91049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project look, containing at least one directory (i.e. DIRLIST_LEN > 0). 92049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project MASK, LANGUAGE, TERRITORY, CODESET, NORMALIZED_CODESET, MODIFIER, 93049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project SPECIAL, SPONSOR, REVISION are the pieces of the locale name, as 94049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project produced by _nl_explode_name(). FILENAME is the filename suffix. 95049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project The return value is the lookup result, either found in *L10NFILE_LIST, 96049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project or - if DO_ALLOCATE is nonzero - freshly allocated, or possibly NULL. 97049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project If the return value is non-NULL, it is added to *L10NFILE_LIST, and 98049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project its ->next field denotes the chaining inside *L10NFILE_LIST, and 99049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project furthermore its ->successor[] field contains a list of other lookup 100049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project results from which this lookup result inherits. */ 101049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Projectextern struct loaded_l10nfile * 102049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project_nl_make_l10nflist (struct loaded_l10nfile **l10nfile_list, 103049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project const char *dirlist, size_t dirlist_len, int mask, 104ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease const char *language, const char *territory, 105ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease const char *codeset, const char *normalized_codeset, 106049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project const char *modifier, const char *special, 107049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project const char *sponsor, const char *revision, 108049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project const char *filename, int do_allocate); 109049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 110727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease/* Lookup the real locale name for a locale alias NAME, or NULL if 111727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease NAME is not a locale alias (but possibly a real locale name). 112727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease The return value is statically allocated and must not be freed. */ 113727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Leaseextern const char *_nl_expand_alias (const char *name); 114727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease 115727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease/* Split a locale name NAME into its pieces: language, modifier, 116727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease territory, codeset, special, sponsor, revision. 117727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease NAME gets destructively modified: NUL bytes are inserted here and 118727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease there. *LANGUAGE gets assigned NAME. Each of *MODIFIER, *TERRITORY, 119727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease *CODESET, *SPECIAL, *SPONSOR, *REVISION gets assigned either a 120727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease pointer into the old NAME string, or NULL. *NORMALIZED_CODESET 121727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease gets assigned the expanded *CODESET, if it is different from *CODESET; 122727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease this one is dynamically allocated and has to be freed by the caller. 123727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease The return value is a bitmask, where each bit corresponds to one 124727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease filled-in value: 125727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease XPG_MODIFIER, CEN_AUDIENCE for *MODIFIER, 126727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease TERRITORY for *TERRITORY, 127727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease XPG_CODESET for *CODESET, 128727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease XPG_NORM_CODESET for *NORMALIZED_CODESET, 129727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease CEN_SPECIAL for *SPECIAL, 130727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease CEN_SPONSOR for *SPONSOR, 131727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease CEN_REVISION for *REVISION. 132727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease */ 133727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Leaseextern int _nl_explode_name (char *name, const char **language, 134727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease const char **modifier, const char **territory, 135727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease const char **codeset, 136727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease const char **normalized_codeset, 137727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease const char **special, const char **sponsor, 138727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease const char **revision); 139727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease 140727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease/* Split a locale name NAME into a leading language part and all the 141727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease rest. Return a pointer to the first character after the language, 142727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease i.e. to the first byte of the rest. */ 143727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Leaseextern char *_nl_find_language (const char *name); 144727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease 145727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease#endif /* loadinfo.h */ 146727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease