#include "libutil/mem_pool.h"
#include "libutil/regexp.h"
#include "libserver/task.h"
+#include "mime_encoding.h"
#include "message.h"
#include <iconv.h>
gsize outlen, pos;
iconv_t ic;
gsize remain, ret, inremain = in->len;
+ rspamd_ftok_t charset_tok;
+
+ RSPAMD_FTOK_FROM_STR (&charset_tok, enc);
+
+ if (rspamd_mime_charset_utf_check (&charset_tok, (gchar *)in->data, in->len)) {
+ g_byte_array_set_size (out, in->len);
+ memcpy (out->data, in->data, out->len);
+
+ return TRUE;
+ }
ic = iconv_open (UTF8_CHARSET, enc);
}
gboolean
-rspamd_mime_charset_utf_check (rspamd_ftok_t *charset, gchar *in, gsize len)
+rspamd_mime_charset_utf_check (rspamd_ftok_t *charset,
+ gchar *in, gsize len)
{
const gchar *end, *p;
gsize remain = len;
* @param in
* @return
*/
-const gchar * rspamd_mime_detect_charset (rspamd_mempool_t *pool,
- const rspamd_ftok_t *in);
+const gchar * rspamd_mime_detect_charset (const rspamd_ftok_t *in,
+ rspamd_mempool_t *pool);
/**
* Convert text chunk to utf-8. Input encoding is substituted using
/* We need to flush and decode old token to out string */
if (rspamd_mime_to_utf8_byte_array (token, decoded_token,
- rspamd_mime_detect_charset (pool, new_charset))) {
+ rspamd_mime_detect_charset (new_charset, pool))) {
g_string_append_len (out, decoded_token->data, decoded_token->len);
}
memcpy (old_charset, new_charset, sizeof (*old_charset));
}
-gchar *
+GString *
rspamd_mime_header_decode (rspamd_mempool_t *pool, const gchar *in,
gsize inlen)
{
break;
}
- return g_string_free (out, FALSE);
+ return out;
}
* @param inlen
* @return
*/
-gchar *rspamd_mime_header_decode (rspamd_mempool_t *pool, const gchar *in,
+GString * rspamd_mime_header_decode (rspamd_mempool_t *pool, const gchar *in,
gsize inlen);
#endif /* SRC_LIBMIME_MIME_HEADERS_H_ */