]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
Added imap_parse_system_flag().
authorTimo Sirainen <tss@iki.fi>
Tue, 23 Jun 2009 18:44:46 +0000 (14:44 -0400)
committerTimo Sirainen <tss@iki.fi>
Tue, 23 Jun 2009 18:44:46 +0000 (14:44 -0400)
--HG--
branch : HEAD

src/lib-imap/Makefile.am
src/lib-imap/imap-util.c
src/lib-imap/imap-util.h
src/lib-imap/test-imap-util.c [new file with mode: 0644]

index 1afb1b48c74c1f94f94aed243125ff21da62a095..6690bba233176d4257cb1e2c6ca92550350399c5 100644 (file)
@@ -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 \
index a08c559ab469422c15e265d3e5dcc04f946818bd..91703fccdabdb8f8378622f025c4c3865e627c24 100644 (file)
@@ -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;
index 33881540c7cefbce9a0fedfcb2fa0879c12ccead..4fecacaad0c2a3a7e879746842ce3325bed8df89 100644 (file)
@@ -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 (file)
index 0000000..b233227
--- /dev/null
@@ -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);
+}