From f7548d6d28c313cf80e6f3ef89aed16a19815df1 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 28 Apr 2024 11:51:24 +0200 Subject: Adding upstream version 1:2.3.19.1+dfsg1. Signed-off-by: Daniel Baumann --- src/lib-dict/dict-transaction-memory.c | 59 ++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 src/lib-dict/dict-transaction-memory.c (limited to 'src/lib-dict/dict-transaction-memory.c') diff --git a/src/lib-dict/dict-transaction-memory.c b/src/lib-dict/dict-transaction-memory.c new file mode 100644 index 0000000..4793ad3 --- /dev/null +++ b/src/lib-dict/dict-transaction-memory.c @@ -0,0 +1,59 @@ +/* Copyright (c) 2005-2018 Dovecot authors, see the included COPYING file */ + +#include "lib.h" +#include "array.h" +#include "dict-transaction-memory.h" + +void dict_transaction_memory_init(struct dict_transaction_memory_context *ctx, + struct dict *dict, pool_t pool) +{ + ctx->ctx.dict = dict; + ctx->pool = pool; + p_array_init(&ctx->changes, pool, 32); +} + +void dict_transaction_memory_rollback(struct dict_transaction_context *_ctx) +{ + struct dict_transaction_memory_context *ctx = + (struct dict_transaction_memory_context *)_ctx; + + pool_unref(&ctx->pool); +} + +void dict_transaction_memory_set(struct dict_transaction_context *_ctx, + const char *key, const char *value) +{ + struct dict_transaction_memory_context *ctx = + (struct dict_transaction_memory_context *)_ctx; + struct dict_transaction_memory_change *change; + + change = array_append_space(&ctx->changes); + change->type = DICT_CHANGE_TYPE_SET; + change->key = p_strdup(ctx->pool, key); + change->value.str = p_strdup(ctx->pool, value); +} + +void dict_transaction_memory_unset(struct dict_transaction_context *_ctx, + const char *key) +{ + struct dict_transaction_memory_context *ctx = + (struct dict_transaction_memory_context *)_ctx; + struct dict_transaction_memory_change *change; + + change = array_append_space(&ctx->changes); + change->type = DICT_CHANGE_TYPE_UNSET; + change->key = p_strdup(ctx->pool, key); +} + +void dict_transaction_memory_atomic_inc(struct dict_transaction_context *_ctx, + const char *key, long long diff) +{ + struct dict_transaction_memory_context *ctx = + (struct dict_transaction_memory_context *)_ctx; + struct dict_transaction_memory_change *change; + + change = array_append_space(&ctx->changes); + change->type = DICT_CHANGE_TYPE_INC; + change->key = p_strdup(ctx->pool, key); + change->value.diff = diff; +} -- cgit v1.2.3