Mercurial > hg > octave-nkf > gnulib-hg
changeset 11913:4d4630e8627a
New module 'xstriconveh'.
author | Bruno Haible <bruno@clisp.org> |
---|---|
date | Sun, 30 Aug 2009 16:27:11 +0200 |
parents | ba1f5a03459a |
children | e9cf9c46ad7a |
files | ChangeLog lib/xstriconveh.c lib/xstriconveh.h modules/xstriconveh |
diffstat | 4 files changed, 236 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2009-08-30 Bruno Haible <bruno@clisp.org> + + New module 'xstriconveh'. + * lib/xstriconveh.h: New file. + * lib/xstriconveh.c: New file. + * modules/xstriconveh: New file. + 2009-08-30 Bruno Haible <bruno@clisp.org> Make it easier to use mem_cd_iconveh.
new file mode 100644 --- /dev/null +++ b/lib/xstriconveh.c @@ -0,0 +1,86 @@ +/* Charset conversion with out-of-memory checking. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* Specification. */ +#include "xstriconveh.h" + +#include <errno.h> + +#include "striconveh.h" +#include "xalloc.h" + + +#if HAVE_ICONV + +int +xmem_cd_iconveh (const char *src, size_t srclen, + const iconveh_t *cd, + enum iconv_ilseq_handler handler, + size_t *offsets, + char **resultp, size_t *lengthp) +{ + int retval = + mem_cd_iconveh (src, srclen, cd, handler, offsets, resultp, lengthp); + + if (retval < 0 && errno == ENOMEM) + xalloc_die (); + return retval; +} + +char * +xstr_cd_iconveh (const char *src, + const iconveh_t *cd, + enum iconv_ilseq_handler handler) +{ + char *result = str_cd_iconveh (src, cd, handler); + + if (result == NULL && errno == ENOMEM) + xalloc_die (); + return result; +} + +#endif + +int +xmem_iconveh (const char *src, size_t srclen, + const char *from_codeset, const char *to_codeset, + enum iconv_ilseq_handler handler, + size_t *offsets, + char **resultp, size_t *lengthp) +{ + int retval = + mem_iconveh (src, srclen, from_codeset, to_codeset, handler, offsets, + resultp, lengthp); + + if (retval < 0 && errno == ENOMEM) + xalloc_die (); + return retval; +} + +char * +xstr_iconveh (const char *src, + const char *from_codeset, const char *to_codeset, + enum iconv_ilseq_handler handler) +{ + char *result = str_iconveh (src, from_codeset, to_codeset, handler); + + if (result == NULL && errno == ENOMEM) + xalloc_die (); + return result; +}
new file mode 100644 --- /dev/null +++ b/lib/xstriconveh.h @@ -0,0 +1,115 @@ +/* Charset conversion with out-of-memory checking. + Copyright (C) 2001-2007, 2009 Free Software Foundation, Inc. + Written by Bruno Haible and Simon Josefsson. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef _XSTRICONVEH_H +#define _XSTRICONVEH_H + +#include <stddef.h> + +/* Get the 'enum iconv_ilseq_handler' and iconveh_t types, and the + iconveh_open, iconveh_close declarations. */ +#include "striconveh.h" + + +#ifdef __cplusplus +extern "C" { +#endif + + +#if HAVE_ICONV + +/* Convert an entire string from one encoding to another, using iconv. + The original string is at [SRC,...,SRC+SRCLEN-1]. + CD points to the conversion descriptor from FROMCODE to TOCODE, created by + the function iconveh_open(). + If OFFSETS is not NULL, it should point to an array of SRCLEN integers; this + array is filled with offsets into the result, i.e. the character starting + at SRC[i] corresponds to the character starting at (*RESULTP)[OFFSETS[i]], + and other offsets are set to (size_t)(-1). + *RESULTP and *LENGTH should initially be a scratch buffer and its size, + or *RESULTP can initially be NULL. + May erase the contents of the memory at *RESULTP. + Upon memory allocation failure, report the error and exit. + Return value: 0 if successful, otherwise -1 and errno set. + If successful: The resulting string is stored in *RESULTP and its length + in *LENGTHP. *RESULTP is set to a freshly allocated memory block, or is + unchanged if no dynamic memory allocation was necessary. */ +extern int + xmem_cd_iconveh (const char *src, size_t srclen, + const iconveh_t *cd, + enum iconv_ilseq_handler handler, + size_t *offsets, + char **resultp, size_t *lengthp); + +/* Convert an entire string from one encoding to another, using iconv. + The original string is the NUL-terminated string starting at SRC. + CD points to the conversion descriptor from FROMCODE to TOCODE, created by + the function iconveh_open(). + Both the "from" and the "to" encoding must use a single NUL byte at the end + of the string (i.e. not UCS-2, UCS-4, UTF-16, UTF-32). + Allocate a malloced memory block for the result. + Upon memory allocation failure, report the error and exit. + Return value: the freshly allocated resulting NUL-terminated string if + successful, otherwise NULL and errno set. */ +extern char * + xstr_cd_iconveh (const char *src, + const iconveh_t *cd, + enum iconv_ilseq_handler handler); + +#endif + +/* Convert an entire string from one encoding to another, using iconv. + The original string is at [SRC,...,SRC+SRCLEN-1]. + If OFFSETS is not NULL, it should point to an array of SRCLEN integers; this + array is filled with offsets into the result, i.e. the character starting + at SRC[i] corresponds to the character starting at (*RESULTP)[OFFSETS[i]], + and other offsets are set to (size_t)(-1). + *RESULTP and *LENGTH should initially be a scratch buffer and its size, + or *RESULTP can initially be NULL. + May erase the contents of the memory at *RESULTP. + Upon memory allocation failure, report the error and exit. + Return value: 0 if successful, otherwise -1 and errno set. + If successful: The resulting string is stored in *RESULTP and its length + in *LENGTHP. *RESULTP is set to a freshly allocated memory block, or is + unchanged if no dynamic memory allocation was necessary. */ +extern int + xmem_iconveh (const char *src, size_t srclen, + const char *from_codeset, const char *to_codeset, + enum iconv_ilseq_handler handler, + size_t *offsets, + char **resultp, size_t *lengthp); + +/* Convert an entire string from one encoding to another, using iconv. + The original string is the NUL-terminated string starting at SRC. + Both the "from" and the "to" encoding must use a single NUL byte at the + end of the string (i.e. not UCS-2, UCS-4, UTF-16, UTF-32). + Allocate a malloced memory block for the result. + Upon memory allocation failure, report the error and exit. + Return value: the freshly allocated resulting NUL-terminated string if + successful, otherwise NULL and errno set. */ +extern char * + xstr_iconveh (const char *src, + const char *from_codeset, const char *to_codeset, + enum iconv_ilseq_handler handler); + + +#ifdef __cplusplus +} +#endif + + +#endif /* _XSTRICONVEH_H */
new file mode 100644 --- /dev/null +++ b/modules/xstriconveh @@ -0,0 +1,28 @@ +Description: +Character set conversion of strings made easy, uses iconv, with out-of-memory +checking. + +Files: +lib/xstriconveh.h +lib/xstriconveh.c + +Depends-on: +striconveh +xalloc + +configure.ac: + +Makefile.am: +lib_SOURCES += xstriconveh.c + +Include: +"xstriconveh.h" + +Link: +$(LTLIBICONV) when linking with libtool, $(LIBICONV) otherwise + +License: +GPL + +Maintainer: +Bruno Haible