Home | History | Annotate | Download | only in include
      1 /* Copyright (C) 1997-1999, 2000-2002, 2007, 2011 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   __GCONV_SWAP = 0x0004
     61 };
     62 
     63 
     64 /* Forward declarations.  */
     65 struct __gconv_step;
     66 struct __gconv_step_data;
     67 struct __gconv_loaded_object;
     68 struct __gconv_trans_data;
     69 
     70 
     71 /* Type of a conversion function.  */
     72 typedef int (*__gconv_fct) (struct __gconv_step *, struct __gconv_step_data *,
     73 			    __const unsigned char **, __const unsigned char *,
     74 			    unsigned char **, size_t *, int, int);
     75 
     76 /* Type of a specialized conversion function for a single byte to INTERNAL.  */
     77 typedef wint_t (*__gconv_btowc_fct) (struct __gconv_step *, unsigned char);
     78 
     79 /* Constructor and destructor for local data for conversion step.  */
     80 typedef int (*__gconv_init_fct) (struct __gconv_step *);
     81 typedef void (*__gconv_end_fct) (struct __gconv_step *);
     82 
     83 
     84 /* Type of a transliteration/transscription function.  */
     85 typedef int (*__gconv_trans_fct) (struct __gconv_step *,
     86 				  struct __gconv_step_data *, void *,
     87 				  __const unsigned char *,
     88 				  __const unsigned char **,
     89 				  __const unsigned char *, unsigned char **,
     90 				  size_t *);
     91 
     92 /* Function to call to provide transliteration module with context.  */
     93 typedef int (*__gconv_trans_context_fct) (void *, __const unsigned char *,
     94 					  __const unsigned char *,
     95 					  unsigned char *, unsigned char *);
     96 
     97 /* Function to query module about supported encoded character sets.  */
     98 typedef int (*__gconv_trans_query_fct) (__const char *, __const char ***,
     99 					size_t *);
    100 
    101 /* Constructor and destructor for local data for transliteration.  */
    102 typedef int (*__gconv_trans_init_fct) (void **, const char *);
    103 typedef void (*__gconv_trans_end_fct) (void *);
    104 
    105 struct __gconv_trans_data
    106 {
    107   /* Transliteration/Transscription function.  */
    108   __gconv_trans_fct __trans_fct;
    109   __gconv_trans_context_fct __trans_context_fct;
    110   __gconv_trans_end_fct __trans_end_fct;
    111   void *__data;
    112   struct __gconv_trans_data *__next;
    113 };
    114 
    115 
    116 /* Description of a conversion step.  */
    117 struct __gconv_step
    118 {
    119   struct __gconv_loaded_object *__shlib_handle;
    120   __const char *__modname;
    121 
    122   int __counter;
    123 
    124   char *__from_name;
    125   char *__to_name;
    126 
    127   __gconv_fct __fct;
    128   __gconv_btowc_fct __btowc_fct;
    129   __gconv_init_fct __init_fct;
    130   __gconv_end_fct __end_fct;
    131 
    132   /* Information about the number of bytes needed or produced in this
    133      step.  This helps optimizing the buffer sizes.  */
    134   int __min_needed_from;
    135   int __max_needed_from;
    136   int __min_needed_to;
    137   int __max_needed_to;
    138 
    139   /* Flag whether this is a stateful encoding or not.  */
    140   int __stateful;
    141 
    142   void *__data;		/* Pointer to step-local data.  */
    143 };
    144 
    145 /* Additional data for steps in use of conversion descriptor.  This is
    146    allocated by the `init' function.  */
    147 struct __gconv_step_data
    148 {
    149   unsigned char *__outbuf;    /* Output buffer for this step.  */
    150   unsigned char *__outbufend; /* Address of first byte after the output
    151 				 buffer.  */
    152 
    153   /* Is this the last module in the chain.  */
    154   int __flags;
    155 
    156   /* Counter for number of invocations of the module function for this
    157      descriptor.  */
    158   int __invocation_counter;
    159 
    160   /* Flag whether this is an internal use of the module (in the mb*towc*
    161      and wc*tomb* functions) or regular with iconv(3).  */
    162   int __internal_use;
    163 
    164   __mbstate_t *__statep;
    165   __mbstate_t __state;	/* This element must not be used directly by
    166 			   any module; always use STATEP!  */
    167 
    168   /* Transliteration information.  */
    169   struct __gconv_trans_data *__trans;
    170 };
    171 
    172 
    173 /* Combine conversion step description with data.  */
    174 typedef struct __gconv_info
    175 {
    176   size_t __nsteps;
    177   struct __gconv_step *__steps;
    178   __extension__ struct __gconv_step_data __data __flexarr;
    179 } *__gconv_t;
    180 
    181 #endif /* gconv.h */
    182