annotate src/lib-imap/imap-quote.c @ 898:0d5be52d7131 HEAD

Use unsigned char* when accessing non-NUL terminating strings. Compiler warnings would then notify about accidentally passing them to functions which require them NUL-terminated. Changed a few functions to use void* to avoid unneeded casting.
author Timo Sirainen <tss@iki.fi>
date Sat, 04 Jan 2003 19:26:29 +0200
parents 41ec8cadd238
children fd8888f6f037
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"
833
41ec8cadd238 Replaced TempString with a String which can use any memory pool and uses
Timo Sirainen <tss@iki.fi>
parents: 579
diff changeset
4 #include "str.h"
579
e524da896d92 Several minor fixes: signess, casting away const, missing static, etc.
Timo Sirainen <tss@iki.fi>
parents: 339
diff changeset
5 #include "imap-quote.h"
339
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
6
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
7 #define IS_BREAK_CHAR(c) \
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
8 ((c) == ' ' || (c) == '\t' || \
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) == '(' || (c) == ')' || \
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
11 (c) == '[' || (c) == ']' || (c) == '=')
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
12
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
13 #define IS_BREAK_OR_CRLF_CHAR(c) \
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
14 (IS_BREAK_CHAR(c) || (c) == '\r' || (c) == '\n')
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
15
898
0d5be52d7131 Use unsigned char* when accessing non-NUL terminating strings. Compiler
Timo Sirainen <tss@iki.fi>
parents: 833
diff changeset
16 static size_t next_token_quoted(const unsigned char *value, size_t len,
339
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
17 int *need_qp, int *quoted)
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
18 {
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
19 size_t i;
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
20
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
21 *need_qp = FALSE;
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
22 *quoted = TRUE;
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
23
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
24 for (i = *quoted ? 0 : 1; i < len; i++) {
898
0d5be52d7131 Use unsigned char* when accessing non-NUL terminating strings. Compiler
Timo Sirainen <tss@iki.fi>
parents: 833
diff changeset
25 if (value[i] & 0x80)
339
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
26 *need_qp = TRUE;
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
27
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
28 if (value[i] == '"' || value[i] == '\r' || value[i] == '\n') {
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
29 i++;
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
30 *quoted = value[i] == '"';
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
31 break;
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
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
35 return i;
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
898
0d5be52d7131 Use unsigned char* when accessing non-NUL terminating strings. Compiler
Timo Sirainen <tss@iki.fi>
parents: 833
diff changeset
38 static size_t next_token(const unsigned char *value, size_t len,
339
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
39 int *need_qp, int *quoted, int qp_on)
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
40 {
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
41 size_t i = 0;
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
42
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
43 if (value[0] == '"' || *quoted)
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
44 return next_token_quoted(value, len, need_qp, quoted);
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
45
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
46 *need_qp = FALSE;
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
47
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
48 if (qp_on) {
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
49 /* 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
50 for (i = 0; i < len; i++) {
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
51 if (value[i] != ' ')
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
52 break;
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
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
55 if (i == len)
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
56 return i;
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
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
59 if (IS_BREAK_OR_CRLF_CHAR(value[i])) {
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
60 /* return all break-chars in one token */
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
61 for (i++; i < len; i++) {
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
62 if (!IS_BREAK_CHAR(value[i]))
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
63 break;
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
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
66 return i;
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
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
69 /* then stop at break-char */
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
70 for (; i < len; i++) {
898
0d5be52d7131 Use unsigned char* when accessing non-NUL terminating strings. Compiler
Timo Sirainen <tss@iki.fi>
parents: 833
diff changeset
71 if (value[i] & 0x80)
339
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
72 *need_qp = TRUE;
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
73
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
74 if (IS_BREAK_OR_CRLF_CHAR(value[i]))
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
75 break;
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
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
78 return i;
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
898
0d5be52d7131 Use unsigned char* when accessing non-NUL terminating strings. Compiler
Timo Sirainen <tss@iki.fi>
parents: 833
diff changeset
81 static void append_quoted_qp(String *str, const unsigned char *value,
0d5be52d7131 Use unsigned char* when accessing non-NUL terminating strings. Compiler
Timo Sirainen <tss@iki.fi>
parents: 833
diff changeset
82 size_t len)
339
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
83 {
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
84 size_t i;
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
85 unsigned char c;
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
86
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
87 /* 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
88 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
89 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
90
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
91 for (i = 0; i < len; i++) {
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
92 if (value[i] == ' ')
833
41ec8cadd238 Replaced TempString with a String which can use any memory pool and uses
Timo Sirainen <tss@iki.fi>
parents: 579
diff changeset
93 str_append_c(str, '_');
339
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
94 else if ((value[i] >= 'A' && value[i] <= 'Z') ||
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
95 (value[i] >= 'a' && value[i] <= 'z') ||
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
96 (value[i] >= '0' && value[i] <= '9')) {
833
41ec8cadd238 Replaced TempString with a String which can use any memory pool and uses
Timo Sirainen <tss@iki.fi>
parents: 579
diff changeset
97 str_append_c(str, value[i]);
339
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
98 } else {
833
41ec8cadd238 Replaced TempString with a String which can use any memory pool and uses
Timo Sirainen <tss@iki.fi>
parents: 579
diff changeset
99 str_append_c(str, '=');
898
0d5be52d7131 Use unsigned char* when accessing non-NUL terminating strings. Compiler
Timo Sirainen <tss@iki.fi>
parents: 833
diff changeset
100 c = value[i] >> 4;
833
41ec8cadd238 Replaced TempString with a String which can use any memory pool and uses
Timo Sirainen <tss@iki.fi>
parents: 579
diff changeset
101 str_append_c(str, c < 10 ? (c+'0') : (c-10+'A'));
898
0d5be52d7131 Use unsigned char* when accessing non-NUL terminating strings. Compiler
Timo Sirainen <tss@iki.fi>
parents: 833
diff changeset
102 c = value[i] & 0x0f;
833
41ec8cadd238 Replaced TempString with a String which can use any memory pool and uses
Timo Sirainen <tss@iki.fi>
parents: 579
diff changeset
103 str_append_c(str, c < 10 ? (c+'0') : (c-10+'A'));
339
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 }
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
107
898
0d5be52d7131 Use unsigned char* when accessing non-NUL terminating strings. Compiler
Timo Sirainen <tss@iki.fi>
parents: 833
diff changeset
108 static void append_quoted(String *str, const unsigned char *value, size_t len)
339
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 size_t i;
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
111
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
112 for (i = 0; i < len; i++) {
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
113 if (value[i] == '\\' || value[i] == '"')
833
41ec8cadd238 Replaced TempString with a String which can use any memory pool and uses
Timo Sirainen <tss@iki.fi>
parents: 579
diff changeset
114 str_append_c(str, '\\');
41ec8cadd238 Replaced TempString with a String which can use any memory pool and uses
Timo Sirainen <tss@iki.fi>
parents: 579
diff changeset
115 str_append_c(str, value[i]);
339
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 }
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
118
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
119 /* does two things: 1) escape '\' and '"' characters, 2) 8bit text -> QP */
898
0d5be52d7131 Use unsigned char* when accessing non-NUL terminating strings. Compiler
Timo Sirainen <tss@iki.fi>
parents: 833
diff changeset
120 static String *get_quoted_str(const unsigned char *value, size_t value_len)
339
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
121 {
833
41ec8cadd238 Replaced TempString with a String which can use any memory pool and uses
Timo Sirainen <tss@iki.fi>
parents: 579
diff changeset
122 String *str;
339
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
123 size_t token_len;
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
124 int qp, need_qp, quoted;
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
125
833
41ec8cadd238 Replaced TempString with a String which can use any memory pool and uses
Timo Sirainen <tss@iki.fi>
parents: 579
diff changeset
126 str = t_str_new(value_len * 2);
339
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
127 qp = FALSE;
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
128 quoted = FALSE;
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
129
833
41ec8cadd238 Replaced TempString with a String which can use any memory pool and uses
Timo Sirainen <tss@iki.fi>
parents: 579
diff changeset
130 str_append_c(str, '"');
339
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
131 while (value_len > 0) {
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
132 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
133 i_assert(token_len > 0 && token_len <= value_len);
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
134
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
135 /* 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
136 while (token_len > 0 && (value[0] == '\r' ||
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
137 value[0] == '\n')) {
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
138 value++;
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
139 token_len--;
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
140 value_len--;
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
141 }
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
142
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
143 if (need_qp && !qp) {
833
41ec8cadd238 Replaced TempString with a String which can use any memory pool and uses
Timo Sirainen <tss@iki.fi>
parents: 579
diff changeset
144 str_append(str, "=?x-unknown?Q?");
339
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
145 qp = TRUE;
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
146 } else if (!need_qp && qp) {
833
41ec8cadd238 Replaced TempString with a String which can use any memory pool and uses
Timo Sirainen <tss@iki.fi>
parents: 579
diff changeset
147 str_append(str, "?=");
339
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
148 qp = FALSE;
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
149 }
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
150
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
151 if (need_qp)
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
152 append_quoted_qp(str, value, token_len);
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
153 else
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
154 append_quoted(str, value, token_len);
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
155
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
156 value += token_len;
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
157 value_len -= token_len;
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
158 }
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
159
833
41ec8cadd238 Replaced TempString with a String which can use any memory pool and uses
Timo Sirainen <tss@iki.fi>
parents: 579
diff changeset
160 if (qp) str_append(str, "?=");
41ec8cadd238 Replaced TempString with a String which can use any memory pool and uses
Timo Sirainen <tss@iki.fi>
parents: 579
diff changeset
161 str_append_c(str, '"');
339
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 return str;
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
164 }
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 const char *imap_quote_str_nil(const char *value)
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
167 {
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
168 return value == NULL ? "NIL" :
898
0d5be52d7131 Use unsigned char* when accessing non-NUL terminating strings. Compiler
Timo Sirainen <tss@iki.fi>
parents: 833
diff changeset
169 str_c(get_quoted_str((const unsigned char *) value,
0d5be52d7131 Use unsigned char* when accessing non-NUL terminating strings. Compiler
Timo Sirainen <tss@iki.fi>
parents: 833
diff changeset
170 strlen(value)));
339
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
898
0d5be52d7131 Use unsigned char* when accessing non-NUL terminating strings. Compiler
Timo Sirainen <tss@iki.fi>
parents: 833
diff changeset
173 char *imap_quote_value(Pool pool, const unsigned char *value, size_t value_len)
339
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
174 {
833
41ec8cadd238 Replaced TempString with a String which can use any memory pool and uses
Timo Sirainen <tss@iki.fi>
parents: 579
diff changeset
175 String *str;
339
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
176
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
177 str = get_quoted_str(value, value_len);
898
0d5be52d7131 Use unsigned char* when accessing non-NUL terminating strings. Compiler
Timo Sirainen <tss@iki.fi>
parents: 833
diff changeset
178 return p_strndup(pool, str_data(str), str_len(str));
339
6f4eeb6a0a0d Several fields in BODY were unquoted.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
179 }