Mercurial > dovecot > original-hg > dovecot-1.2
changeset 8729:b7ebdade6cbd HEAD
Added imap_args_to_str()
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Fri, 06 Feb 2009 13:38:54 -0500 |
parents | da19acbae79e |
children | 9b5d68776d03 |
files | src/lib-imap/imap-util.c src/lib-imap/imap-util.h |
diffstat | 2 files changed, 53 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-imap/imap-util.c Fri Feb 06 13:38:26 2009 -0500 +++ b/src/lib-imap/imap-util.c Fri Feb 06 13:38:54 2009 -0500 @@ -3,7 +3,9 @@ #include "lib.h" #include "array.h" #include "str.h" +#include "strescape.h" #include "mail-types.h" +#include "imap-parser.h" #include "imap-util.h" void imap_write_flags(string_t *dest, enum mail_flags flags, @@ -52,3 +54,51 @@ str_printfa(dest, ":%u", range[i].seq2); } } + +void imap_args_to_str(string_t *dest, const struct imap_arg *args) +{ + const ARRAY_TYPE(imap_arg_list) *list; + bool first = TRUE; + + for (; args->type != IMAP_ARG_EOL; args++) { + if (first) + first = FALSE; + else + str_append_c(dest, ' '); + + switch (args->type) { + case IMAP_ARG_NIL: + str_append(dest, "NIL"); + break; + case IMAP_ARG_ATOM: + str_append(dest, IMAP_ARG_STR(args)); + break; + case IMAP_ARG_STRING: + str_append_c(dest, '"'); + str_append(dest, str_escape(IMAP_ARG_STR(args))); + str_append_c(dest, '"'); + break; + case IMAP_ARG_LITERAL: { + const char *strarg = IMAP_ARG_STR(args); + str_printfa(dest, "{%"PRIuSIZE_T"}\r\n", + strlen(strarg)); + str_append(dest, strarg); + break; + } + case IMAP_ARG_LIST: + str_append_c(dest, '('); + list = IMAP_ARG_LIST(args); + imap_args_to_str(dest, array_idx(list, 0)); + str_append_c(dest, ')'); + break; + case IMAP_ARG_LITERAL_SIZE: + case IMAP_ARG_LITERAL_SIZE_NONSYNC: + str_printfa(dest, "{%"PRIuUOFF_T"}\r\n", + IMAP_ARG_LITERAL_SIZE(args)); + str_append(dest, "<too large>"); + break; + case IMAP_ARG_EOL: + i_unreached(); + } + } +}
--- a/src/lib-imap/imap-util.h Fri Feb 06 13:38:26 2009 -0500 +++ b/src/lib-imap/imap-util.h Fri Feb 06 13:38:54 2009 -0500 @@ -4,6 +4,7 @@ #include "seq-range-array.h" enum mail_flags; +struct imap_arg; /* Write flags as a space separated string. */ void imap_write_flags(string_t *dest, enum mail_flags flags, @@ -11,5 +12,7 @@ /* Write sequence range as IMAP sequence-set */ void imap_write_seq_range(string_t *dest, const ARRAY_TYPE(seq_range) *array); +/* Write IMAP args to given string. The string is mainly useful for humans. */ +void imap_args_to_str(string_t *dest, const struct imap_arg *args); #endif