X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/disorder/blobdiff_plain/812b526d127c6657e571db8b33a58137af6709cd..92db088e5b292c1180a090ed369b9851e933e610:/lib/charset.c diff --git a/lib/charset.c b/lib/charset.c index e9c503e..feb4469 100644 --- a/lib/charset.c +++ b/lib/charset.c @@ -1,6 +1,6 @@ /* * This file is part of DisOrder. - * Copyright (C) 2004, 2005, 2007, 2008 Richard Kettlewell + * Copyright (C) 2004, 2005, 2007, 2008, 2013 Richard Kettlewell * * 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 @@ -19,9 +19,13 @@ #include "common.h" -#include +#if HAVE_ICONV_H +# include +#endif #include -#include +#if HAVE_LANGINFO_H +# include +#endif #include "mem.h" #include "log.h" @@ -45,7 +49,7 @@ static void *convert(const char *from, const char *to, size_t bufsize = 0, sl, dl; if((i = iconv_open(to, from)) == (iconv_t)-1) - fatal(errno, "error calling iconv_open"); + disorder_fatal(errno, "error calling iconv_open"); do { bufsize = bufsize ? 2 * bufsize : 32; buf = xrealloc_noptr(buf, bufsize); @@ -59,34 +63,53 @@ static void *convert(const char *from, const char *to, } while(len == (size_t)-1 && errno == E2BIG); iconv_close(i); if(len == (size_t)-1) { - error(errno, "error converting from %s to %s", from, to); + disorder_error(errno, "error converting from %s to %s", from, to); return 0; } return buf; } -/** @brief Convert from the local multibyte encoding to UTF-8 */ +/** @brief Convert from the local multibyte encoding to UTF-8 + * @param mb String in current locale's multibyte encoding + * @return Same string in UTF-8 + */ char *mb2utf8(const char *mb) { return convert(nl_langinfo(CODESET), "UTF-8", mb, strlen(mb) + 1); } -/** @brief Convert from UTF-8 to the local multibyte encoding */ +/** @brief Convert from UTF-8 to the local multibyte encoding + * @param utf8 String in UTF-8 + * @return Same string in current locale's multibyte encoding + */ char *utf82mb(const char *utf8) { return convert("UTF-8", nl_langinfo(CODESET), utf8, strlen(utf8) + 1); } -/** @brief Convert from encoding @p from to UTF-8 */ +/** @brief Convert from encoding @p from to UTF-8 + * @param from Source encoding + * @param any String in encoding @p from + * @return @p any converted to UTF-8 + */ char *any2utf8(const char *from, const char *any) { return convert(from, "UTF-8", any, strlen(any) + 1); } -/** @brief Convert from encoding @p from to the local multibyte encoding */ +/** @brief Convert from encoding @p from to the local multibyte encoding + * @param from Source encoding + * @param any String in encoding @p from + * @return @p any converted to current locale's multibyte encoding + */ char *any2mb(const char *from, const char *any) { if(from) return convert(from, nl_langinfo(CODESET), any, strlen(any) + 1); else return xstrdup(any); } -/** @brief Convert from encoding @p from to encoding @p to */ +/** @brief Convert from encoding @p from to encoding @p to + * @param from Source encoding + * @param to Destination encoding + * @param any String in encoding @p from + * @return @p any converted to encoding @p to + */ char *any2any(const char *from, const char *to, const char *any) {