charset-iconv.c revision 9b0c832da64046a97ddadd57025d7859f537a552
8a5e793a0576250da80371e53aa3e7eba15cdb63Sumit Bose/* Copyright (c) 2002-2010 Dovecot authors, see the included COPYING file */
ecd6aa105c55994db06993bab3c967247656bacbStephen Gallagher
b6840554b4eeda395f5460a56df2eac1f3f97397Lukas Slebodnik#include "lib.h"
b6840554b4eeda395f5460a56df2eac1f3f97397Lukas Slebodnik#include "buffer.h"
b6840554b4eeda395f5460a56df2eac1f3f97397Lukas Slebodnik#include "unichar.h"
b6840554b4eeda395f5460a56df2eac1f3f97397Lukas Slebodnik#include "charset-utf8.h"
b6840554b4eeda395f5460a56df2eac1f3f97397Lukas Slebodnik
b6840554b4eeda395f5460a56df2eac1f3f97397Lukas Slebodnik#ifdef HAVE_ICONV
1f7573f8c74ff0f488a15969caed13034a95bd0fStephen Gallagher
1f7573f8c74ff0f488a15969caed13034a95bd0fStephen Gallagher#include <iconv.h>
b6840554b4eeda395f5460a56df2eac1f3f97397Lukas Slebodnik#include <ctype.h>
bfbf5cb0f00c60c0f000f56c282377b13b9a89abSumit Bose
2344d7f71dd80618a41745b0818b46895fa61b2cLukas Slebodnikstruct charset_translation {
4eafef4572f4e5ff6b589c80db0b9417724f229fJan Cholasta iconv_t cd;
4eafef4572f4e5ff6b589c80db0b9417724f229fJan Cholasta enum charset_flags flags;
4eafef4572f4e5ff6b589c80db0b9417724f229fJan Cholasta};
4eafef4572f4e5ff6b589c80db0b9417724f229fJan Cholasta
4eafef4572f4e5ff6b589c80db0b9417724f229fJan Cholastaint charset_to_utf8_begin(const char *charset, enum charset_flags flags,
b96988a35bfb5f6faf2e364ae966166398afeca3Stephen Gallagher struct charset_translation **t_r)
4eafef4572f4e5ff6b589c80db0b9417724f229fJan Cholasta{
4eafef4572f4e5ff6b589c80db0b9417724f229fJan Cholasta struct charset_translation *t;
4eafef4572f4e5ff6b589c80db0b9417724f229fJan Cholasta iconv_t cd;
4eafef4572f4e5ff6b589c80db0b9417724f229fJan Cholasta
a098b26a2a902cfb2968ca44604f61bf000d8413Stephen Gallagher if (charset_is_utf8(charset))
a098b26a2a902cfb2968ca44604f61bf000d8413Stephen Gallagher cd = (iconv_t)-1;
78e5b91e6b22efbcd0621144b104ac9dfd487e5bJakub Hrozek else {
287e76479d68db4134274d4a4fca5fe0fbc9a605Jan Cholasta cd = iconv_open("UTF-8", charset);
78e5b91e6b22efbcd0621144b104ac9dfd487e5bJakub Hrozek if (cd == (iconv_t)-1)
78e5b91e6b22efbcd0621144b104ac9dfd487e5bJakub Hrozek return -1;
0b52717b76bf306afd30bbeb6d6c619365cfb548Stephen Gallagher }
0b52717b76bf306afd30bbeb6d6c619365cfb548Stephen Gallagher
0b52717b76bf306afd30bbeb6d6c619365cfb548Stephen Gallagher t = i_new(struct charset_translation, 1);
2344d7f71dd80618a41745b0818b46895fa61b2cLukas Slebodnik t->cd = cd;
12a73062d84fec27536b09fd275ea248d14b93e5Jakub Hrozek t->flags = flags;
12a73062d84fec27536b09fd275ea248d14b93e5Jakub Hrozek *t_r = t;
12a73062d84fec27536b09fd275ea248d14b93e5Jakub Hrozek return 0;
2344d7f71dd80618a41745b0818b46895fa61b2cLukas Slebodnik}
c3b1e99007d5f0069fbbd32a3df799d71ea4882eSumit Bose
c3b1e99007d5f0069fbbd32a3df799d71ea4882eSumit Bosevoid charset_to_utf8_end(struct charset_translation **_t)
c3b1e99007d5f0069fbbd32a3df799d71ea4882eSumit Bose{
c3b1e99007d5f0069fbbd32a3df799d71ea4882eSumit Bose struct charset_translation *t = *_t;
c3b1e99007d5f0069fbbd32a3df799d71ea4882eSumit Bose
8a5e793a0576250da80371e53aa3e7eba15cdb63Sumit Bose *_t = NULL;
8a5e793a0576250da80371e53aa3e7eba15cdb63Sumit Bose
Error!

 

There was an error!

null

java.lang.NullPointerException