/src/dovecot/src/lib-storage/mail-search-parser.c
Line | Count | Source |
1 | | /* Copyright (c) Dovecot authors, see top-level COPYING file */ |
2 | | |
3 | | #include "lib.h" |
4 | | #include "mail-search-parser-private.h" |
5 | | |
6 | | void mail_search_parser_deinit(struct mail_search_parser **_parser) |
7 | 0 | { |
8 | 0 | struct mail_search_parser *parser = *_parser; |
9 | |
|
10 | 0 | *_parser = NULL; |
11 | 0 | pool_unref(&parser->pool); |
12 | 0 | } |
13 | | |
14 | | int mail_search_parse_key(struct mail_search_parser *parser, |
15 | | const char **key_r) |
16 | 0 | { |
17 | 0 | int ret; |
18 | |
|
19 | 0 | if ((ret = parser->v.parse_key(parser, key_r)) <= 0) |
20 | 0 | return ret; |
21 | | |
22 | 0 | parser->cur_key = *key_r; |
23 | 0 | return 1; |
24 | 0 | } |
25 | | |
26 | | int mail_search_parse_string(struct mail_search_parser *parser, |
27 | | const char **value_r) |
28 | 0 | { |
29 | 0 | int ret; |
30 | |
|
31 | 0 | ret = parser->v.parse_string(parser, value_r); |
32 | 0 | if (ret < 0 && parser->cur_key != NULL) { |
33 | 0 | parser->error = p_strdup_printf(parser->pool, |
34 | 0 | "%s (for search key: %s)", |
35 | 0 | parser->error, t_str_ucase(parser->cur_key)); |
36 | 0 | } |
37 | 0 | return ret; |
38 | 0 | } |
39 | | |
40 | | bool mail_search_parse_skip_next(struct mail_search_parser *parser, |
41 | | const char *str) |
42 | 0 | { |
43 | 0 | return parser->v.parse_skip_next(parser, str); |
44 | 0 | } |
45 | | |
46 | | const char *mail_search_parser_get_error(struct mail_search_parser *parser) |
47 | 0 | { |
48 | 0 | return parser->error; |
49 | 0 | } |