imap-arg.h revision c2fbbf7515aa419dc8b2d62a3c2bb0471d51a391
c2fbbf7515aa419dc8b2d62a3c2bb0471d51a391Timo Sirainen/* We use this macro to read atoms from input. It should probably contain
c2fbbf7515aa419dc8b2d62a3c2bb0471d51a391Timo Sirainen everything some day, but for now we can't handle some input otherwise:
c2fbbf7515aa419dc8b2d62a3c2bb0471d51a391Timo Sirainen ']' is required for parsing section (FETCH BODY[])
c2fbbf7515aa419dc8b2d62a3c2bb0471d51a391Timo Sirainen '%', '*' and ']' are valid list-chars for LIST patterns
c2fbbf7515aa419dc8b2d62a3c2bb0471d51a391Timo Sirainen '\' is used in flags */
c2fbbf7515aa419dc8b2d62a3c2bb0471d51a391Timo Sirainen (c) == ']' || (c) == '%' || (c) == '*' || (c) == '\\')
c2fbbf7515aa419dc8b2d62a3c2bb0471d51a391Timo Sirainen /* literals are returned as IMAP_ARG_STRING by default */
c2fbbf7515aa419dc8b2d62a3c2bb0471d51a391Timo SirainenARRAY_DEFINE_TYPE(imap_arg_list, struct imap_arg);
c2fbbf7515aa419dc8b2d62a3c2bb0471d51a391Timo Sirainen struct imap_arg *parent; /* always of type IMAP_ARG_LIST */
c2fbbf7515aa419dc8b2d62a3c2bb0471d51a391Timo Sirainen const char *str;
c2fbbf7515aa419dc8b2d62a3c2bb0471d51a391Timo Sirainen/* RFC 3501's astring type */
c2fbbf7515aa419dc8b2d62a3c2bb0471d51a391Timo Sirainenbool imap_arg_get_atom(const struct imap_arg *arg, const char **str_r)
c2fbbf7515aa419dc8b2d62a3c2bb0471d51a391Timo Sirainenbool imap_arg_get_quoted(const struct imap_arg *arg, const char **str_r)
c2fbbf7515aa419dc8b2d62a3c2bb0471d51a391Timo Sirainenbool imap_arg_get_string(const struct imap_arg *arg, const char **str_r)
c2fbbf7515aa419dc8b2d62a3c2bb0471d51a391Timo Sirainenbool imap_arg_get_astring(const struct imap_arg *arg, const char **str_r)
c2fbbf7515aa419dc8b2d62a3c2bb0471d51a391Timo Sirainen/* str is set to NULL for NIL. */
c2fbbf7515aa419dc8b2d62a3c2bb0471d51a391Timo Sirainenbool imap_arg_get_nstring(const struct imap_arg *arg, const char **str_r)
c2fbbf7515aa419dc8b2d62a3c2bb0471d51a391Timo Sirainenbool imap_arg_get_literal_size(const struct imap_arg *arg, uoff_t *size_r)
c2fbbf7515aa419dc8b2d62a3c2bb0471d51a391Timo Sirainenbool imap_arg_get_list(const struct imap_arg *arg,
c2fbbf7515aa419dc8b2d62a3c2bb0471d51a391Timo Sirainenbool imap_arg_get_list_full(const struct imap_arg *arg,
c2fbbf7515aa419dc8b2d62a3c2bb0471d51a391Timo Sirainen unsigned int *list_count_r) ATTR_WARN_UNUSED_RESULT;
c2fbbf7515aa419dc8b2d62a3c2bb0471d51a391Timo Sirainen/* Similar to above, but assumes that arg is already of correct type. */
c2fbbf7515aa419dc8b2d62a3c2bb0471d51a391Timo Sirainenconst char *imap_arg_as_astring(const struct imap_arg *arg);
c2fbbf7515aa419dc8b2d62a3c2bb0471d51a391Timo Sirainenconst char *imap_arg_as_nstring(const struct imap_arg *arg);
c2fbbf7515aa419dc8b2d62a3c2bb0471d51a391Timo Sirainenuoff_t imap_arg_as_literal_size(const struct imap_arg *arg);
c2fbbf7515aa419dc8b2d62a3c2bb0471d51a391Timo Sirainenconst struct imap_arg *imap_arg_as_list(const struct imap_arg *arg);
c2fbbf7515aa419dc8b2d62a3c2bb0471d51a391Timo Sirainen/* Returns TRUE if arg is atom and case-insensitively matches str */
c2fbbf7515aa419dc8b2d62a3c2bb0471d51a391Timo Sirainenbool imap_arg_atom_equals(const struct imap_arg *arg, const char *str);