(install-locales): Allow specifying charset in locale name but omit it in
[kopensolaris-gnu/glibc.git] / iconv / gconv_int.h
1 /* Copyright (C) 1997, 1998, 1999 Free Software Foundation, Inc.
2    This file is part of the GNU C Library.
3    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
4
5    The GNU C Library is free software; you can redistribute it and/or
6    modify it under the terms of the GNU Library General Public License as
7    published by the Free Software Foundation; either version 2 of the
8    License, or (at your option) any later version.
9
10    The GNU C Library 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 the GNU C Library; see the file COPYING.LIB.  If not,
17    write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18    Boston, MA 02111-1307, USA.  */
19
20 #ifndef _GCONV_INT_H
21 #define _GCONV_INT_H    1
22
23 #include "gconv.h"
24 #include <regex.h>
25
26 __BEGIN_DECLS
27
28
29 /* Structure for alias definition.  Simply to strings.  */
30 struct gconv_alias
31 {
32   const char *fromname;
33   const char *toname;
34 };
35
36
37 /* How many character should be conveted in one call?  */
38 #define GCONV_NCHAR_GOAL        8160
39
40
41 /* Structure describing one loaded shared object.  This normally are
42    objects to perform conversation but as a special case the db shared
43    object is also handled.  */
44 struct gconv_loaded_object
45 {
46   /* Name of the object.  */
47   const char *name;
48
49   /* Reference counter for the db functionality.  If no conversion is
50      needed we unload the db library.  */
51   int counter;
52
53   /* The handle for the shared object.  */
54   struct link_map *handle;
55
56   /* Pointer to the functions the module defines.  */
57   gconv_fct fct;
58   gconv_init_fct init_fct;
59   gconv_end_fct end_fct;
60 };
61
62
63 /* Description for an available conversion module.  */
64 struct gconv_module
65 {
66   const char *from_pattern;
67   const char *from_constpfx;
68   size_t from_constpfx_len;
69   const regex_t *from_regex;
70   regex_t from_regex_mem;
71
72   const char *to_string;
73
74   int cost_hi;
75   int cost_lo;
76
77   const char *module_name;
78
79   struct gconv_module *left;    /* Prefix smaller.  */
80   struct gconv_module *same;    /* List of entries with identical prefix.  */
81   struct gconv_module *matching;/* Next node with more specific prefix.  */
82   struct gconv_module *right;   /* Prefix larger.  */
83 };
84
85
86 /* Global variables.  */
87
88 /* Database of alias names.  */
89 extern void *__gconv_alias_db;
90
91 /* Array with available modules.  */
92 extern size_t __gconv_nmodules;
93 extern struct gconv_module *__gconv_modules_db;
94
95
96 /* Return in *HANDLE decriptor for transformation from FROMSET to TOSET.  */
97 extern int __gconv_open (const char *__toset, const char *__fromset,
98                          gconv_t *__handle)
99      internal_function;
100
101 /* Free resources associated with transformation descriptor CD.  */
102 extern int __gconv_close (gconv_t cd)
103      internal_function;
104
105 /* Transform at most *INBYTESLEFT bytes from buffer starting at *INBUF
106    according to rules described by CD and place up to *OUTBYTESLEFT
107    bytes in buffer starting at *OUTBUF.  Return number of written
108    characters in *CONVERTED if this pointer is not null.  */
109 extern int __gconv (gconv_t __cd, const unsigned char **__inbuf,
110                     const unsigned char *inbufend, unsigned char **__outbuf,
111                     unsigned char *outbufend, size_t *converted)
112      internal_function;
113
114 /* Return in *HANDLE a pointer to an array with *NSTEPS elements describing
115    the single steps necessary for transformation from FROMSET to TOSET.  */
116 extern int __gconv_find_transform (const char *__toset, const char *__fromset,
117                                    struct gconv_step **__handle,
118                                    size_t *__nsteps)
119      internal_function;
120
121 /* Read all the configuration data and cache it.  */
122 extern void __gconv_read_conf (void);
123
124 /* Comparison function to search alias.  */
125 extern int __gconv_alias_compare (const void *__p1, const void *__p2);
126
127 /* Clear reference to transformation step implementations which might
128    cause the code to be unloaded.  */
129 extern int __gconv_close_transform (struct gconv_step *__steps,
130                                     size_t __nsteps)
131      internal_function;
132
133 /* Load shared object named by NAME.  If already loaded increment reference
134    count.  */
135 extern struct gconv_loaded_object *__gconv_find_shlib (const char *__name)
136      internal_function;
137
138 /* Find function named NAME in shared object referenced by HANDLE.  */
139 void *__gconv_find_func (void *handle, const char *name)
140      internal_function;
141
142 /* Release shared object.  If no further reference is available unload
143    the object.  */
144 extern int __gconv_release_shlib (struct gconv_loaded_object *__handle)
145      internal_function;
146
147 /* Fill STEP with information about builtin module with NAME.  */
148 extern void __gconv_get_builtin_trans (const char *__name,
149                                        struct gconv_step *__step)
150      internal_function;
151
152
153
154 /* Builtin transformations.  */
155 #ifdef _LIBC
156 # define __BUILTIN_TRANS(Name) \
157   extern int Name (struct gconv_step *__step, struct gconv_step_data *__data, \
158                    const unsigned char **__inbuf,                             \
159                    const unsigned char *__inbufend, size_t *__written,        \
160                    int __do_flush)
161
162 __BUILTIN_TRANS (__gconv_transform_ascii_internal);
163 __BUILTIN_TRANS (__gconv_transform_internal_ascii);
164 __BUILTIN_TRANS (__gconv_transform_utf8_internal);
165 __BUILTIN_TRANS (__gconv_transform_internal_utf8);
166 __BUILTIN_TRANS (__gconv_transform_ucs2_internal);
167 __BUILTIN_TRANS (__gconv_transform_internal_ucs2);
168 __BUILTIN_TRANS (__gconv_transform_ucs2little_internal);
169 __BUILTIN_TRANS (__gconv_transform_internal_ucs2little);
170 __BUILTIN_TRANS (__gconv_transform_internal_ucs4);
171 __BUILTIN_TRANS (__gconv_transform_internal_utf16);
172 __BUILTIN_TRANS (__gconv_transform_utf16_internal);
173 # undef __BUITLIN_TRANS
174
175 #endif
176
177 __END_DECLS
178
179 #endif /* gconv_int.h */