From 429a0ab10beddb1262b52cd08b1ad65aff5f835c Mon Sep 17 00:00:00 2001 From: Stephan Bosch <stephan.bosch@open-xchange.com> Date: Mon, 2 Sep 2024 00:06:37 +0200 Subject: [PATCH] lib-sieve: sieve-storage - Use int for sieve_storage_list_init() status result --- src/lib-sieve/sieve-storage-private.h | 4 ++-- src/lib-sieve/sieve-storage.c | 16 +++++++++------- src/lib-sieve/sieve-storage.h | 4 ++-- .../storage/file/sieve-file-storage-list.c | 11 ++++++----- src/lib-sieve/storage/file/sieve-file-storage.h | 4 ++-- src/managesieve/cmd-listscripts.c | 3 +-- .../doveadm-sieve/doveadm-sieve-cmd-list.c | 3 +-- src/plugins/doveadm-sieve/doveadm-sieve-sync.c | 3 +-- 8 files changed, 24 insertions(+), 24 deletions(-) diff --git a/src/lib-sieve/sieve-storage-private.h b/src/lib-sieve/sieve-storage-private.h index 589bfd735..04697fc02 100644 --- a/src/lib-sieve/sieve-storage-private.h +++ b/src/lib-sieve/sieve-storage-private.h @@ -54,8 +54,8 @@ struct sieve_storage_vfuncs { time_t *last_change_r); /* listing scripts */ - struct sieve_storage_list_context *(*list_init)( - struct sieve_storage *storage); + int (*list_init)(struct sieve_storage *storage, + struct sieve_storage_list_context **lctx_r); const char *(*list_next)(struct sieve_storage_list_context *lctx, bool *active_r); int (*list_deinit)(struct sieve_storage_list_context *lctx); diff --git a/src/lib-sieve/sieve-storage.c b/src/lib-sieve/sieve-storage.c index 29e51bc7b..15a66eae7 100644 --- a/src/lib-sieve/sieve-storage.c +++ b/src/lib-sieve/sieve-storage.c @@ -997,18 +997,20 @@ int sieve_storage_active_script_get_last_change(struct sieve_storage *storage, * Listing scripts */ -struct sieve_storage_list_context * -sieve_storage_list_init(struct sieve_storage *storage) +int sieve_storage_list_init(struct sieve_storage *storage, + struct sieve_storage_list_context **lctx_r) { struct sieve_storage_list_context *lctx; - i_assert(storage->v.list_init != NULL); - lctx = storage->v.list_init(storage); + *lctx_r = NULL; - if (lctx != NULL) - lctx->storage = storage; + i_assert(storage->v.list_init != NULL); + if (storage->v.list_init(storage, &lctx) < 0) + return -1; - return lctx; + lctx->storage = storage; + *lctx_r = lctx; + return 0; } const char * diff --git a/src/lib-sieve/sieve-storage.h b/src/lib-sieve/sieve-storage.h index 29ab19a1c..a4ad97346 100644 --- a/src/lib-sieve/sieve-storage.h +++ b/src/lib-sieve/sieve-storage.h @@ -80,8 +80,8 @@ int sieve_storage_active_script_get_last_change(struct sieve_storage *storage, struct sieve_storage_list_context; /* Create a context for listing the scripts in the storage */ -struct sieve_storage_list_context * -sieve_storage_list_init(struct sieve_storage *storage); +int sieve_storage_list_init(struct sieve_storage *storage, + struct sieve_storage_list_context **lctx_r); /* Get the next script in the storage. */ const char *sieve_storage_list_next(struct sieve_storage_list_context *lctx, bool *active_r) ATTR_NULL(2); diff --git a/src/lib-sieve/storage/file/sieve-file-storage-list.c b/src/lib-sieve/storage/file/sieve-file-storage-list.c index c2bd44a93..7718e9459 100644 --- a/src/lib-sieve/storage/file/sieve-file-storage-list.c +++ b/src/lib-sieve/storage/file/sieve-file-storage-list.c @@ -22,8 +22,8 @@ struct sieve_file_list_context { DIR *dirp; }; -struct sieve_storage_list_context * -sieve_file_storage_list_init(struct sieve_storage *storage) +int sieve_file_storage_list_init(struct sieve_storage *storage, + struct sieve_storage_list_context **lctx_r) { struct sieve_file_storage *fstorage = container_of(storage, struct sieve_file_storage, storage); @@ -54,7 +54,7 @@ sieve_file_storage_list_init(struct sieve_storage *storage) "opendir(%s) failed: %m", fstorage->path); break; } - return NULL; + return -1; } T_BEGIN { @@ -78,9 +78,10 @@ sieve_file_storage_list_init(struct sieve_storage *storage) e_error(storage->event, "closedir(%s) failed: %m", fstorage->path); } - return NULL; + return -1; } - return &flctx->context; + *lctx_r = &flctx->context; + return 0; } const char * diff --git a/src/lib-sieve/storage/file/sieve-file-storage.h b/src/lib-sieve/storage/file/sieve-file-storage.h index 4c01dd726..4a3350f3e 100644 --- a/src/lib-sieve/storage/file/sieve-file-storage.h +++ b/src/lib-sieve/storage/file/sieve-file-storage.h @@ -78,8 +78,8 @@ int sieve_file_storage_active_script_get_last_change( /* Listing */ -struct sieve_storage_list_context * -sieve_file_storage_list_init(struct sieve_storage *storage); +int sieve_file_storage_list_init(struct sieve_storage *storage, + struct sieve_storage_list_context **lctx_r); const char * sieve_file_storage_list_next(struct sieve_storage_list_context *lctx, bool *active); diff --git a/src/managesieve/cmd-listscripts.c b/src/managesieve/cmd-listscripts.c index 7a4490c73..564c5cc13 100644 --- a/src/managesieve/cmd-listscripts.c +++ b/src/managesieve/cmd-listscripts.c @@ -25,8 +25,7 @@ bool cmd_listscripts(struct client_command_context *cmd) if (!client_read_no_args(cmd)) return FALSE; - lctx = sieve_storage_list_init(client->storage); - if (lctx == NULL) { + if (sieve_storage_list_init(client->storage, &lctx) < 0) { client_command_storage_error( cmd, "Failed to list scripts"); return TRUE; diff --git a/src/plugins/doveadm-sieve/doveadm-sieve-cmd-list.c b/src/plugins/doveadm-sieve/doveadm-sieve-cmd-list.c index e12b5e0c3..f648eda06 100644 --- a/src/plugins/doveadm-sieve/doveadm-sieve-cmd-list.c +++ b/src/plugins/doveadm-sieve/doveadm-sieve-cmd-list.c @@ -19,8 +19,7 @@ static int cmd_sieve_list_run(struct doveadm_sieve_cmd_context *_ctx) const char *scriptname; bool active; - lctx = sieve_storage_list_init(storage); - if (lctx == NULL) { + if (sieve_storage_list_init(storage, &lctx) < 0) { e_error(event, "Listing Sieve scripts failed: %s", sieve_storage_get_last_error(storage, &error_code)); doveadm_sieve_cmd_failed_error(_ctx, error_code); diff --git a/src/plugins/doveadm-sieve/doveadm-sieve-sync.c b/src/plugins/doveadm-sieve/doveadm-sieve-sync.c index 879d6f62c..3d23e8e76 100644 --- a/src/plugins/doveadm-sieve/doveadm-sieve-sync.c +++ b/src/plugins/doveadm-sieve/doveadm-sieve-sync.c @@ -625,8 +625,7 @@ sieve_attribute_iter_script_init(struct sieve_mailbox_attribute_iter *siter) if (ret <= 0) return ret; - siter->sieve_list = sieve_storage_list_init(svstorage); - if (siter->sieve_list == NULL) { + if (sieve_storage_list_init(svstorage, &siter->sieve_list) < 0) { mail_storage_set_critical( siter->iter.box->storage, "Failed to iterate sieve scripts: %s", -- GitLab