From: Christian Grothoff Date: Sat, 24 Dec 2011 21:40:49 +0000 (+0000) Subject: -LRN: new charset conversion functions / #2031 X-Git-Tag: initial-import-from-subversion-38251~15533 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=e8d4e1edd97fb8cc6756a953681e1f6a2a5beb68;p=oweals%2Fgnunet.git -LRN: new charset conversion functions / #2031 --- diff --git a/src/include/gnunet_strings_lib.h b/src/include/gnunet_strings_lib.h index 4efecc863..edeccaf3b 100644 --- a/src/include/gnunet_strings_lib.h +++ b/src/include/gnunet_strings_lib.h @@ -85,6 +85,18 @@ char * GNUNET_STRINGS_byte_size_fancy (unsigned long long size); +/** + * Convert the len characters long character sequence + * given in input that is in the given input charset + * to a string in given output charset. + * @return the converted string (0-terminated), + * if conversion fails, a copy of the orignal + * string is returned. + */ +char * +GNUNET_STRINGS_conv (const char *input, size_t len, + const char *input_charset, const char *output_charset); + /** * Convert the len characters long character sequence * given in input that is in the given charset @@ -98,6 +110,17 @@ GNUNET_STRINGS_byte_size_fancy (unsigned long long size); char * GNUNET_STRINGS_to_utf8 (const char *input, size_t len, const char *charset); +/** + * Convert the len bytes-long UTF-8 string + * given in input to the given charset. + + * @return the converted string (0-terminated), + * if conversion fails, a copy of the orignal + * string is returned. + */ +char * +GNUNET_STRINGS_from_utf8 (const char *input, size_t len, const char *charset); + /** * Complete filename (a la shell) from abbrevition. diff --git a/src/util/strings.c b/src/util/strings.c index 2b5538b35..bd0a8eb52 100644 --- a/src/util/strings.c +++ b/src/util/strings.c @@ -327,17 +327,16 @@ GNUNET_STRINGS_fancy_time_to_relative (const char *fancy_size, return GNUNET_OK; } - /** * Convert the len characters long character sequence - * given in input that is in the given charset - * to UTF-8. + * given in input that is in the given input charset + * to a string in given output charset. * @return the converted string (0-terminated), * if conversion fails, a copy of the orignal * string is returned. */ char * -GNUNET_STRINGS_to_utf8 (const char *input, size_t len, const char *charset) +GNUNET_STRINGS_conv (const char *input, size_t len, const char *input_charset, const char *output_charset) { char *ret; @@ -348,12 +347,12 @@ GNUNET_STRINGS_to_utf8 (const char *input, size_t len, const char *charset) char *itmp; iconv_t cd; - cd = iconv_open ("UTF-8", charset); + cd = iconv_open (output_charset, input_charset); if (cd == (iconv_t) - 1) { LOG_STRERROR (GNUNET_ERROR_TYPE_WARNING, "iconv_open"); - LOG (GNUNET_ERROR_TYPE_WARNING, _("Character set requested was `%s'\n"), - charset); + LOG (GNUNET_ERROR_TYPE_WARNING, _("Character sets requested were `%s'->`%s'\n"), + input_charset, output_charset); ret = GNUNET_malloc (len + 1); memcpy (ret, input, len); ret[len] = '\0'; @@ -395,6 +394,36 @@ GNUNET_STRINGS_to_utf8 (const char *input, size_t len, const char *charset) } +/** + * Convert the len characters long character sequence + * given in input that is in the given charset + * to UTF-8. + * @return the converted string (0-terminated), + * if conversion fails, a copy of the orignal + * string is returned. + */ +char * +GNUNET_STRINGS_to_utf8 (const char *input, size_t len, const char *charset) +{ + return GNUNET_STRINGS_conv (input, len, charset, "UTF-8"); +} + +/** + * Convert the len bytes-long UTF-8 string + * given in input to the given charset. + + * @return the converted string (0-terminated), + * if conversion fails, a copy of the orignal + * string is returned. + */ +char * +GNUNET_STRINGS_from_utf8 (const char *input, size_t len, const char *charset) +{ + return GNUNET_STRINGS_conv (input, len, "UTF-8", charset); +} + + + /** * Complete filename (a la shell) from abbrevition. * @param fil the name of the file, may contain ~/ or