(linenum→info "unix/slp.c:2238")

glibc/2.7/iconv/gconv.h

    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 */
Syntax (Markdown)