xref: /utopia/UTPA2-700.0.x/projects/tools/lint/mips-linux-gnu_include/gconv.h (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
1*53ee8cc1Swenshuai.xi /* Copyright (C) 1997-1999, 2000-2002, 2007 Free Software Foundation, Inc.
2*53ee8cc1Swenshuai.xi    This file is part of the GNU C Library.
3*53ee8cc1Swenshuai.xi 
4*53ee8cc1Swenshuai.xi    The GNU C Library is free software; you can redistribute it and/or
5*53ee8cc1Swenshuai.xi    modify it under the terms of the GNU Lesser General Public
6*53ee8cc1Swenshuai.xi    License as published by the Free Software Foundation; either
7*53ee8cc1Swenshuai.xi    version 2.1 of the License, or (at your option) any later version.
8*53ee8cc1Swenshuai.xi 
9*53ee8cc1Swenshuai.xi    The GNU C Library is distributed in the hope that it will be useful,
10*53ee8cc1Swenshuai.xi    but WITHOUT ANY WARRANTY; without even the implied warranty of
11*53ee8cc1Swenshuai.xi    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12*53ee8cc1Swenshuai.xi    Lesser General Public License for more details.
13*53ee8cc1Swenshuai.xi 
14*53ee8cc1Swenshuai.xi    You should have received a copy of the GNU Lesser General Public
15*53ee8cc1Swenshuai.xi    License along with the GNU C Library; if not, write to the Free
16*53ee8cc1Swenshuai.xi    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
17*53ee8cc1Swenshuai.xi    02111-1307 USA.  */
18*53ee8cc1Swenshuai.xi 
19*53ee8cc1Swenshuai.xi /* This header provides no interface for a user to the internals of
20*53ee8cc1Swenshuai.xi    the gconv implementation in the libc.  Therefore there is no use
21*53ee8cc1Swenshuai.xi    for these definitions beside for writing additional gconv modules.  */
22*53ee8cc1Swenshuai.xi 
23*53ee8cc1Swenshuai.xi #ifndef _GCONV_H
24*53ee8cc1Swenshuai.xi #define _GCONV_H	1
25*53ee8cc1Swenshuai.xi 
26*53ee8cc1Swenshuai.xi #include <features.h>
27*53ee8cc1Swenshuai.xi #define __need_mbstate_t
28*53ee8cc1Swenshuai.xi #define __need_wint_t
29*53ee8cc1Swenshuai.xi #include <wchar.h>
30*53ee8cc1Swenshuai.xi #define __need_size_t
31*53ee8cc1Swenshuai.xi #define __need_wchar_t
32*53ee8cc1Swenshuai.xi #include <stddef.h>
33*53ee8cc1Swenshuai.xi 
34*53ee8cc1Swenshuai.xi /* ISO 10646 value used to signal invalid value.  */
35*53ee8cc1Swenshuai.xi #define __UNKNOWN_10646_CHAR	((wchar_t) 0xfffd)
36*53ee8cc1Swenshuai.xi 
37*53ee8cc1Swenshuai.xi /* Error codes for gconv functions.  */
38*53ee8cc1Swenshuai.xi enum
39*53ee8cc1Swenshuai.xi {
40*53ee8cc1Swenshuai.xi   __GCONV_OK = 0,
41*53ee8cc1Swenshuai.xi   __GCONV_NOCONV,
42*53ee8cc1Swenshuai.xi   __GCONV_NODB,
43*53ee8cc1Swenshuai.xi   __GCONV_NOMEM,
44*53ee8cc1Swenshuai.xi 
45*53ee8cc1Swenshuai.xi   __GCONV_EMPTY_INPUT,
46*53ee8cc1Swenshuai.xi   __GCONV_FULL_OUTPUT,
47*53ee8cc1Swenshuai.xi   __GCONV_ILLEGAL_INPUT,
48*53ee8cc1Swenshuai.xi   __GCONV_INCOMPLETE_INPUT,
49*53ee8cc1Swenshuai.xi 
50*53ee8cc1Swenshuai.xi   __GCONV_ILLEGAL_DESCRIPTOR,
51*53ee8cc1Swenshuai.xi   __GCONV_INTERNAL_ERROR
52*53ee8cc1Swenshuai.xi };
53*53ee8cc1Swenshuai.xi 
54*53ee8cc1Swenshuai.xi 
55*53ee8cc1Swenshuai.xi /* Flags the `__gconv_open' function can set.  */
56*53ee8cc1Swenshuai.xi enum
57*53ee8cc1Swenshuai.xi {
58*53ee8cc1Swenshuai.xi   __GCONV_IS_LAST = 0x0001,
59*53ee8cc1Swenshuai.xi   __GCONV_IGNORE_ERRORS = 0x0002
60*53ee8cc1Swenshuai.xi };
61*53ee8cc1Swenshuai.xi 
62*53ee8cc1Swenshuai.xi 
63*53ee8cc1Swenshuai.xi /* Forward declarations.  */
64*53ee8cc1Swenshuai.xi struct __gconv_step;
65*53ee8cc1Swenshuai.xi struct __gconv_step_data;
66*53ee8cc1Swenshuai.xi struct __gconv_loaded_object;
67*53ee8cc1Swenshuai.xi struct __gconv_trans_data;
68*53ee8cc1Swenshuai.xi 
69*53ee8cc1Swenshuai.xi 
70*53ee8cc1Swenshuai.xi /* Type of a conversion function.  */
71*53ee8cc1Swenshuai.xi typedef int (*__gconv_fct) (struct __gconv_step *, struct __gconv_step_data *,
72*53ee8cc1Swenshuai.xi 			    __const unsigned char **, __const unsigned char *,
73*53ee8cc1Swenshuai.xi 			    unsigned char **, size_t *, int, int);
74*53ee8cc1Swenshuai.xi 
75*53ee8cc1Swenshuai.xi /* Type of a specialized conversion function for a single byte to INTERNAL.  */
76*53ee8cc1Swenshuai.xi typedef wint_t (*__gconv_btowc_fct) (struct __gconv_step *, unsigned char);
77*53ee8cc1Swenshuai.xi 
78*53ee8cc1Swenshuai.xi /* Constructor and destructor for local data for conversion step.  */
79*53ee8cc1Swenshuai.xi typedef int (*__gconv_init_fct) (struct __gconv_step *);
80*53ee8cc1Swenshuai.xi typedef void (*__gconv_end_fct) (struct __gconv_step *);
81*53ee8cc1Swenshuai.xi 
82*53ee8cc1Swenshuai.xi 
83*53ee8cc1Swenshuai.xi /* Type of a transliteration/transscription function.  */
84*53ee8cc1Swenshuai.xi typedef int (*__gconv_trans_fct) (struct __gconv_step *,
85*53ee8cc1Swenshuai.xi 				  struct __gconv_step_data *, void *,
86*53ee8cc1Swenshuai.xi 				  __const unsigned char *,
87*53ee8cc1Swenshuai.xi 				  __const unsigned char **,
88*53ee8cc1Swenshuai.xi 				  __const unsigned char *, unsigned char **,
89*53ee8cc1Swenshuai.xi 				  size_t *);
90*53ee8cc1Swenshuai.xi 
91*53ee8cc1Swenshuai.xi /* Function to call to provide transliteration module with context.  */
92*53ee8cc1Swenshuai.xi typedef int (*__gconv_trans_context_fct) (void *, __const unsigned char *,
93*53ee8cc1Swenshuai.xi 					  __const unsigned char *,
94*53ee8cc1Swenshuai.xi 					  unsigned char *, unsigned char *);
95*53ee8cc1Swenshuai.xi 
96*53ee8cc1Swenshuai.xi /* Function to query module about supported encoded character sets.  */
97*53ee8cc1Swenshuai.xi typedef int (*__gconv_trans_query_fct) (__const char *, __const char ***,
98*53ee8cc1Swenshuai.xi 					size_t *);
99*53ee8cc1Swenshuai.xi 
100*53ee8cc1Swenshuai.xi /* Constructor and destructor for local data for transliteration.  */
101*53ee8cc1Swenshuai.xi typedef int (*__gconv_trans_init_fct) (void **, const char *);
102*53ee8cc1Swenshuai.xi typedef void (*__gconv_trans_end_fct) (void *);
103*53ee8cc1Swenshuai.xi 
104*53ee8cc1Swenshuai.xi struct __gconv_trans_data
105*53ee8cc1Swenshuai.xi {
106*53ee8cc1Swenshuai.xi   /* Transliteration/Transscription function.  */
107*53ee8cc1Swenshuai.xi   __gconv_trans_fct __trans_fct;
108*53ee8cc1Swenshuai.xi   __gconv_trans_context_fct __trans_context_fct;
109*53ee8cc1Swenshuai.xi   __gconv_trans_end_fct __trans_end_fct;
110*53ee8cc1Swenshuai.xi   void *__data;
111*53ee8cc1Swenshuai.xi   struct __gconv_trans_data *__next;
112*53ee8cc1Swenshuai.xi };
113*53ee8cc1Swenshuai.xi 
114*53ee8cc1Swenshuai.xi 
115*53ee8cc1Swenshuai.xi /* Description of a conversion step.  */
116*53ee8cc1Swenshuai.xi struct __gconv_step
117*53ee8cc1Swenshuai.xi {
118*53ee8cc1Swenshuai.xi   struct __gconv_loaded_object *__shlib_handle;
119*53ee8cc1Swenshuai.xi   __const char *__modname;
120*53ee8cc1Swenshuai.xi 
121*53ee8cc1Swenshuai.xi   int __counter;
122*53ee8cc1Swenshuai.xi 
123*53ee8cc1Swenshuai.xi   char *__from_name;
124*53ee8cc1Swenshuai.xi   char *__to_name;
125*53ee8cc1Swenshuai.xi 
126*53ee8cc1Swenshuai.xi   __gconv_fct __fct;
127*53ee8cc1Swenshuai.xi   __gconv_btowc_fct __btowc_fct;
128*53ee8cc1Swenshuai.xi   __gconv_init_fct __init_fct;
129*53ee8cc1Swenshuai.xi   __gconv_end_fct __end_fct;
130*53ee8cc1Swenshuai.xi 
131*53ee8cc1Swenshuai.xi   /* Information about the number of bytes needed or produced in this
132*53ee8cc1Swenshuai.xi      step.  This helps optimizing the buffer sizes.  */
133*53ee8cc1Swenshuai.xi   int __min_needed_from;
134*53ee8cc1Swenshuai.xi   int __max_needed_from;
135*53ee8cc1Swenshuai.xi   int __min_needed_to;
136*53ee8cc1Swenshuai.xi   int __max_needed_to;
137*53ee8cc1Swenshuai.xi 
138*53ee8cc1Swenshuai.xi   /* Flag whether this is a stateful encoding or not.  */
139*53ee8cc1Swenshuai.xi   int __stateful;
140*53ee8cc1Swenshuai.xi 
141*53ee8cc1Swenshuai.xi   void *__data;		/* Pointer to step-local data.  */
142*53ee8cc1Swenshuai.xi };
143*53ee8cc1Swenshuai.xi 
144*53ee8cc1Swenshuai.xi /* Additional data for steps in use of conversion descriptor.  This is
145*53ee8cc1Swenshuai.xi    allocated by the `init' function.  */
146*53ee8cc1Swenshuai.xi struct __gconv_step_data
147*53ee8cc1Swenshuai.xi {
148*53ee8cc1Swenshuai.xi   unsigned char *__outbuf;    /* Output buffer for this step.  */
149*53ee8cc1Swenshuai.xi   unsigned char *__outbufend; /* Address of first byte after the output
150*53ee8cc1Swenshuai.xi 				 buffer.  */
151*53ee8cc1Swenshuai.xi 
152*53ee8cc1Swenshuai.xi   /* Is this the last module in the chain.  */
153*53ee8cc1Swenshuai.xi   int __flags;
154*53ee8cc1Swenshuai.xi 
155*53ee8cc1Swenshuai.xi   /* Counter for number of invocations of the module function for this
156*53ee8cc1Swenshuai.xi      descriptor.  */
157*53ee8cc1Swenshuai.xi   int __invocation_counter;
158*53ee8cc1Swenshuai.xi 
159*53ee8cc1Swenshuai.xi   /* Flag whether this is an internal use of the module (in the mb*towc*
160*53ee8cc1Swenshuai.xi      and wc*tomb* functions) or regular with iconv(3).  */
161*53ee8cc1Swenshuai.xi   int __internal_use;
162*53ee8cc1Swenshuai.xi 
163*53ee8cc1Swenshuai.xi   __mbstate_t *__statep;
164*53ee8cc1Swenshuai.xi   __mbstate_t __state;	/* This element must not be used directly by
165*53ee8cc1Swenshuai.xi 			   any module; always use STATEP!  */
166*53ee8cc1Swenshuai.xi 
167*53ee8cc1Swenshuai.xi   /* Transliteration information.  */
168*53ee8cc1Swenshuai.xi   struct __gconv_trans_data *__trans;
169*53ee8cc1Swenshuai.xi };
170*53ee8cc1Swenshuai.xi 
171*53ee8cc1Swenshuai.xi 
172*53ee8cc1Swenshuai.xi /* Combine conversion step description with data.  */
173*53ee8cc1Swenshuai.xi typedef struct __gconv_info
174*53ee8cc1Swenshuai.xi {
175*53ee8cc1Swenshuai.xi   size_t __nsteps;
176*53ee8cc1Swenshuai.xi   struct __gconv_step *__steps;
177*53ee8cc1Swenshuai.xi   __extension__ struct __gconv_step_data __data __flexarr;
178*53ee8cc1Swenshuai.xi } *__gconv_t;
179*53ee8cc1Swenshuai.xi 
180*53ee8cc1Swenshuai.xi #endif /* gconv.h */
181