Mercurial > dovecot > original-hg > dovecot-1.2
diff src/lib-imap/imap-util.c @ 0:3b1985cbc908 HEAD
Initial revision
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Fri, 09 Aug 2002 12:15:38 +0300 |
parents | |
children | 4223b9ed0c80 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/lib-imap/imap-util.c Fri Aug 09 12:15:38 2002 +0300 @@ -0,0 +1,72 @@ +/* Copyright (C) 2002 Timo Sirainen */ + +#include "lib.h" +#include "temp-string.h" +#include "imap-util.h" + +const char *imap_write_flags(MailFlags flags, const char *custom_flags[]) +{ + TempString *str; + const char *sysflags, *name; + int i; + + if (flags == 0) + return ""; + + sysflags = t_strconcat((flags & MAIL_ANSWERED) ? " \\Answered" : "", + (flags & MAIL_FLAGGED) ? " \\Flagged" : "", + (flags & MAIL_DELETED) ? " \\Deleted" : "", + (flags & MAIL_SEEN) ? " \\Seen" : "", + (flags & MAIL_DRAFT) ? " \\Draft" : "", + (flags & MAIL_RECENT) ? " \\Recent" : "", + NULL); + + if (*sysflags != '\0') + sysflags++; + + if ((flags & MAIL_CUSTOM_FLAGS_MASK) == 0) + return sysflags; + + /* we have custom flags too */ + str = t_string_new(256); + t_string_append(str, sysflags); + + for (i = 0; i < MAIL_CUSTOM_FLAGS_COUNT; i++) { + if (flags & (1 << (i + MAIL_CUSTOM_FLAG_1_BIT))) { + name = custom_flags[i]; + if (name != NULL && *name != '\0') { + if (str->len > 0) + t_string_append_c(str, ' '); + t_string_append(str, name); + } + } + } + + return str->str; +} + +const char *imap_escape(const char *str) +{ + char *ret, *p; + unsigned int i, esc; + + /* get length of string and number of chars to escape */ + esc = 0; + for (i = 0; str[i] != '\0'; i++) { + if (IS_ESCAPED_CHAR(str[i])) + esc++; + } + + if (esc == 0) + return str; + + /* escape them */ + p = ret = t_malloc(i + esc + 1); + for (; *str != '\0'; str++) { + if (IS_ESCAPED_CHAR(str[i])) + *p++ = '\\'; + *p++ = *str; + } + *p = '\0'; + return ret; +}