commit 4a5c79993cee3296da9a9e9311264b8c14dc928e
Author: Oswald Buddenhagen <[email protected]>
Date: Fri Nov 26 12:24:47 2021 +0100
optimize IMAP flag parsing
uppercase the reference strings and utilize already known string
lengths.
src/drv_imap.c | 22 +++++++++++++---------
1 file changed, 13 insertions(+), 9 deletions(-)
diff --git a/src/drv_imap.c b/src/drv_imap.c
index b44df29e..dc30a21e 100644
--- a/src/drv_imap.c
+++ b/src/drv_imap.c
@@ -269,13 +269,17 @@ static int imap_deref( imap_store_t *ctx );
static void imap_invoke_bad_callback( imap_store_t *ctx );
// Keep the MESSAGE_FLAGS in sync (grep that)!
-static const char *Flags[] = {
- "\\Draft", /* 'D' */
- "\\Flagged", /* 'F' */
- "$Forwarded", /* 'P' */
- "\\Answered", /* 'R' */
- "\\Seen", /* 'S' */
- "\\Deleted", /* 'T' */
+static const struct {
+ const char *str;
+ const char *ustr;
+ uint len;
+} Flags[] = {
+ { "\\Draft", "\\DRAFT", 6 }, // 'D'
+ { "\\Flagged", "\\FLAGGED", 8 }, // 'F'
+ { "$Forwarded", "$FORWARDED", 10 }, // 'P'
+ { "\\Answered", "\\ANSWERED", 9 }, // 'R'
+ { "\\Seen", "\\SEEN", 5 }, // 'S'
+ { "\\Deleted", "\\DELETED", 8 }, // 'T'
};
static imap_cmd_t *
@@ -1092,7 +1096,7 @@ parse_fetched_flags( list_t *list, uchar *flags, uchar
*status )
goto flagok;
}
for (uint i = 0; i < as(Flags); i++) {
- if (!strcasecmp( Flags[i], list->val )) {
+ if (equals( list->val, list->len, Flags[i].ustr,
Flags[i].len )) {
*flags |= 1 << i;
goto flagok;
}
@@ -3060,7 +3064,7 @@ imap_make_flags( int flags, char *buf )
for (i = d = 0; i < as(Flags); i++) {
if (flags & (1 << i)) {
buf[d++] = ' ';
- for (s = Flags[i]; *s; s++)
+ for (s = Flags[i].str; *s; s++)
buf[d++] = *s;
}
}
_______________________________________________
isync-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/isync-devel