annotate src/lib-imap/imap-utf7.c @ 9595:166a188f9165 HEAD

mbox: Fields weren't being added to cache file during message saving.
author Timo Sirainen <tss@iki.fi>
date Fri, 30 Jul 2010 16:55:58 +0100
parents 00cd9aacd03c
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
9532
00cd9aacd03c Updated copyright notices to include year 2010.
Timo Sirainen <tss@iki.fi>
parents: 8590
diff changeset
1 /* Copyright (c) 2008-2010 Dovecot authors, see the included COPYING file */
8381
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
2
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
3 #include "lib.h"
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
4 #include "str.h"
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
5 #include "unichar.h"
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
6 #include "imap-utf7.h"
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
7
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
8 static const char imap_b64enc[] =
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
9 "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+,";
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
10
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
11 #define XX 0xff
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
12 static const unsigned char imap_b64dec[256] = {
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
13 XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX,
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
14 XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX,
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
15 XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,62, 63,XX,XX,XX,
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
16 52,53,54,55, 56,57,58,59, 60,61,XX,XX, XX,XX,XX,XX,
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
17 XX, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11,12,13,14,
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
18 15,16,17,18, 19,20,21,22, 23,24,25,XX, XX,XX,XX,XX,
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
19 XX,26,27,28, 29,30,31,32, 33,34,35,36, 37,38,39,40,
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
20 41,42,43,44, 45,46,47,48, 49,50,51,XX, XX,XX,XX,XX,
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
21 XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX,
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
22 XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX,
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
23 XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX,
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
24 XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX,
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
25 XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX,
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
26 XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX,
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
27 XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX,
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
28 XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
29 };
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
30
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
31 static void
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
32 mbase64_encode(string_t *dest, const unsigned char *in, unsigned int len)
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
33 {
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
34 str_append_c(dest, '&');
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
35 while (len >= 3) {
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
36 str_append_c(dest, imap_b64enc[in[0] >> 2]);
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
37 str_append_c(dest, imap_b64enc[((in[0] & 3) << 4) |
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
38 (in[1] >> 4)]);
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
39 str_append_c(dest, imap_b64enc[((in[1] & 0x0f) << 2) |
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
40 ((in[2] & 0xc0) >> 6)]);
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
41 str_append_c(dest, imap_b64enc[in[2] & 0x3f]);
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
42 in += 3;
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
43 len -= 3;
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
44 }
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
45 if (len > 0) {
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
46 str_append_c(dest, imap_b64enc[in[0] >> 2]);
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
47 if (len == 1)
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
48 str_append_c(dest, imap_b64enc[(in[0] & 0x03) << 4]);
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
49 else {
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
50 str_append_c(dest, imap_b64enc[((in[0] & 0x03) << 4) |
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
51 (in[1] >> 4)]);
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
52 str_append_c(dest, imap_b64enc[(in[1] & 0x0f) << 2]);
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
53 }
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
54 }
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
55 str_append_c(dest, '-');
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
56 }
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
57
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
58 int imap_utf8_to_utf7(const char *src, string_t *dest)
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
59 {
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
60 const char *p;
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
61 unichar_t chr;
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
62 uint8_t *utf16, *u;
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
63 uint16_t u16;
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
64
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
65 for (p = src; *p != '\0'; p++) {
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
66 if (*p == '&' || (unsigned char)*p >= 0x80)
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
67 break;
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
68 }
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
69 if (*p == '\0') {
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
70 /* no ASCII characters that need to be encoded */
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
71 str_append(dest, src);
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
72 return 0;
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
73 }
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
74
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
75 /* at least one encoded character */
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
76 str_append_n(dest, src, p-src);
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
77 utf16 = t_malloc(strlen(p)*2);
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
78 while (*p != '\0') {
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
79 if (*p == '&') {
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
80 str_append(dest, "&-");
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
81 p++;
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
82 continue;
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
83 }
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
84 if ((unsigned char)*p < 0x80) {
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
85 str_append_c(dest, *p);
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
86 p++;
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
87 continue;
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
88 }
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
89
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
90 u = utf16;
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
91 while ((unsigned char)*p >= 0x80) {
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
92 if (uni_utf8_get_char(p, &chr) <= 0)
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
93 return -1;
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
94 /* @UNSAFE */
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
95 if (chr < UTF16_SURROGATE_BASE) {
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
96 *u++ = chr >> 8;
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
97 *u++ = chr & 0xff;
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
98 } else {
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
99 u16 = UTF16_SURROGATE_HIGH(chr);
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
100 *u++ = u16 >> 8;
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
101 *u++ = u16 & 0xff;
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
102 u16 = UTF16_SURROGATE_LOW(chr);
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
103 *u++ = u16 >> 8;
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
104 *u++ = u16 & 0xff;
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
105 }
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
106 p += uni_utf8_char_bytes(*p);
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
107 }
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
108 mbase64_encode(dest, utf16, u-utf16);
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
109 }
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
110 return 0;
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
111 }
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
112
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
113 static int utf16buf_to_utf8(string_t *dest, const unsigned char output[4],
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
114 unsigned int *_pos, unsigned int len)
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
115 {
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
116 unsigned int pos = *_pos;
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
117 uint16_t high, low;
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
118 unichar_t chr;
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
119
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
120 if (len % 2 != 0)
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
121 return -1;
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
122
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
123 high = (output[pos % 4] << 8) | output[(pos+1) % 4];
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
124 if (high < UTF16_SURROGATE_HIGH_FIRST ||
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
125 high > UTF16_SURROGATE_HIGH_MAX) {
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
126 /* single byte */
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
127 uni_ucs4_to_utf8_c(high, dest);
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
128 *_pos = (pos + 2) % 4;
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
129 return 0;
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
130 }
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
131
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
132 if (high > UTF16_SURROGATE_HIGH_LAST)
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
133 return -1;
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
134 if (len != 4) {
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
135 /* missing the second character */
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
136 return -1;
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
137 }
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
138
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
139 low = (output[(pos+2)%4] << 8) | output[(pos+3) % 4];
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
140 if (low < UTF16_SURROGATE_LOW_FIRST || low > UTF16_SURROGATE_LOW_LAST)
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
141 return -1;
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
142
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
143 chr = UTF16_SURROGATE_BASE +
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
144 (((high & UTF16_SURROGATE_MASK) << UTF16_SURROGATE_SHIFT) |
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
145 (low & UTF16_SURROGATE_MASK));
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
146 uni_ucs4_to_utf8_c(chr, dest);
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
147 return 0;
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
148 }
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
149
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
150 static int mbase64_decode_to_utf8(string_t *dest, const char **_src)
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
151 {
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
152 const char *src = *_src;
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
153 unsigned char input[4], output[4];
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
154 unsigned int outstart = 0, outpos = 0;
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
155
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
156 while (*src != '-') {
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
157 input[0] = imap_b64dec[(uint8_t)src[0]];
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
158 input[1] = imap_b64dec[(uint8_t)src[1]];
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
159 if (input[0] == 0xff || input[1] == 0xff)
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
160 return -1;
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
161
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
162 output[outpos % 4] = (input[0] << 2) | (input[1] >> 4);
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
163 if (++outpos % 4 == outstart) {
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
164 if (utf16buf_to_utf8(dest, output, &outstart, 4) < 0)
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
165 return -1;
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
166 }
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
167
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
168 input[2] = imap_b64dec[(uint8_t)src[2]];
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
169 if (input[2] == 0xff) {
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
170 if (src[2] != '-')
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
171 return -1;
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
172
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
173 src += 2;
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
174 break;
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
175 }
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
176
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
177 output[outpos % 4] = (input[1] << 4) | (input[2] >> 2);
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
178 if (++outpos % 4 == outstart) {
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
179 if (utf16buf_to_utf8(dest, output, &outstart, 4) < 0)
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
180 return -1;
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
181 }
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
182
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
183 input[3] = imap_b64dec[(uint8_t)src[3]];
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
184 if (input[3] == 0xff) {
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
185 if (src[3] != '-')
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
186 return -1;
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
187
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
188 src += 3;
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
189 break;
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
190 }
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
191
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
192 output[outpos % 4] = ((input[2] << 6) & 0xc0) | input[3];
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
193 if (++outpos % 4 == outstart) {
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
194 if (utf16buf_to_utf8(dest, output, &outstart, 4) < 0)
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
195 return -1;
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
196 }
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
197
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
198 src += 4;
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
199 }
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
200 if (outstart != outpos % 4) {
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
201 if (utf16buf_to_utf8(dest, output, &outstart,
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
202 (4 + outpos - outstart) % 4) < 0)
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
203 return -1;
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
204 }
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
205
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
206 /* found ending '-' */
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
207 *_src = src + 1;
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
208 return 0;
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
209 }
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
210
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
211 int imap_utf7_to_utf8(const char *src, string_t *dest)
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
212 {
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
213 const char *p;
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
214
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
215 for (p = src; *p != '\0'; p++) {
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
216 if (*p == '&' || (unsigned char)*p >= 0x80)
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
217 break;
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
218 }
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
219 if (*p == '\0') {
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
220 /* no IMAP-UTF-7 encoded characters */
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
221 str_append(dest, src);
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
222 return 0;
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
223 }
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
224 if ((unsigned char)*p >= 0x80) {
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
225 /* 8bit characters - the input is broken */
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
226 return -1;
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
227 }
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
228
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
229 /* at least one encoded character */
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
230 str_append_n(dest, src, p-src);
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
231 while (*p != '\0') {
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
232 if (*p == '&') {
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
233 if (*++p == '-') {
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
234 str_append_c(dest, '&');
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
235 p++;
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
236 } else {
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
237 if (mbase64_decode_to_utf8(dest, &p) < 0)
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
238 return -1;
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
239 if (p[0] == '&' && p[1] != '-') {
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
240 /* &...-& */
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
241 return -1;
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
242 }
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
243 }
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
244 } else {
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
245 str_append_c(dest, *p++);
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
246 }
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
247 }
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
248 return 0;
81c0fe5bd635 Added code for encoding and decoding IMAP's modified-UTF7 strings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
249 }