Skip to content

Commit cef4b94

Browse files
committed
Code cleanup in mbfilter_utf7imap.c
1 parent 8abc5e6 commit cef4b94

File tree

2 files changed

+44
-70
lines changed

2 files changed

+44
-70
lines changed

ext/mbstring/libmbfl/filters/mbfilter_utf7imap.c

Lines changed: 44 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,8 @@
7878
#include "mbfilter.h"
7979
#include "mbfilter_utf7imap.h"
8080

81+
static int mbfl_filt_conv_wchar_utf7imap_flush(mbfl_convert_filter *filter);
82+
8183
static const char *mbfl_encoding_utf7imap_aliases[] = {"mUTF-7", NULL};
8284

8385
const mbfl_encoding mbfl_encoding_utf7imap = {
@@ -113,55 +115,47 @@ const struct mbfl_convert_vtbl vtbl_wchar_utf7imap = {
113115

114116
#define CK(statement) do { if ((statement) < 0) return (-1); } while (0)
115117

116-
/*
117-
* UTF7-IMAP => wchar
118-
*/
119118
int mbfl_filt_conv_utf7imap_wchar(int c, mbfl_convert_filter *filter)
120119
{
121-
int s, n;
120+
int s, n = -1;
122121

123-
n = -1;
124-
if (filter->status != 0) { /* Modified Base64 */
125-
if (c >= 0x41 && c <= 0x5a) { /* A - Z */
122+
if (filter->status != 0) { /* Modified Base64 */
123+
if (c >= 'A' && c <= 'Z') {
126124
n = c - 65;
127-
} else if (c >= 0x61 && c <= 0x7a) { /* a - z */
125+
} else if (c >= 'a' && c <= 'z') {
128126
n = c - 71;
129-
} else if (c >= 0x30 && c <= 0x39) { /* 0 - 9 */
127+
} else if (c >= '0' && c <= '9') {
130128
n = c + 4;
131-
} else if (c == 0x2b) { /* '+' */
129+
} else if (c == '+') {
132130
n = 62;
133-
} else if (c == 0x2c) { /* ',' */
131+
} else if (c == ',') {
134132
n = 63;
135133
}
134+
136135
if (n < 0 || n > 63) {
137-
if (c == 0x2d) {
138-
if (filter->status == 1) { /* "&-" -> "&" */
139-
CK((*filter->output_function)(0x26, filter->data));
136+
if (c == '-') {
137+
if (filter->status == 1) { /* "&-" -> "&" */
138+
CK((*filter->output_function)('&', filter->data));
140139
}
141-
} else if (c >= 0 && c < 0x80) { /* ASCII exclude '-' */
140+
} else if (c >= 0 && c < 0x80) { /* ASCII exclude '-' */
142141
CK((*filter->output_function)(c, filter->data));
143-
} else { /* illegal character */
144-
s = c & MBFL_WCSGROUP_MASK;
145-
s |= MBFL_WCSGROUP_THROUGH;
146-
CK((*filter->output_function)(s, filter->data));
142+
} else { /* illegal character */
143+
CK((*filter->output_function)(c | MBFL_WCSGROUP_THROUGH, filter->data));
147144
}
148-
filter->cache = 0;
149-
filter->status = 0;
145+
filter->cache = filter->status = 0;
150146
return c;
151147
}
152148
}
153149

154150
switch (filter->status) {
155151
/* directly encoded characters */
156152
case 0:
157-
if (c == 0x26) { /* '&' shift character */
153+
if (c == '&') { /* shift character */
158154
filter->status++;
159-
} else if (c >= 0x20 && c <= 0x7E) { /* ASCII */
155+
} else if (c >= 0x20 && c <= 0x7E) { /* ASCII */
160156
CK((*filter->output_function)(c, filter->data));
161-
} else { /* illegal character */
162-
s = c & MBFL_WCSGROUP_MASK;
163-
s |= MBFL_WCSGROUP_THROUGH;
164-
CK((*filter->output_function)(s, filter->data));
157+
} else { /* illegal character */
158+
CK((*filter->output_function)(c | MBFL_WCSGROUP_THROUGH, filter->data));
165159
}
166160
break;
167161

@@ -188,10 +182,8 @@ int mbfl_filt_conv_utf7imap_wchar(int c, mbfl_convert_filter *filter)
188182
filter->cache = n;
189183
if (s >= MBFL_WCSPLANE_SUPMIN && s < MBFL_WCSPLANE_SUPMAX) {
190184
CK((*filter->output_function)(s, filter->data));
191-
} else { /* illegal character */
192-
s &= MBFL_WCSGROUP_MASK;
193-
s |= MBFL_WCSGROUP_THROUGH;
194-
CK((*filter->output_function)(s, filter->data));
185+
} else { /* illegal character */
186+
CK((*filter->output_function)(s | MBFL_WCSGROUP_THROUGH, filter->data));
195187
}
196188
} else {
197189
filter->cache = n;
@@ -200,9 +192,7 @@ int mbfl_filt_conv_utf7imap_wchar(int c, mbfl_convert_filter *filter)
200192
if (s < 0x20 || s > 0x7E || s == '&') {
201193
CK((*filter->output_function)(s, filter->data));
202194
} else {
203-
s &= MBFL_WCSGROUP_MASK;
204-
s |= MBFL_WCSGROUP_THROUGH;
205-
CK((*filter->output_function)(s, filter->data));
195+
CK((*filter->output_function)(s | MBFL_WCSGROUP_THROUGH, filter->data));
206196
}
207197
}
208198
break;
@@ -228,10 +218,8 @@ int mbfl_filt_conv_utf7imap_wchar(int c, mbfl_convert_filter *filter)
228218
filter->cache = n;
229219
if (s >= MBFL_WCSPLANE_SUPMIN && s < MBFL_WCSPLANE_SUPMAX) {
230220
CK((*filter->output_function)(s, filter->data));
231-
} else { /* illegal character */
232-
s &= MBFL_WCSGROUP_MASK;
233-
s |= MBFL_WCSGROUP_THROUGH;
234-
CK((*filter->output_function)(s, filter->data));
221+
} else { /* illegal character */
222+
CK((*filter->output_function)(s | MBFL_WCSGROUP_THROUGH, filter->data));
235223
}
236224
} else {
237225
filter->cache = n;
@@ -240,9 +228,7 @@ int mbfl_filt_conv_utf7imap_wchar(int c, mbfl_convert_filter *filter)
240228
if (s < 0x20 || s > 0x7E || s == '&') {
241229
CK((*filter->output_function)(s, filter->data));
242230
} else {
243-
s &= MBFL_WCSGROUP_MASK;
244-
s |= MBFL_WCSGROUP_THROUGH;
245-
CK((*filter->output_function)(s, filter->data));
231+
CK((*filter->output_function)(s | MBFL_WCSGROUP_THROUGH, filter->data));
246232
}
247233
}
248234
break;
@@ -263,10 +249,8 @@ int mbfl_filt_conv_utf7imap_wchar(int c, mbfl_convert_filter *filter)
263249
filter->cache = 0;
264250
if (s >= MBFL_WCSPLANE_SUPMIN && s < MBFL_WCSPLANE_SUPMAX) {
265251
CK((*filter->output_function)(s, filter->data));
266-
} else { /* illegal character */
267-
s &= MBFL_WCSGROUP_MASK;
268-
s |= MBFL_WCSGROUP_THROUGH;
269-
CK((*filter->output_function)(s, filter->data));
252+
} else { /* illegal character */
253+
CK((*filter->output_function)(s | MBFL_WCSGROUP_THROUGH, filter->data));
270254
}
271255
} else {
272256
filter->cache = 0;
@@ -275,9 +259,7 @@ int mbfl_filt_conv_utf7imap_wchar(int c, mbfl_convert_filter *filter)
275259
if (s < 0x20 || s > 0x7E || s == '&') {
276260
CK((*filter->output_function)(s, filter->data));
277261
} else {
278-
s &= MBFL_WCSGROUP_MASK;
279-
s |= MBFL_WCSGROUP_THROUGH;
280-
CK((*filter->output_function)(s, filter->data));
262+
CK((*filter->output_function)(s | MBFL_WCSGROUP_THROUGH, filter->data));
281263
}
282264
}
283265
break;
@@ -304,15 +286,11 @@ static const unsigned char mbfl_utf7imap_base64_table[] =
304286
0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x2b,0x2c,0x00
305287
};
306288

307-
/*
308-
* wchar => UTF7-IMAP
309-
*/
310289
int mbfl_filt_conv_wchar_utf7imap(int c, mbfl_convert_filter *filter)
311290
{
312-
int n, s;
291+
int n = 0, s;
313292

314-
n = 0;
315-
if (c == 0x26) {
293+
if (c == '&') {
316294
n = 1;
317295
} else if ((c >= 0x20 && c <= 0x7e) || c == 0) {
318296
n = 2;
@@ -350,10 +328,10 @@ int mbfl_filt_conv_wchar_utf7imap(int c, mbfl_convert_filter *filter)
350328
CK((*filter->output_function)(mbfl_utf7imap_base64_table[(s >> 4) & 0x3f], filter->data));
351329
if (n != 0) {
352330
CK((*filter->output_function)(mbfl_utf7imap_base64_table[(s << 2) & 0x3c], filter->data));
353-
CK((*filter->output_function)(0x2d, filter->data)); /* '-' */
331+
CK((*filter->output_function)('-', filter->data));
354332
CK((*filter->output_function)(c, filter->data));
355333
if (n == 1) {
356-
CK((*filter->output_function)(0x2d, filter->data)); /* '-' */
334+
CK((*filter->output_function)('-', filter->data));
357335
}
358336
filter->status = 0;
359337
} else {
@@ -369,10 +347,10 @@ int mbfl_filt_conv_wchar_utf7imap(int c, mbfl_convert_filter *filter)
369347
CK((*filter->output_function)(mbfl_utf7imap_base64_table[(s >> 2) & 0x3f], filter->data));
370348
if (n != 0) {
371349
CK((*filter->output_function)(mbfl_utf7imap_base64_table[(s << 4) & 0x30], filter->data));
372-
CK((*filter->output_function)(0x2d, filter->data)); /* '-' */
350+
CK((*filter->output_function)('-', filter->data));
373351
CK((*filter->output_function)(c, filter->data));
374352
if (n == 1) {
375-
CK((*filter->output_function)(0x2d, filter->data)); /* '-' */
353+
CK((*filter->output_function)('-', filter->data));
376354
}
377355
filter->status = 0;
378356
} else {
@@ -387,10 +365,10 @@ int mbfl_filt_conv_wchar_utf7imap(int c, mbfl_convert_filter *filter)
387365
CK((*filter->output_function)(mbfl_utf7imap_base64_table[(s >> 6) & 0x3f], filter->data));
388366
CK((*filter->output_function)(mbfl_utf7imap_base64_table[s & 0x3f], filter->data));
389367
if (n != 0) {
390-
CK((*filter->output_function)(0x2d, filter->data)); /* '-' */
368+
CK((*filter->output_function)('-', filter->data));
391369
CK((*filter->output_function)(c, filter->data));
392370
if (n == 1) {
393-
CK((*filter->output_function)(0x2d, filter->data)); /* '-' */
371+
CK((*filter->output_function)('-', filter->data));
394372
}
395373
filter->status = 0;
396374
} else {
@@ -408,36 +386,33 @@ int mbfl_filt_conv_wchar_utf7imap(int c, mbfl_convert_filter *filter)
408386

409387
}
410388

411-
int mbfl_filt_conv_wchar_utf7imap_flush(mbfl_convert_filter *filter)
389+
static int mbfl_filt_conv_wchar_utf7imap_flush(mbfl_convert_filter *filter)
412390
{
413-
int status, cache;
391+
int status = filter->status, cache = filter->cache;
392+
filter->status = filter->cache = 0;
414393

415-
status = filter->status;
416-
cache = filter->cache;
417-
filter->status = 0;
418-
filter->cache = 0;
419394
/* flush fragments */
420395
switch (status) {
421396
case 1:
422397
CK((*filter->output_function)(mbfl_utf7imap_base64_table[(cache >> 10) & 0x3f], filter->data));
423398
CK((*filter->output_function)(mbfl_utf7imap_base64_table[(cache >> 4) & 0x3f], filter->data));
424399
CK((*filter->output_function)(mbfl_utf7imap_base64_table[(cache << 2) & 0x3c], filter->data));
425-
CK((*filter->output_function)(0x2d, filter->data)); /* '-' */
400+
CK((*filter->output_function)('-', filter->data));
426401
break;
427402

428403
case 2:
429404
CK((*filter->output_function)(mbfl_utf7imap_base64_table[(cache >> 14) & 0x3f], filter->data));
430405
CK((*filter->output_function)(mbfl_utf7imap_base64_table[(cache >> 8) & 0x3f], filter->data));
431406
CK((*filter->output_function)(mbfl_utf7imap_base64_table[(cache >> 2) & 0x3f], filter->data));
432407
CK((*filter->output_function)(mbfl_utf7imap_base64_table[(cache << 4) & 0x30], filter->data));
433-
CK((*filter->output_function)(0x2d, filter->data)); /* '-' */
408+
CK((*filter->output_function)('-', filter->data));
434409
break;
435410

436411
case 3:
437412
CK((*filter->output_function)(mbfl_utf7imap_base64_table[(cache >> 12) & 0x3f], filter->data));
438413
CK((*filter->output_function)(mbfl_utf7imap_base64_table[(cache >> 6) & 0x3f], filter->data));
439414
CK((*filter->output_function)(mbfl_utf7imap_base64_table[cache & 0x3f], filter->data));
440-
CK((*filter->output_function)(0x2d, filter->data)); /* '-' */
415+
CK((*filter->output_function)('-', filter->data));
441416
break;
442417
}
443418
return 0;

ext/mbstring/libmbfl/filters/mbfilter_utf7imap.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,5 @@ extern const struct mbfl_convert_vtbl vtbl_wchar_utf7imap;
3838

3939
int mbfl_filt_conv_utf7imap_wchar(int c, mbfl_convert_filter *filter);
4040
int mbfl_filt_conv_wchar_utf7imap(int c, mbfl_convert_filter *filter);
41-
int mbfl_filt_conv_wchar_utf7imap_flush(mbfl_convert_filter *filter);
4241

4342
#endif /* MBFL_MBFILTER_UTF7IMAP_H */

0 commit comments

Comments
 (0)