Mercurial > dovecot > core-2.2
changeset 21979:93b58b983718
lib-imap: Add imap_write_arg() to write only a single arg
author | Timo Sirainen <timo.sirainen@dovecot.fi> |
---|---|
date | Mon, 24 Apr 2017 12:50:10 +0300 |
parents | 225072babbce |
children | 53b40f5b0626 |
files | src/lib-imap/imap-util.c src/lib-imap/imap-util.h |
diffstat | 2 files changed, 42 insertions(+), 35 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-imap/imap-util.c Sun Apr 23 19:57:11 2017 +0300 +++ b/src/lib-imap/imap-util.c Mon Apr 24 12:50:10 2017 +0300 @@ -74,6 +74,43 @@ } } +void imap_write_arg(string_t *dest, const struct imap_arg *arg) +{ + switch (arg->type) { + case IMAP_ARG_NIL: + str_append(dest, "NIL"); + break; + case IMAP_ARG_ATOM: + str_append(dest, imap_arg_as_astring(arg)); + break; + case IMAP_ARG_STRING: + str_append_c(dest, '"'); + str_append(dest, str_escape(imap_arg_as_astring(arg))); + str_append_c(dest, '"'); + break; + case IMAP_ARG_LITERAL: { + const char *strarg = imap_arg_as_astring(arg); + str_printfa(dest, "{%"PRIuSIZE_T"}\r\n", + strlen(strarg)); + str_append(dest, strarg); + break; + } + case IMAP_ARG_LIST: + str_append_c(dest, '('); + imap_write_args(dest, imap_arg_as_list(arg)); + 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_as_literal_size(arg)); + str_append(dest, "<too large>"); + break; + case IMAP_ARG_EOL: + i_unreached(); + } +} + void imap_write_args(string_t *dest, const struct imap_arg *args) { bool first = TRUE; @@ -83,40 +120,7 @@ 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_as_astring(args)); - break; - case IMAP_ARG_STRING: - str_append_c(dest, '"'); - str_append(dest, str_escape(imap_arg_as_astring(args))); - str_append_c(dest, '"'); - break; - case IMAP_ARG_LITERAL: { - const char *strarg = imap_arg_as_astring(args); - str_printfa(dest, "{%"PRIuSIZE_T"}\r\n", - strlen(strarg)); - str_append(dest, strarg); - break; - } - case IMAP_ARG_LIST: - str_append_c(dest, '('); - imap_write_args(dest, imap_arg_as_list(args)); - 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_as_literal_size(args)); - str_append(dest, "<too large>"); - break; - case IMAP_ARG_EOL: - i_unreached(); - } + imap_write_arg(dest, args); } }
--- a/src/lib-imap/imap-util.h Sun Apr 23 19:57:11 2017 +0300 +++ b/src/lib-imap/imap-util.h Mon Apr 24 12:50:10 2017 +0300 @@ -14,7 +14,10 @@ /* 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. */ +/* Write IMAP arg to the given string. Because IMAP_ARG_LITERAL_SIZE* have no + content, they're written as "{size}\r\n<too large>". */ +void imap_write_arg(string_t *dest, const struct imap_arg *arg); +/* Same as imap_write_arg(), but write all the args until EOL. */ void imap_write_args(string_t *dest, const struct imap_arg *args); /* Write IMAP args in a human-readable format to given string (e.g. for logging). The output is a single valid UTF-8 line without control