1/* Copyright (C) 1999-2002 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 it 5 and/or modify it under the terms of the GNU Library General Public 6 License as published by the Free Software Foundation; either version 2 7 of the License, or (at your option) any later version. 8 9 The GNU LIBICONV Library is distributed in the hope that it will be 10 useful, but WITHOUT ANY WARRANTY; without even the implied warranty of 11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 Library General Public License for more details. 13 14 You should have received a copy of the GNU Library General Public 15 License along with the GNU LIBICONV Library; see the file COPYING.LIB. 16 If not, write to the Free Software Foundation, Inc., 59 Temple Place - 17 Suite 330, Boston, MA 02111-1307, USA. */ 18 19/* When installed, this file is called "iconv.h". */ 20 21#ifndef _LIBICONV_H 22#define _LIBICONV_H 23 24#define _LIBICONV_VERSION 0x0108 /* version number: (major<<8) + minor */ 25extern int _libiconv_version; /* Likewise */ 26 27/* We would like to #include any system header file which could define 28 iconv_t, 1. in order to eliminate the risk that the user gets compilation 29 errors because some other system header file includes /usr/include/iconv.h 30 which defines iconv_t or declares iconv after this file, 2. when compiling 31 for LIBICONV_PLUG, we need the proper iconv_t type in order to produce 32 binary compatible code. 33 But gcc's #include_next is not portable. Thus, once libiconv's iconv.h 34 has been installed in /usr/local/include, there is no way any more to 35 include the original /usr/include/iconv.h. We simply have to get away 36 without it. 37 Ad 1. The risk that a system header file does 38 #include "iconv.h" or #include_next "iconv.h" 39 is small. They all do #include <iconv.h>. 40 Ad 2. The iconv_t type is a pointer type in all cases I have seen. (It 41 has to be a scalar type because (iconv_t)(-1) is a possible return value 42 from iconv_open().) */ 43 44/* Define iconv_t ourselves. */ 45#undef iconv_t 46#define iconv_t libiconv_t 47typedef void* iconv_t; 48 49/* Get size_t declaration. */ 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 EILSEQ 56 ourselves. */ 57#ifndef EILSEQ 58#define EILSEQ @EILSEQ@ 59#endif 60 61 62#ifdef __cplusplus 63extern "C" { 64#endif 65 66 67/* Allocates descriptor for code conversion from encoding `fromcode' to 68 encoding `tocode'. */ 69#ifndef LIBICONV_PLUG 70#define iconv_open libiconv_open 71#endif 72extern iconv_t iconv_open (const char* tocode, const char* fromcode); 73 74/* Converts, using conversion descriptor `cd', at most `*inbytesleft' bytes 75 starting at `*inbuf', writing at most `*outbytesleft' bytes starting at 76 `*outbuf'. 77 Decrements `*inbytesleft' and increments `*inbuf' by the same amount. 78 Decrements `*outbytesleft' and increments `*outbuf' by the same amount. */ 79#ifndef LIBICONV_PLUG 80#define iconv libiconv 81#endif 82extern size_t iconv (iconv_t cd, @ICONV_CONST@ char* * inbuf, size_t *inbytesleft, char* * outbuf, size_t *outbytesleft); 83 84/* Frees resources allocated for conversion descriptor `cd'. */ 85#ifndef LIBICONV_PLUG 86#define iconv_close libiconv_close 87#endif 88extern int iconv_close (iconv_t cd); 89 90 91#ifndef LIBICONV_PLUG 92 93/* Nonstandard extensions. */ 94 95/* Control of attributes. */ 96#define iconvctl libiconvctl 97extern int iconvctl (iconv_t cd, int request, void* argument); 98 99/* Requests for iconvctl. */ 100#define ICONV_TRIVIALP 0 /* int *argument */ 101#define ICONV_GET_TRANSLITERATE 1 /* int *argument */ 102#define ICONV_SET_TRANSLITERATE 2 /* const int *argument */ 103#define ICONV_GET_DISCARD_ILSEQ 3 /* int *argument */ 104#define ICONV_SET_DISCARD_ILSEQ 4 /* const int *argument */ 105 106/* Listing of locale independent encodings. */ 107#define iconvlist libiconvlist 108extern void iconvlist (int (*do_one) (unsigned int namescount, 109 const char * const * names, 110 void* data), 111 void* data); 112#endif 113 114 115#ifdef __cplusplus 116} 117#endif 118 119 120#endif /* _LIBICONV_H */ 121