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