From: Timo Sirainen Date: Tue, 23 Jun 2009 18:44:46 +0000 (-0400) Subject: Added imap_parse_system_flag(). X-Git-Tag: 2.0.alpha1~540 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=6f62651c0fc31595d793f5e141d9c349dc0e69e0;p=thirdparty%2Fdovecot%2Fcore.git Added imap_parse_system_flag(). --HG-- branch : HEAD --- diff --git a/src/lib-imap/Makefile.am b/src/lib-imap/Makefile.am index 1afb1b48c7..6690bba233 100644 --- a/src/lib-imap/Makefile.am +++ b/src/lib-imap/Makefile.am @@ -43,7 +43,8 @@ endif test_programs = \ test-imap-match \ test-imap-parser \ - test-imap-utf7 + test-imap-utf7 \ + test-imap-util noinst_PROGRAMS = $(test_programs) @@ -63,6 +64,10 @@ test_imap_utf7_SOURCES = test-imap-utf7.c test_imap_utf7_LDADD = imap-utf7.lo $(test_libs) test_imap_utf7_DEPENDENCIES = imap-utf7.lo $(test_libs) +test_imap_util_SOURCES = test-imap-util.c +test_imap_util_LDADD = imap-util.lo $(test_libs) +test_imap_util_DEPENDENCIES = imap-util.lo $(test_libs) + check: check-am check-test check-test: $(test_programs) for bin in $(test_programs); do \ diff --git a/src/lib-imap/imap-util.c b/src/lib-imap/imap-util.c index a08c559ab4..91703fccda 100644 --- a/src/lib-imap/imap-util.c +++ b/src/lib-imap/imap-util.c @@ -40,6 +40,24 @@ void imap_write_flags(string_t *dest, enum mail_flags flags, str_truncate(dest, str_len(dest)-1); } +enum mail_flags imap_parse_system_flag(const char *str) +{ + if (strcasecmp(str, "\\Answered") == 0) + return MAIL_ANSWERED; + else if (strcasecmp(str, "\\Flagged") == 0) + return MAIL_FLAGGED; + else if (strcasecmp(str, "\\Deleted") == 0) + return MAIL_DELETED; + else if (strcasecmp(str, "\\Seen") == 0) + return MAIL_SEEN; + else if (strcasecmp(str, "\\Draft") == 0) + return MAIL_DRAFT; + else if (strcasecmp(str, "\\Recent") == 0) + return MAIL_RECENT; + else + return 0; +} + void imap_write_seq_range(string_t *dest, const ARRAY_TYPE(seq_range) *array) { const struct seq_range *range; diff --git a/src/lib-imap/imap-util.h b/src/lib-imap/imap-util.h index 33881540c7..4fecacaad0 100644 --- a/src/lib-imap/imap-util.h +++ b/src/lib-imap/imap-util.h @@ -9,6 +9,8 @@ struct imap_arg; /* Write flags as a space separated string. */ void imap_write_flags(string_t *dest, enum mail_flags flags, const char *const *keywords); +/* Parse system flag from a string, or return 0 if it's invalid. */ +enum mail_flags imap_parse_system_flag(const char *str); /* Write sequence range as IMAP sequence-set */ void imap_write_seq_range(string_t *dest, const ARRAY_TYPE(seq_range) *array); diff --git a/src/lib-imap/test-imap-util.c b/src/lib-imap/test-imap-util.c new file mode 100644 index 0000000000..b233227779 --- /dev/null +++ b/src/lib-imap/test-imap-util.c @@ -0,0 +1,31 @@ +/* Copyright (c) 2009 Dovecot authors, see the included COPYING file */ + +#include "lib.h" +#include "mail-types.h" +#include "imap-util.h" +#include "test-common.h" + +static void test_imap_parse_system_flag(void) +{ + test_begin("imap_parse_system_flag"); + test_assert(imap_parse_system_flag("\\aNswered") == MAIL_ANSWERED); + test_assert(imap_parse_system_flag("\\fLagged") == MAIL_FLAGGED); + test_assert(imap_parse_system_flag("\\dEleted") == MAIL_DELETED); + test_assert(imap_parse_system_flag("\\sEen") == MAIL_SEEN); + test_assert(imap_parse_system_flag("\\dRaft") == MAIL_DRAFT); + test_assert(imap_parse_system_flag("\\rEcent") == MAIL_RECENT); + test_assert(imap_parse_system_flag("answered") == 0); + test_assert(imap_parse_system_flag("\\broken") == 0); + test_assert(imap_parse_system_flag("\\") == 0); + test_assert(imap_parse_system_flag("") == 0); + test_end(); +} + +int main(void) +{ + static void (*test_functions[])(void) = { + test_imap_parse_system_flag, + NULL + }; + return test_run(test_functions); +}