gconv.h
上传用户:szlgq88
上传日期:2009-04-28
资源大小:48287k
文件大小:5k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

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