From 9bd52a50c7efbca18b56b4f352f6e8f0903e5786 Mon Sep 17 00:00:00 2001 From: Stephan Bosch <stephan.bosch@open-xchange.com> Date: Sun, 15 Sep 2024 01:29:12 +0200 Subject: [PATCH] lib-sieve: sieve-storage: sieve-file-script - Use int for sieve_file_script_open_from_path() status result --- .../storage/file/sieve-file-script.c | 31 +++++++------------ .../storage/file/sieve-file-storage-active.c | 25 ++++++++------- .../storage/file/sieve-file-storage-save.c | 17 +++++----- .../storage/file/sieve-file-storage.h | 7 ++--- 4 files changed, 35 insertions(+), 45 deletions(-) diff --git a/src/lib-sieve/storage/file/sieve-file-script.c b/src/lib-sieve/storage/file/sieve-file-script.c index 341b7f8b2..3fadcc599 100644 --- a/src/lib-sieve/storage/file/sieve-file-script.c +++ b/src/lib-sieve/storage/file/sieve-file-script.c @@ -239,38 +239,29 @@ int sieve_file_script_init_from_path(struct sieve_file_storage *fstorage, return 0; } -struct sieve_file_script * -sieve_file_script_open_from_path(struct sieve_file_storage *fstorage, - const char *path, const char *scriptname, - enum sieve_error *error_code_r) +int sieve_file_script_open_from_path(struct sieve_file_storage *fstorage, + const char *path, const char *scriptname, + struct sieve_file_script **fscript_r) { struct sieve_storage *storage = &fstorage->storage; struct sieve_file_script *fscript; - enum sieve_error error_code; - if (error_code_r != NULL) - *error_code_r = SIEVE_ERROR_NONE; - else - error_code_r = &error_code; + *fscript_r = NULL; if (sieve_file_script_init_from_path(fstorage, path, scriptname, - &fscript) < 0) { - *error_code_r = storage->error_code; - return NULL; - } + &fscript) < 0) + return -1; - if (sieve_script_open(&fscript->script, error_code_r) < 0) { + if (sieve_script_open(&fscript->script, NULL) < 0) { struct sieve_script *script = &fscript->script; - const char *errormsg; - errormsg = sieve_script_get_last_error( - &fscript->script, error_code_r); - sieve_storage_set_error(storage, *error_code_r, "%s", errormsg); + sieve_storage_copy_error(storage, script->storage); sieve_script_unref(&script); - return NULL; + return -1; } - return fscript; + *fscript_r = fscript; + return 0; } /* diff --git a/src/lib-sieve/storage/file/sieve-file-storage-active.c b/src/lib-sieve/storage/file/sieve-file-storage-active.c index 028a2d079..bcc7456e1 100644 --- a/src/lib-sieve/storage/file/sieve-file-storage-active.c +++ b/src/lib-sieve/storage/file/sieve-file-storage-active.c @@ -242,6 +242,8 @@ int sieve_file_storage_active_script_open(struct sieve_storage *storage, const char *scriptfile, *link; int ret; + *script_r = NULL; + /* Read the active link */ ret = sieve_file_storage_active_read_link(fstorage, &link); if (ret <= 0) { @@ -250,14 +252,14 @@ int sieve_file_storage_active_script_open(struct sieve_storage *storage, /* Try to open the active_path as a regular file */ if (S_ISDIR(fstorage->st.st_mode)) { - fscript = sieve_file_script_open_from_path( - fstorage, fstorage->active_path, NULL, NULL); + ret = sieve_file_script_open_from_path( + fstorage, fstorage->active_path, NULL, + &fscript); } else { - if (sieve_file_script_open_from_name( - fstorage, NULL, &fscript) < 0) - fscript = NULL; + ret = sieve_file_script_open_from_name(fstorage, NULL, + &fscript); } - if (fscript == NULL) { + if (ret < 0) { if (storage->error_code != SIEVE_ERROR_NOT_FOUND) { sieve_storage_set_critical( storage, @@ -283,18 +285,17 @@ int sieve_file_storage_active_script_open(struct sieve_storage *storage, return -1; } - fscript = sieve_file_script_open_from_path( + ret = sieve_file_script_open_from_path( fstorage, fstorage->active_path, - sieve_script_file_get_scriptname(scriptfile), NULL); - if (fscript == NULL && storage->error_code == SIEVE_ERROR_NOT_FOUND) { + sieve_script_file_get_scriptname(scriptfile), &fscript); + if (ret < 0 && storage->error_code == SIEVE_ERROR_NOT_FOUND) { e_warning(storage->event, "Active sieve script symlink %s points to non-existent script " "(points to %s).", fstorage->active_path, link); } - if (fscript != NULL) { - *script_r = &fscript->script; + if (ret < 0) return -1; - } + *script_r = &fscript->script; return 0; } diff --git a/src/lib-sieve/storage/file/sieve-file-storage-save.c b/src/lib-sieve/storage/file/sieve-file-storage-save.c index d4468b4d8..a96afda9b 100644 --- a/src/lib-sieve/storage/file/sieve-file-storage-save.c +++ b/src/lib-sieve/storage/file/sieve-file-storage-save.c @@ -347,10 +347,10 @@ sieve_file_storage_save_get_tempscript(struct sieve_storage_save_context *sctx) { struct sieve_file_save_context *fsctx = container_of(sctx, struct sieve_file_save_context, context); + struct sieve_storage *storage = sctx->storage; struct sieve_file_storage *fstorage = - container_of(sctx->storage, struct sieve_file_storage, storage); + container_of(storage, struct sieve_file_storage, storage); struct sieve_file_script *tmpscript; - enum sieve_error error_code; const char *scriptname; if (sctx->failed) @@ -360,20 +360,19 @@ sieve_file_storage_save_get_tempscript(struct sieve_storage_save_context *sctx) return sctx->scriptobject; scriptname = (sctx->scriptname == NULL ? "" : sctx->scriptname); - tmpscript = sieve_file_script_open_from_path(fstorage, fsctx->tmp_path, - scriptname, &error_code); - - if (tmpscript == NULL) { - if (error_code == SIEVE_ERROR_NOT_FOUND) { + if (sieve_file_script_open_from_path(fstorage, + fsctx->tmp_path, scriptname, + &tmpscript) < 0) { + if (storage->error_code == SIEVE_ERROR_NOT_FOUND) { sieve_storage_set_critical( - sctx->storage, "save: " + storage, "save: " "Temporary script file '%s' got lost, " "which should not happen " "(possibly deleted externally).", fsctx->tmp_path); } else { sieve_storage_set_critical( - sctx->storage, "save: " + storage, "save: " "Failed to open temporary script file '%s'", fsctx->tmp_path); } diff --git a/src/lib-sieve/storage/file/sieve-file-storage.h b/src/lib-sieve/storage/file/sieve-file-storage.h index 4efcce4f9..6a9a7e929 100644 --- a/src/lib-sieve/storage/file/sieve-file-storage.h +++ b/src/lib-sieve/storage/file/sieve-file-storage.h @@ -155,10 +155,9 @@ int sieve_file_script_open_from_name(struct sieve_file_storage *fstorage, int sieve_file_script_init_from_path(struct sieve_file_storage *fstorage, const char *path, const char *scriptname, struct sieve_file_script **fscript_r); -struct sieve_file_script * -sieve_file_script_open_from_path(struct sieve_file_storage *fstorage, - const char *path, const char *scriptname, - enum sieve_error *error_code_r); +int sieve_file_script_open_from_path(struct sieve_file_storage *fstorage, + const char *path, const char *scriptname, + struct sieve_file_script **fscript_r); /* Return directory where script resides in. Returns NULL if this is not a file script. -- GitLab