From 5516e125362bb096fdc2e6b5038db4e3e5148244 Mon Sep 17 00:00:00 2001 From: Stephan Bosch <stephan.bosch@open-xchange.com> Date: Tue, 1 Oct 2024 13:38:56 +0200 Subject: [PATCH] lib-sieve: sieve-storage - Split off sieve_storage_alloc_from_class() --- src/lib-sieve/sieve-storage.c | 58 ++++++++++++++++++++++++++--------- 1 file changed, 43 insertions(+), 15 deletions(-) diff --git a/src/lib-sieve/sieve-storage.c b/src/lib-sieve/sieve-storage.c index 108f6d92f..3558ae51e 100644 --- a/src/lib-sieve/sieve-storage.c +++ b/src/lib-sieve/sieve-storage.c @@ -289,10 +289,13 @@ sieve_storage_data_parse(struct sieve_storage *storage, const char *data, * Storage instance */ -int sieve_storage_alloc(struct sieve_instance *svinst, struct event *event, - const struct sieve_storage *storage_class, - const char *data, enum sieve_storage_flags flags, - bool main, struct sieve_storage **storage_r) +static int +sieve_storage_alloc_from_class(struct sieve_instance *svinst, + struct event *event, + const struct sieve_storage *storage_class, + const char *data, + enum sieve_storage_flags flags, + struct sieve_storage **storage_r) { struct sieve_storage *storage; @@ -304,24 +307,49 @@ int sieve_storage_alloc(struct sieve_instance *svinst, struct event *event, storage->storage_class = storage_class; storage->refcount = 1; storage->svinst = svinst; - storage->flags = flags; storage->data = p_strdup_empty(storage->pool, data); - storage->main_storage = main; + storage->flags = flags; - if (event != NULL) { - storage->event = event; - event_ref(storage->event); - } else { - event = sieve_storage_create_event(svinst, svinst->event); - storage->event = sieve_storage_create_driver_event( - event, storage_class->driver_name); - event_unref(&event); - } + storage->event = event; + event_ref(event); *storage_r = storage; return 0; } +int sieve_storage_alloc(struct sieve_instance *svinst, struct event *event, + const struct sieve_storage *storage_class, + const char *data, enum sieve_storage_flags flags, + bool main, struct sieve_storage **storage_r) +{ + struct sieve_storage *storage; + int ret; + + *storage_r = NULL; + + if (event != NULL) + event_ref(event); + else { + struct event *storage_event; + + storage_event = sieve_storage_create_event( + svinst, svinst->event); + event = sieve_storage_create_driver_event( + storage_event, storage_class->driver_name); + event_unref(&storage_event); + } + + ret = sieve_storage_alloc_from_class(svinst, event, storage_class, + data, flags, &storage); + if (ret == 0) + storage->main_storage = main; + + event_unref(&event); + + *storage_r = storage; + return ret; +} + static int sieve_storage_init_real(struct sieve_instance *svinst, struct event *event, const struct sieve_storage *storage_class, -- GitLab