codekingpro/portable-devtools
115k
1/* Copyright (C) 1999-2022 Free Software Foundation, Inc.2 This file is part of the GNU LIBICONV Library.3 4 The GNU LIBICONV Library is free software; you can redistribute it5 and/or modify it under the terms of the GNU Lesser General Public6 License as published by the Free Software Foundation; either version 2.17 of the License, or (at your option) any later version.8 9 The GNU LIBICONV Library is distributed in the hope that it will be10 useful, but WITHOUT ANY WARRANTY; without even the implied warranty of11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU12 Lesser General Public License for more details.13 14 You should have received a copy of the GNU Lesser General Public15 License along with the GNU LIBICONV Library; see the file COPYING.LIB.16 If not, see <https://www.gnu.org/licenses/>. */17 18/* When installed, this file is called "iconv.h". */19 20#ifndef _LIBICONV_H21#define _LIBICONV_H22 23#define _LIBICONV_VERSION 0x0111 /* version number: (major<<8) + minor */24extern __declspec (dllimport) int _libiconv_version; /* Likewise */25 26/* We would like to #include any system header file which could define27 iconv_t, 1. in order to eliminate the risk that the user gets compilation28 errors because some other system header file includes /usr/include/iconv.h29 which defines iconv_t or declares iconv after this file, 2. when compiling30 for LIBICONV_PLUG, we need the proper iconv_t type in order to produce31 binary compatible code.32 But gcc's #include_next is not portable. Thus, once libiconv's iconv.h33 has been installed in /usr/local/include, there is no way any more to34 include the original /usr/include/iconv.h. We simply have to get away35 without it.36 Ad 1. The risk that a system header file does37 #include "iconv.h" or #include_next "iconv.h"38 is small. They all do #include <iconv.h>.39 Ad 2. The iconv_t type is a pointer type in all cases I have seen. (It40 has to be a scalar type because (iconv_t)(-1) is a possible return value41 from iconv_open().) */42 43/* Define iconv_t ourselves. */44#undef iconv_t45#define iconv_t libiconv_t46typedef void* iconv_t;47 48/* Get size_t declaration.49 Get wchar_t declaration if it exists. */50#include <stddef.h>51 52/* Get errno declaration and values. */53#include <errno.h>54/* Some systems, like SunOS 4, don't have EILSEQ. Some systems, like BSD/OS,55 have EILSEQ in a different header. On these systems, define EILSEQ56 ourselves. */57#ifndef EILSEQ58#define EILSEQ 59#endif60 61 62#ifdef __cplusplus63extern "C" {64#endif65 66 67/* Allocates descriptor for code conversion from encoding ‘fromcode’ to68 encoding ‘tocode’. */69#ifndef LIBICONV_PLUG70#define iconv_open libiconv_open71#endif72extern iconv_t iconv_open (const char* tocode, const char* fromcode);73 74/* Converts, using conversion descriptor ‘cd’, at most ‘*inbytesleft’ bytes75 starting at ‘*inbuf’, writing at most ‘*outbytesleft’ bytes starting at76 ‘*outbuf’.77 Decrements ‘*inbytesleft’ and increments ‘*inbuf’ by the same amount.78 Decrements ‘*outbytesleft’ and increments ‘*outbuf’ by the same amount. */79#ifndef LIBICONV_PLUG80#define iconv libiconv81#endif82extern size_t iconv (iconv_t cd, char* * inbuf, size_t *inbytesleft, char* * outbuf, size_t *outbytesleft);83 84/* Frees resources allocated for conversion descriptor ‘cd’. */85#ifndef LIBICONV_PLUG86#define iconv_close libiconv_close87#endif88extern int iconv_close (iconv_t cd);89 90 91#ifdef __cplusplus92}93#endif94 95 96#ifndef LIBICONV_PLUG97 98/* Nonstandard extensions. */99 100#if 1101#if 0102/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before103 <wchar.h>.104 BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be105 included before <wchar.h>. */106#include <stddef.h>107#include <stdio.h>108#include <time.h>109#endif110#include <wchar.h>111#endif112 113#ifdef __cplusplus114extern "C" {115#endif116 117/* A type that holds all memory needed by a conversion descriptor.118 A pointer to such an object can be used as an iconv_t. */119typedef struct {120 void* dummy1[28];121#if 1122 mbstate_t dummy2;123#endif124} iconv_allocation_t;125 126/* Allocates descriptor for code conversion from encoding ‘fromcode’ to127 encoding ‘tocode’ into preallocated memory. Returns an error indicator128 (0 or -1 with errno set). */129#define iconv_open_into libiconv_open_into130extern int iconv_open_into (const char* tocode, const char* fromcode,131 iconv_allocation_t* resultp);132 133/* Control of attributes. */134#define iconvctl libiconvctl135extern int iconvctl (iconv_t cd, int request, void* argument);136 137/* Hook performed after every successful conversion of a Unicode character. */138typedef void (*iconv_unicode_char_hook) (unsigned int uc, void* data);139/* Hook performed after every successful conversion of a wide character. */140typedef void (*iconv_wide_char_hook) (wchar_t wc, void* data);141/* Set of hooks. */142struct iconv_hooks {143 iconv_unicode_char_hook uc_hook;144 iconv_wide_char_hook wc_hook;145 void* data;146};147 148/* Fallback function. Invoked when a small number of bytes could not be149 converted to a Unicode character. This function should process all150 bytes from inbuf and may produce replacement Unicode characters by calling151 the write_replacement callback repeatedly. */152typedef void (*iconv_unicode_mb_to_uc_fallback)153 (const char* inbuf, size_t inbufsize,154 void (*write_replacement) (const unsigned int *buf, size_t buflen,155 void* callback_arg),156 void* callback_arg,157 void* data);158/* Fallback function. Invoked when a Unicode character could not be converted159 to the target encoding. This function should process the character and160 may produce replacement bytes (in the target encoding) by calling the161 write_replacement callback repeatedly. */162typedef void (*iconv_unicode_uc_to_mb_fallback)163 (unsigned int code,164 void (*write_replacement) (const char *buf, size_t buflen,165 void* callback_arg),166 void* callback_arg,167 void* data);168#if 1169/* Fallback function. Invoked when a number of bytes could not be converted to170 a wide character. This function should process all bytes from inbuf and may171 produce replacement wide characters by calling the write_replacement172 callback repeatedly. */173typedef void (*iconv_wchar_mb_to_wc_fallback)174 (const char* inbuf, size_t inbufsize,175 void (*write_replacement) (const wchar_t *buf, size_t buflen,176 void* callback_arg),177 void* callback_arg,178 void* data);179/* Fallback function. Invoked when a wide character could not be converted to180 the target encoding. This function should process the character and may181 produce replacement bytes (in the target encoding) by calling the182 write_replacement callback repeatedly. */183typedef void (*iconv_wchar_wc_to_mb_fallback)184 (wchar_t code,185 void (*write_replacement) (const char *buf, size_t buflen,186 void* callback_arg),187 void* callback_arg,188 void* data);189#else190/* If the wchar_t type does not exist, these two fallback functions are never191 invoked. Their argument list therefore does not matter. */192typedef void (*iconv_wchar_mb_to_wc_fallback) ();193typedef void (*iconv_wchar_wc_to_mb_fallback) ();194#endif195/* Set of fallbacks. */196struct iconv_fallbacks {197 iconv_unicode_mb_to_uc_fallback mb_to_uc_fallback;198 iconv_unicode_uc_to_mb_fallback uc_to_mb_fallback;199 iconv_wchar_mb_to_wc_fallback mb_to_wc_fallback;200 iconv_wchar_wc_to_mb_fallback wc_to_mb_fallback;201 void* data;202};203 204/* Requests for iconvctl. */205#define ICONV_TRIVIALP 0 /* int *argument */206#define ICONV_GET_TRANSLITERATE 1 /* int *argument */207#define ICONV_SET_TRANSLITERATE 2 /* const int *argument */208#define ICONV_GET_DISCARD_ILSEQ 3 /* int *argument */209#define ICONV_SET_DISCARD_ILSEQ 4 /* const int *argument */210#define ICONV_SET_HOOKS 5 /* const struct iconv_hooks *argument */211#define ICONV_SET_FALLBACKS 6 /* const struct iconv_fallbacks *argument */212 213/* Listing of locale independent encodings. */214#define iconvlist libiconvlist215extern void iconvlist (int (*do_one) (unsigned int namescount,216 const char * const * names,217 void* data),218 void* data);219 220/* Canonicalize an encoding name.221 The result is either a canonical encoding name, or name itself. */222extern const char * iconv_canonicalize (const char * name);223 224/* Support for relocatable packages. */225 226/* Sets the original and the current installation prefix of the package.227 Relocation simply replaces a pathname starting with the original prefix228 by the corresponding pathname with the current prefix instead. Both229 prefixes should be directory names without trailing slash (i.e. use ""230 instead of "/"). */231extern void libiconv_set_relocation_prefix (const char *orig_prefix,232 const char *curr_prefix);233 234#ifdef __cplusplus235}236#endif237 238#endif239 240 241#endif /* _LIBICONV_H */242 