1*946379e7Schristos /* Charset conversion with out-of-memory checking. 2*946379e7Schristos Copyright (C) 2001-2004, 2006 Free Software Foundation, Inc. 3*946379e7Schristos Written by Bruno Haible and Simon Josefsson. 4*946379e7Schristos 5*946379e7Schristos This program is free software; you can redistribute it and/or modify 6*946379e7Schristos it under the terms of the GNU General Public License as published by 7*946379e7Schristos the Free Software Foundation; either version 2, or (at your option) 8*946379e7Schristos any later version. 9*946379e7Schristos 10*946379e7Schristos This program is distributed in the hope that it will be useful, 11*946379e7Schristos but WITHOUT ANY WARRANTY; without even the implied warranty of 12*946379e7Schristos MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13*946379e7Schristos GNU General Public License for more details. 14*946379e7Schristos 15*946379e7Schristos You should have received a copy of the GNU General Public License 16*946379e7Schristos along with this program; if not, write to the Free Software Foundation, 17*946379e7Schristos Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ 18*946379e7Schristos 19*946379e7Schristos #ifndef _XSTRICONV_H 20*946379e7Schristos #define _XSTRICONV_H 21*946379e7Schristos 22*946379e7Schristos #include <stddef.h> 23*946379e7Schristos #if HAVE_ICONV 24*946379e7Schristos #include <iconv.h> 25*946379e7Schristos #endif 26*946379e7Schristos 27*946379e7Schristos 28*946379e7Schristos #ifdef __cplusplus 29*946379e7Schristos extern "C" { 30*946379e7Schristos #endif 31*946379e7Schristos 32*946379e7Schristos 33*946379e7Schristos #if HAVE_ICONV 34*946379e7Schristos 35*946379e7Schristos /* Convert an entire string from one encoding to another, using iconv. 36*946379e7Schristos The original string is at [SRC,...,SRC+SRCLEN-1]. 37*946379e7Schristos The conversion descriptor is passed as CD. 38*946379e7Schristos *RESULTP should initially contain NULL or a malloced memory block. 39*946379e7Schristos May change the size of the allocated memory block in *RESULTP, storing 40*946379e7Schristos its new address in *RESULTP and its new length in *LENGTHP. 41*946379e7Schristos Upon memory allocation failure, report the error and exit. 42*946379e7Schristos Return value: 0 if successful, otherwise -1 and errno set. 43*946379e7Schristos If successful, the resulting string is stored in *RESULTP and its length 44*946379e7Schristos in *LENGTHP. */ 45*946379e7Schristos extern int xmem_cd_iconv (const char *src, size_t srclen, iconv_t cd, 46*946379e7Schristos char **resultp, size_t *lengthp); 47*946379e7Schristos 48*946379e7Schristos /* Convert an entire string from one encoding to another, using iconv. 49*946379e7Schristos The original string is the NUL-terminated string starting at SRC. 50*946379e7Schristos The conversion descriptor is passed as CD. Both the "from" and the "to" 51*946379e7Schristos encoding must use a single NUL byte at the end of the string (i.e. not 52*946379e7Schristos UCS-2, UCS-4, UTF-16, UTF-32). 53*946379e7Schristos Allocate a malloced memory block for the result. 54*946379e7Schristos Upon memory allocation failure, report the error and exit. 55*946379e7Schristos Return value: the freshly allocated resulting NUL-terminated string if 56*946379e7Schristos successful, otherwise NULL and errno set. */ 57*946379e7Schristos extern char * xstr_cd_iconv (const char *src, iconv_t cd); 58*946379e7Schristos 59*946379e7Schristos #endif 60*946379e7Schristos 61*946379e7Schristos /* Convert an entire string from one encoding to another, using iconv. 62*946379e7Schristos The original string is the NUL-terminated string starting at SRC. 63*946379e7Schristos Both the "from" and the "to" encoding must use a single NUL byte at the 64*946379e7Schristos end of the string (i.e. not UCS-2, UCS-4, UTF-16, UTF-32). 65*946379e7Schristos Allocate a malloced memory block for the result. 66*946379e7Schristos Upon memory allocation failure, report the error and exit. 67*946379e7Schristos Return value: the freshly allocated resulting NUL-terminated string if 68*946379e7Schristos successful, otherwise NULL and errno set. */ 69*946379e7Schristos extern char * xstr_iconv (const char *src, 70*946379e7Schristos const char *from_codeset, const char *to_codeset); 71*946379e7Schristos 72*946379e7Schristos 73*946379e7Schristos #ifdef __cplusplus 74*946379e7Schristos } 75*946379e7Schristos #endif 76*946379e7Schristos 77*946379e7Schristos 78*946379e7Schristos #endif /* _XSTRICONV_H */ 79