1 /* Copyright (C) 1997-1999, 2000-2002 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 #include <wchar.h> 29 #define __need_size_t 30 #define __need_wchar_t 31 #include <stddef.h> 32 33 /* ISO 10646 value used to signal invalid value. */ 34 #define __UNKNOWN_10646_CHAR ((wchar_t) 0xfffd) 35 36 /* Error codes for gconv functions. */ 37 enum 38 { 39 __GCONV_OK = 0, 40 __GCONV_NOCONV, 41 __GCONV_NODB, 42 __GCONV_NOMEM, 43 44 __GCONV_EMPTY_INPUT, 45 __GCONV_FULL_OUTPUT, 46 __GCONV_ILLEGAL_INPUT, 47 __GCONV_INCOMPLETE_INPUT, 48 49 __GCONV_ILLEGAL_DESCRIPTOR, 50 __GCONV_INTERNAL_ERROR 51 }; 52 53 54 /* Flags the `__gconv_open' function can set. */ 55 enum 56 { 57 __GCONV_IS_LAST = 0x0001, 58 __GCONV_IGNORE_ERRORS = 0x0002 59 }; 60 61 62 /* Forward declarations. */ 63 struct __gconv_step; 64 struct __gconv_step_data; 65 struct __gconv_loaded_object; 66 struct __gconv_trans_data; 67 68 69 /* Type of a conversion function. */ 70 typedef int (*__gconv_fct) (struct __gconv_step *, struct __gconv_step_data *, 71 __const unsigned char **, __const unsigned char *, 72 unsigned char **, size_t *, int, int); 73 74 /* Type of a specialized conversion function for a single byte to INTERNAL. */ 75 typedef wint_t (*__gconv_btowc_fct) (struct __gconv_step *, unsigned char); 76 77 /* Constructor and destructor for local data for conversion step. */ 78 typedef int (*__gconv_init_fct) (struct __gconv_step *); 79 typedef void (*__gconv_end_fct) (struct __gconv_step *); 80 81 82 /* Type of a transliteration/transscription function. */ 83 typedef int (*__gconv_trans_fct) (struct __gconv_step *, 84 struct __gconv_step_data *, void *, 85 __const unsigned char *, 86 __const unsigned char **, 87 __const unsigned char *, unsigned char **, 88 size_t *); 89 90 /* Function to call to provide transliteration module with context. */ 91 typedef int (*__gconv_trans_context_fct) (void *, __const unsigned char *, 92 __const unsigned char *, 93 unsigned char *, unsigned char *); 94 95 /* Function to query module about supported encoded character sets. */ 96 typedef int (*__gconv_trans_query_fct) (__const char *, __const char ***, 97 size_t *); 98 99 /* Constructor and destructor for local data for transliteration. */ 100 typedef int (*__gconv_trans_init_fct) (void **, const char *); 101 typedef void (*__gconv_trans_end_fct) (void *); 102 103 struct __gconv_trans_data 104 { 105 /* Transliteration/Transscription function. */ 106 __gconv_trans_fct __trans_fct; 107 __gconv_trans_context_fct __trans_context_fct; 108 __gconv_trans_end_fct __trans_end_fct; 109 void *__data; 110 struct __gconv_trans_data *__next; 111 }; 112 113 114 /* Description of a conversion step. */ 115 struct __gconv_step 116 { 117 struct __gconv_loaded_object *__shlib_handle; 118 __const char *__modname; 119 120 int __counter; 121 122 char *__from_name; 123 char *__to_name; 124 125 __gconv_fct __fct; 126 __gconv_btowc_fct __btowc_fct; 127 __gconv_init_fct __init_fct; 128 __gconv_end_fct __end_fct; 129 130 /* Information about the number of bytes needed or produced in this 131 step. This helps optimizing the buffer sizes. */ 132 int __min_needed_from; 133 int __max_needed_from; 134 int __min_needed_to; 135 int __max_needed_to; 136 137 /* Flag whether this is a stateful encoding or not. */ 138 int __stateful; 139 140 void *__data; /* Pointer to step-local data. */ 141 }; 142 143 /* Additional data for steps in use of conversion descriptor. This is 144 allocated by the `init' function. */ 145 struct __gconv_step_data 146 { 147 unsigned char *__outbuf; /* Output buffer for this step. */ 148 unsigned char *__outbufend; /* Address of first byte after the output 149 buffer. */ 150 151 /* Is this the last module in the chain. */ 152 int __flags; 153 154 /* Counter for number of invocations of the module function for this 155 descriptor. */ 156 int __invocation_counter; 157 158 /* Flag whether this is an internal use of the module (in the mb*towc* 159 and wc*tomb* functions) or regular with iconv(3). */ 160 int __internal_use; 161 162 __mbstate_t *__statep; 163 __mbstate_t __state; /* This element must not be used directly by 164 any module; always use STATEP! */ 165 166 /* Transliteration information. */ 167 struct __gconv_trans_data *__trans; 168 }; 169 170 171 /* Combine conversion step description with data. */ 172 typedef struct __gconv_info 173 { 174 size_t __nsteps; 175 struct __gconv_step *__steps; 176 __extension__ struct __gconv_step_data __data __flexarr; 177 } *__gconv_t; 178 179 #endif /* gconv.h */ 180