]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-dict: Use dict-fail iterator and transaction when missing from dict driver
authorAki Tuomi <aki.tuomi@dovecot.fi>
Wed, 22 Mar 2017 08:32:58 +0000 (10:32 +0200)
committerTimo Sirainen <timo.sirainen@dovecot.fi>
Mon, 27 Mar 2017 09:50:04 +0000 (12:50 +0300)
src/lib-dict/dict.c

index be3eaf4db901acbbdfc5b9147e4d585ce55de90d..3f5f641c20040deee185f537799a9e5e54e24c30 100644 (file)
@@ -7,7 +7,6 @@
 #include "dict-private.h"
 
 static ARRAY(struct dict *) dict_drivers;
-static struct dict_iterate_context dict_iter_unsupported;
 
 static struct dict *dict_driver_lookup(const char *name)
 {
@@ -187,8 +186,6 @@ dict_iterate_init_multiple(struct dict *dict, const char *const *paths,
 bool dict_iterate(struct dict_iterate_context *ctx,
                  const char **key_r, const char **value_r)
 {
-       if (ctx == &dict_iter_unsupported)
-               return FALSE;
        if (ctx->max_rows > 0 && ctx->row_count >= ctx->max_rows) {
                /* row count was limited */
                ctx->has_more = FALSE;
@@ -227,12 +224,13 @@ int dict_iterate_deinit(struct dict_iterate_context **_ctx)
        ctx->dict->iter_count--;
 
        *_ctx = NULL;
-       return ctx == &dict_iter_unsupported ? -1 :
-               ctx->dict->v.iterate_deinit(ctx);
+       return ctx->dict->v.iterate_deinit(ctx);
 }
 
 struct dict_transaction_context *dict_transaction_begin(struct dict *dict)
 {
+       if (dict->v.transaction_init == NULL)
+               return &dict_transaction_unsupported;
        return dict->v.transaction_init(dict);
 }