Mercurial > dovecot > core-2.2
view src/lib-storage/mail-search-register.c @ 19604:c996bc091c6b
master: Do not close stdout if going foreground
This lets one to use /dev/stdout for logging. Mainly
useful for testing purposes where we can generate
log output to stdout and use tee to write it to a
file for later examination.
author | Aki Tuomi <aki.tuomi@dovecot.fi> |
---|---|
date | Mon, 18 Jan 2016 15:50:23 +0200 |
parents | 0f22db71df7a |
children | 2e2563132d5f |
line wrap: on
line source
/* Copyright (c) 2010-2016 Dovecot authors, see the included COPYING file */ #include "lib.h" #include "array.h" #include "mail-search.h" #include "mail-search-register.h" struct mail_search_register { ARRAY(struct mail_search_register_arg) args; mail_search_register_fallback_t *fallback; unsigned int args_sorted:1; }; struct mail_search_register *mail_search_register_init(void) { struct mail_search_register *reg; reg = i_new(struct mail_search_register, 1); i_array_init(®->args, 64); return reg; } void mail_search_register_deinit(struct mail_search_register **_reg) { struct mail_search_register *reg = *_reg; *_reg = NULL; array_free(®->args); i_free(reg); } void mail_search_register_add(struct mail_search_register *reg, const struct mail_search_register_arg *arg, unsigned int count) { array_append(®->args, arg, count); reg->args_sorted = FALSE; } void mail_search_register_fallback(struct mail_search_register *reg, mail_search_register_fallback_t *fallback) { reg->fallback = fallback; } static int mail_search_register_arg_cmp(const struct mail_search_register_arg *arg1, const struct mail_search_register_arg *arg2) { return strcmp(arg1->key, arg2->key); } const struct mail_search_register_arg * mail_search_register_get(struct mail_search_register *reg, unsigned int *count_r) { if (!reg->args_sorted) { array_sort(®->args, mail_search_register_arg_cmp); reg->args_sorted = TRUE; } return array_get(®->args, count_r); } const struct mail_search_register_arg * mail_search_register_find(struct mail_search_register *reg, const char *key) { struct mail_search_register_arg arg; if (!reg->args_sorted) { array_sort(®->args, mail_search_register_arg_cmp); reg->args_sorted = TRUE; } arg.key = key; return array_bsearch(®->args, &arg, mail_search_register_arg_cmp); } bool mail_search_register_get_fallback(struct mail_search_register *reg, mail_search_register_fallback_t **fallback_r) { if (reg->fallback == NULL) return FALSE; *fallback_r = reg->fallback; return TRUE; }