glibc (2.38)

(root)/
include/
gconv.h
       1  /* Copyright (C) 1997-2023 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, see
      16     <https://www.gnu.org/licenses/>.  */
      17  
      18  /* This header provides no interface for a user to the internals of
      19     the gconv implementation in the libc.  Therefore there is no use
      20     for these definitions beside for writing additional gconv modules.  */
      21  
      22  #ifndef _GCONV_H
      23  #define _GCONV_H	1
      24  
      25  #include <features.h>
      26  #include <bits/types/__mbstate_t.h>
      27  #include <bits/types/wint_t.h>
      28  
      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    __GCONV_SWAP = 0x0004,
      60    __GCONV_TRANSLIT = 0x0008
      61  };
      62  
      63  
      64  /* Forward declarations.  */
      65  struct __gconv_step;
      66  struct __gconv_step_data;
      67  struct __gconv_loaded_object;
      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  /* Description of a conversion step.  */
      84  struct __gconv_step
      85  {
      86    struct __gconv_loaded_object *__shlib_handle;
      87    const char *__modname;
      88  
      89    /* For internal use by glibc.  (Accesses to this member must occur
      90       when the internal __gconv_lock mutex is acquired).  */
      91    int __counter;
      92  
      93    char *__from_name;
      94    char *__to_name;
      95  
      96    __gconv_fct __fct;
      97    __gconv_btowc_fct __btowc_fct;
      98    __gconv_init_fct __init_fct;
      99    __gconv_end_fct __end_fct;
     100  
     101    /* Information about the number of bytes needed or produced in this
     102       step.  This helps optimizing the buffer sizes.  */
     103    int __min_needed_from;
     104    int __max_needed_from;
     105    int __min_needed_to;
     106    int __max_needed_to;
     107  
     108    /* Flag whether this is a stateful encoding or not.  */
     109    int __stateful;
     110  
     111    void *__data;		/* Pointer to step-local data.  */
     112  };
     113  
     114  /* Additional data for steps in use of conversion descriptor.  This is
     115     allocated by the `init' function.  */
     116  struct __gconv_step_data
     117  {
     118    unsigned char *__outbuf;    /* Output buffer for this step.  */
     119    unsigned char *__outbufend; /* Address of first byte after the output
     120  				 buffer.  */
     121  
     122    /* Is this the last module in the chain.  */
     123    int __flags;
     124  
     125    /* Counter for number of invocations of the module function for this
     126       descriptor.  */
     127    int __invocation_counter;
     128  
     129    /* Flag whether this is an internal use of the module (in the mb*towc*
     130       and wc*tomb* functions) or regular with iconv(3).  */
     131    int __internal_use;
     132  
     133    __mbstate_t *__statep;
     134    __mbstate_t __state;	/* This element must not be used directly by
     135  			   any module; always use STATEP!  */
     136  };
     137  
     138  
     139  /* Combine conversion step description with data.  */
     140  typedef struct __gconv_info
     141  {
     142    size_t __nsteps;
     143    struct __gconv_step *__steps;
     144    __extension__ struct __gconv_step_data __data[0];
     145  } *__gconv_t;
     146  
     147  #endif /* gconv.h */