annotate src/lib-imap/imap-quote.c @ 339:6f4eeb6a0a0d HEAD

Several fields in BODY were unquoted.
author Timo Sirainen <tss@iki.fi>
date Tue, 01 Oct 2002 00:18:12 +0300
parents
children e524da896d92
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
339
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
1 /* Copyright (C) 2002 Timo Sirainen */
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
2
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
3 #include "lib.h"
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
4 #include "temp-string.h"
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
5
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
6 #define IS_BREAK_CHAR(c) \
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
7 ((c) == ' ' || (c) == '\t' || \
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
8 (c) == ',' || (c) == ':' || (c) == ';' || (c) == '@' || \
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
9 (c) == '<' || (c) == '>' || (c) == '(' || (c) == ')' || \
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
10 (c) == '[' || (c) == ']' || (c) == '=')
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
11
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
12 #define IS_BREAK_OR_CRLF_CHAR(c) \
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
13 (IS_BREAK_CHAR(c) || (c) == '\r' || (c) == '\n')
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
14
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
15 static size_t next_token_quoted(const char *value, size_t len,
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
16 int *need_qp, int *quoted)
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
17 {
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
18 size_t i;
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
19
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
20 *need_qp = FALSE;
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
21 *quoted = TRUE;
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
22
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
23 for (i = *quoted ? 0 : 1; i < len; i++) {
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
24 if ((unsigned char)value[i] & 0x80)
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
25 *need_qp = TRUE;
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
26
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
27 if (value[i] == '"' || value[i] == '\r' || value[i] == '\n') {
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
28 i++;
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
29 *quoted = value[i] == '"';
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
30 break;
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
31 }
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
32 }
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
33
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
34 return i;
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
35 }
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
36
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
37 static size_t next_token(const char *value, size_t len,
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
38 int *need_qp, int *quoted, int qp_on)
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
39 {
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
40 size_t i = 0;
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
41
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
42 if (value[0] == '"' || *quoted)
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
43 return next_token_quoted(value, len, need_qp, quoted);
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
44
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
45 *need_qp = FALSE;
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
46
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
47 if (qp_on) {
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
48 /* skip spaces, so we don't end up QP'ing word at a time */
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
49 for (i = 0; i < len; i++) {
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
50 if (value[i] != ' ')
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
51 break;
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
52 }
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
53
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
54 if (i == len)
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
55 return i;
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
56 }
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
57
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
58 if (IS_BREAK_OR_CRLF_CHAR(value[i])) {
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
59 /* return all break-chars in one token */
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
60 for (i++; i < len; i++) {
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
61 if (!IS_BREAK_CHAR(value[i]))
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
62 break;
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
63 }
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
64
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
65 return i;
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
66 }
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
67
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
68 /* then stop at break-char */
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
69 for (; i < len; i++) {
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
70 if ((unsigned char)value[i] & 0x80)
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
71 *need_qp = TRUE;
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
72
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
73 if (IS_BREAK_OR_CRLF_CHAR(value[i]))
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
74 break;
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
75 }
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
76
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
77 return i;
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
78 }
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
79
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
80 static void append_quoted_qp(TempString *str, const char *value, size_t len)
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
81 {
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
82 size_t i;
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
83 unsigned char c;
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
84
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
85 /* do this the easy way, it's already broken behaviour to leave the
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
86 8bit text in mailbox, so we shouldn't need to try too hard to make
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
87 it readable. Keep 'A'..'Z', 'a'..'z' and '0'..'9', QP rest */
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
88
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
89 for (i = 0; i < len; i++) {
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
90 if (value[i] == ' ')
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
91 t_string_append_c(str, '_');
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
92 else if ((value[i] >= 'A' && value[i] <= 'Z') ||
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
93 (value[i] >= 'a' && value[i] <= 'z') ||
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
94 (value[i] >= '0' && value[i] <= '9')) {
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
95 t_string_append_c(str, value[i]);
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
96 } else {
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
97 t_string_append_c(str, '=');
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
98 c = (unsigned char)value[i] >> 4;
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
99 t_string_append_c(str, c < 10 ? (c+'0') : (c-10+'A'));
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
100 c = (unsigned char)value[i] & 0x0f;
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
101 t_string_append_c(str, c < 10 ? (c+'0') : (c-10+'A'));
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
102 }
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
103 }
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
104 }
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
105
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
106 static void append_quoted(TempString *str, const char *value, size_t len)
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
107 {
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
108 size_t i;
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
109
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
110 for (i = 0; i < len; i++) {
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
111 if (value[i] == '\\' || value[i] == '"')
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
112 t_string_append_c(str, '\\');
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
113 t_string_append_c(str, value[i]);
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
114 }
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
115 }
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
116
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
117 /* does two things: 1) escape '\' and '"' characters, 2) 8bit text -> QP */
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
118 static TempString *get_quoted_str(const char *value, size_t value_len)
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
119 {
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
120 TempString *str;
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
121 size_t token_len;
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
122 int qp, need_qp, quoted;
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
123
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
124 str = t_string_new(value_len * 2);
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
125 qp = FALSE;
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
126 quoted = FALSE;
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
127
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
128 t_string_append_c(str, '"');
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
129 while (value_len > 0) {
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
130 token_len = next_token(value, value_len, &need_qp, &quoted, qp);
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
131 i_assert(token_len > 0 && token_len <= value_len);
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
132
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
133 /* header may be split to multiple lines, we don't want them */
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
134 while (token_len > 0 && (value[0] == '\r' ||
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
135 value[0] == '\n')) {
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
136 value++;
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
137 token_len--;
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
138 value_len--;
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
139 }
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
140
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
141 if (need_qp && !qp) {
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
142 t_string_append(str, "=?x-unknown?Q?");
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
143 qp = TRUE;
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
144 } else if (!need_qp && qp) {
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
145 t_string_append(str, "?=");
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
146 qp = FALSE;
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
147 }
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
148
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
149 if (need_qp)
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
150 append_quoted_qp(str, value, token_len);
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
151 else
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
152 append_quoted(str, value, token_len);
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
153
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
154 value += token_len;
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
155 value_len -= token_len;
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
156 }
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
157
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
158 if (qp) t_string_append(str, "?=");
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
159 t_string_append_c(str, '"');
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
160
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
161 return str;
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
162 }
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
163
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
164 const char *imap_quote_str_nil(const char *value)
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
165 {
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
166 return value == NULL ? "NIL" :
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
167 get_quoted_str(value, strlen(value))->str;
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
168 }
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
169
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
170 char *imap_quote_value(Pool pool, const char *value, size_t value_len)
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
171 {
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
172 TempString *str;
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
173
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
174 str = get_quoted_str(value, value_len);
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
175 return p_strndup(pool, str->str, str->len);
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
176 }