From cc171840b280d7e25abf1234cb838ed6dff17ec1 Mon Sep 17 00:00:00 2001 From: Stephan Bosch <stephan.bosch@open-xchange.com> Date: Sat, 28 Sep 2024 20:22:47 +0200 Subject: [PATCH] lib-sieve: sieve - Use int for sieve_open_script() status result --- src/lib-sieve/sieve.c | 50 ++++++++++--------- src/lib-sieve/sieve.h | 10 ++-- .../imap-filter-sieve/imap-filter-sieve.c | 12 ++--- src/plugins/imapsieve/imap-sieve.c | 12 ++--- src/plugins/lda-sieve/lda-sieve-plugin.c | 13 +++-- 5 files changed, 49 insertions(+), 48 deletions(-) diff --git a/src/lib-sieve/sieve.c b/src/lib-sieve/sieve.c index d21f301fb..daa193e9c 100644 --- a/src/lib-sieve/sieve.c +++ b/src/lib-sieve/sieve.c @@ -388,24 +388,19 @@ sieve_load(struct sieve_instance *svinst, const char *bin_path, return sbin; } -static struct sieve_binary * +static int sieve_open_script_real(struct sieve_script *script, struct sieve_error_handler *ehandler, enum sieve_compile_flags flags, + struct sieve_binary **sbin_r, enum sieve_error *error_code_r) { struct sieve_instance *svinst = sieve_script_svinst(script); struct sieve_resource_usage rusage; struct sieve_binary *sbin; - enum sieve_error error_code; const char *error = NULL; int ret; - if (error_code_r != NULL) - *error_code_r = SIEVE_ERROR_NONE; - else - error_code_r = &error_code; - sieve_resource_usage_init(&rusage); /* Try to open the matching binary */ @@ -433,7 +428,7 @@ sieve_open_script_real(struct sieve_script *script, } else { if (sieve_compile_script(script, ehandler, flags, &sbin, error_code_r) < 0) - return NULL; + return -1; e_debug(svinst->event, "Script '%s' from %s successfully compiled", @@ -466,25 +461,34 @@ sieve_open_script_real(struct sieve_script *script, "%s", error); } sieve_binary_close(&sbin); + return -1; } - return sbin; + *sbin_r = sbin; + return 0; } -struct sieve_binary * -sieve_open_script(struct sieve_script *script, - struct sieve_error_handler *ehandler, - enum sieve_compile_flags flags, - enum sieve_error *error_code_r) +int sieve_open_script(struct sieve_script *script, + struct sieve_error_handler *ehandler, + enum sieve_compile_flags flags, + struct sieve_binary **sbin_r, + enum sieve_error *error_code_r) { - struct sieve_binary *sbin; + enum sieve_error error_code; + int ret; + + *sbin_r = NULL; + if (error_code_r != NULL) + *error_code_r = SIEVE_ERROR_NONE; + else + error_code_r = &error_code; T_BEGIN { - sbin = sieve_open_script_real(script, ehandler, flags, - error_code_r); + ret = sieve_open_script_real(script, ehandler, flags, + sbin_r, error_code_r); } T_END; - return sbin; + return ret; } int sieve_open(struct sieve_instance *svinst, const char *script_location, @@ -493,8 +497,8 @@ int sieve_open(struct sieve_instance *svinst, const char *script_location, enum sieve_error *error_code_r) { struct sieve_script *script; - struct sieve_binary *sbin; enum sieve_error error_code; + int ret; *sbin_r = NULL; if (error_code_r != NULL) @@ -517,15 +521,13 @@ int sieve_open(struct sieve_instance *svinst, const char *script_location, return -1; } - sbin = sieve_open_script(script, ehandler, flags, error_code_r); - /* Drop script reference, if sbin != NULL it holds a reference of its own. Otherwise the script object is freed here. */ + ret = sieve_open_script(script, ehandler, flags, + sbin_r, error_code_r); sieve_script_unref(&script); - - *sbin_r = sbin; - return (sbin == NULL ? -1 : 0); + return ret; } const char *sieve_get_source(struct sieve_binary *sbin) diff --git a/src/lib-sieve/sieve.h b/src/lib-sieve/sieve.h index cb06b2758..3d20d0e82 100644 --- a/src/lib-sieve/sieve.h +++ b/src/lib-sieve/sieve.h @@ -64,11 +64,11 @@ sieve_load(struct sieve_instance *svinst, const char *bin_path, not exist or if it contains errors, the script is (re-)compiled. Note that errors in the bytecode are caught only at runtime. */ -struct sieve_binary * -sieve_open_script(struct sieve_script *script, - struct sieve_error_handler *ehandler, - enum sieve_compile_flags flags, - enum sieve_error *error_code_r); +int sieve_open_script(struct sieve_script *script, + struct sieve_error_handler *ehandler, + enum sieve_compile_flags flags, + struct sieve_binary **sbin_r, + enum sieve_error *error_code_r); /* First tries to open the binary version of the specified script and if it does not exist or if it contains errors, the script is (re-)compiled. Note that errors in the bytecode are caught only at runtime. diff --git a/src/plugins/imap-filter-sieve/imap-filter-sieve.c b/src/plugins/imap-filter-sieve/imap-filter-sieve.c index 3b9cd5425..c77220e21 100644 --- a/src/plugins/imap-filter-sieve/imap-filter-sieve.c +++ b/src/plugins/imap-filter-sieve/imap-filter-sieve.c @@ -360,6 +360,7 @@ imap_sieve_filter_open_script(struct imap_filter_sieve_context *sctx, struct sieve_error_handler *ehandler; struct sieve_binary *sbin; const char *compile_name = "compile"; + int ret; i_assert(svinst != NULL); @@ -382,16 +383,15 @@ imap_sieve_filter_open_script(struct imap_filter_sieve_context *sctx, /* Load or compile the sieve script */ if (recompile) { - if (sieve_compile_script(script, ehandler, cpflags, - &sbin, error_code_r) < 0) - sbin = NULL; + ret = sieve_compile_script(script, ehandler, cpflags, + &sbin, error_code_r); } else { - sbin = sieve_open_script(script, ehandler, cpflags, - error_code_r); + ret = sieve_open_script(script, ehandler, cpflags, + &sbin, error_code_r); } /* Handle error */ - if (sbin == NULL) { + if (ret < 0) { switch (*error_code_r) { /* Script not found */ case SIEVE_ERROR_NOT_FOUND: diff --git a/src/plugins/imapsieve/imap-sieve.c b/src/plugins/imapsieve/imap-sieve.c index 82e4582ba..935a6f897 100644 --- a/src/plugins/imapsieve/imap-sieve.c +++ b/src/plugins/imapsieve/imap-sieve.c @@ -570,6 +570,7 @@ imap_sieve_run_open_script(struct imap_sieve_run *isrun, struct sieve_error_handler *ehandler; struct sieve_binary *sbin; const char *compile_name = "compile"; + int ret; if (recompile) { /* Warn */ @@ -590,16 +591,15 @@ imap_sieve_run_open_script(struct imap_sieve_run *isrun, /* Load or compile the sieve script */ if (recompile) { - if (sieve_compile_script(script, ehandler, cpflags, - &sbin, error_code_r) < 0) - sbin = NULL; + ret = sieve_compile_script(script, ehandler, cpflags, + &sbin, error_code_r); } else { - sbin = sieve_open_script(script, ehandler, cpflags, - error_code_r); + ret = sieve_open_script(script, ehandler, cpflags, + &sbin, error_code_r); } /* Handle error */ - if (sbin == NULL) { + if (ret < 0) { switch (*error_code_r) { /* Script not found */ case SIEVE_ERROR_NOT_FOUND: diff --git a/src/plugins/lda-sieve/lda-sieve-plugin.c b/src/plugins/lda-sieve/lda-sieve-plugin.c index 569b84b48..3695574d1 100644 --- a/src/plugins/lda-sieve/lda-sieve-plugin.c +++ b/src/plugins/lda-sieve/lda-sieve-plugin.c @@ -349,6 +349,7 @@ sieve_binary *lda_sieve_open(struct lda_sieve_run_context *srctx, struct sieve_error_handler *ehandler; struct sieve_binary *sbin; const char *compile_name = "compile"; + int ret; if (recompile) { /* Warn */ @@ -369,17 +370,15 @@ sieve_binary *lda_sieve_open(struct lda_sieve_run_context *srctx, sieve_error_handler_reset(ehandler); if (recompile) { - if (sieve_compile_script(script, ehandler, cpflags, - &sbin, error_code_r) < 0) - sbin = NULL; - + ret = sieve_compile_script(script, ehandler, cpflags, + &sbin, error_code_r); } else { - sbin = sieve_open_script(script, ehandler, cpflags, - error_code_r); + ret = sieve_open_script(script, ehandler, cpflags, + &sbin, error_code_r); } /* Load or compile the sieve script */ - if (sbin == NULL) { + if (ret < 0) { switch (*error_code_r) { /* Script not found */ case SIEVE_ERROR_NOT_FOUND: -- GitLab