Home | History | Annotate | Download | only in include
      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