From 03b7e347796f1ac782ccf6bc55d4da4c4fd9a0af Mon Sep 17 00:00:00 2001 From: Stephan Bosch <stephan.bosch@open-xchange.com> Date: Sun, 1 Sep 2024 16:33:40 +0200 Subject: [PATCH] lib-sieve: sieve-script - Use int for sieve_script_binary_load() status result --- src/lib-sieve/sieve-script-private.h | 5 +++-- src/lib-sieve/sieve-script.c | 22 ++++++++++++++----- src/lib-sieve/sieve-script.h | 6 ++--- src/lib-sieve/sieve.c | 3 +-- .../storage/dict/sieve-dict-script.c | 12 +++++----- .../storage/file/sieve-file-script.c | 10 ++++----- .../storage/ldap/sieve-ldap-script.c | 12 +++++----- 7 files changed, 38 insertions(+), 32 deletions(-) diff --git a/src/lib-sieve/sieve-script-private.h b/src/lib-sieve/sieve-script-private.h index c876575cd..19396274d 100644 --- a/src/lib-sieve/sieve-script-private.h +++ b/src/lib-sieve/sieve-script-private.h @@ -28,8 +28,9 @@ struct sieve_script_vfuncs { struct sieve_dumptime_env *denv, struct sieve_binary_block *sblock, sieve_size_t *offset); - struct sieve_binary *(*binary_load)(struct sieve_script *script, - enum sieve_error *error_code_r); + int (*binary_load)(struct sieve_script *script, + struct sieve_binary **sbin_r, + enum sieve_error *error_code_r); int (*binary_save)(struct sieve_script *script, struct sieve_binary *sbin, bool update, enum sieve_error *error_code_r); diff --git a/src/lib-sieve/sieve-script.c b/src/lib-sieve/sieve-script.c index 13796d49f..86fdc92f0 100644 --- a/src/lib-sieve/sieve-script.c +++ b/src/lib-sieve/sieve-script.c @@ -516,16 +516,28 @@ bool sieve_script_binary_dump_metadata(struct sieve_script *script, return result; } -struct sieve_binary * -sieve_script_binary_load(struct sieve_script *script, - enum sieve_error *error_code_r) +int sieve_script_binary_load(struct sieve_script *script, + struct sieve_binary **sbin_r, + enum sieve_error *error_code_r) { + 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; + if (script->v.binary_load == NULL) { *error_code_r = SIEVE_ERROR_NOT_POSSIBLE; - return NULL; + return -1; } - return script->v.binary_load(script, error_code_r); + ret = script->v.binary_load(script, sbin_r, error_code_r); + i_assert(ret <= 0); + i_assert(ret < 0 || *sbin_r != NULL); + return ret; } int sieve_script_binary_save(struct sieve_script *script, diff --git a/src/lib-sieve/sieve-script.h b/src/lib-sieve/sieve-script.h index c861b5ea4..3cc218758 100644 --- a/src/lib-sieve/sieve-script.h +++ b/src/lib-sieve/sieve-script.h @@ -77,9 +77,9 @@ bool sieve_script_binary_dump_metadata(struct sieve_script *script, struct sieve_binary_block *sblock, sieve_size_t *offset) ATTR_NULL(1); -struct sieve_binary * -sieve_script_binary_load(struct sieve_script *script, - enum sieve_error *error_code_r); +int sieve_script_binary_load(struct sieve_script *script, + struct sieve_binary **sbin_r, + enum sieve_error *error_code_r); int sieve_script_binary_save(struct sieve_script *script, struct sieve_binary *sbin, bool update, enum sieve_error *error_code_r); diff --git a/src/lib-sieve/sieve.c b/src/lib-sieve/sieve.c index 1e8cd09cb..db1b27798 100644 --- a/src/lib-sieve/sieve.c +++ b/src/lib-sieve/sieve.c @@ -403,8 +403,7 @@ sieve_open_script_real(struct sieve_script *script, sieve_resource_usage_init(&rusage); /* Try to open the matching binary */ - sbin = sieve_script_binary_load(script, error_code_r); - if (sbin != NULL) { + if (sieve_script_binary_load(script, &sbin, error_code_r) == 0) { sieve_binary_get_resource_usage(sbin, &rusage); /* Ok, it exists; now let's see if it is up to date */ diff --git a/src/lib-sieve/storage/dict/sieve-dict-script.c b/src/lib-sieve/storage/dict/sieve-dict-script.c index 9ea88710c..91edf285e 100644 --- a/src/lib-sieve/storage/dict/sieve-dict-script.c +++ b/src/lib-sieve/storage/dict/sieve-dict-script.c @@ -224,21 +224,19 @@ sieve_dict_script_get_binpath(struct sieve_dict_script *dscript) return dscript->binpath; } -static struct sieve_binary * +static int sieve_dict_script_binary_load(struct sieve_script *script, + struct sieve_binary **sbin_r, enum sieve_error *error_code_r) { struct sieve_dict_script *dscript = container_of(script, struct sieve_dict_script, script); - struct sieve_binary *sbin; if (sieve_dict_script_get_binpath(dscript) == NULL) - return NULL; + return -1; - if (sieve_binary_open(script->storage->svinst, dscript->binpath, - script, &sbin, error_code_r) < 0) - return NULL; - return sbin; + return sieve_binary_open(script->storage->svinst, dscript->binpath, + script, sbin_r, error_code_r); } static int diff --git a/src/lib-sieve/storage/file/sieve-file-script.c b/src/lib-sieve/storage/file/sieve-file-script.c index 910cb7354..d48df7735 100644 --- a/src/lib-sieve/storage/file/sieve-file-script.c +++ b/src/lib-sieve/storage/file/sieve-file-script.c @@ -531,19 +531,17 @@ sieve_file_script_binary_read_metadata(struct sieve_script *script, return 1; } -static struct sieve_binary * +static int sieve_file_script_binary_load(struct sieve_script *script, + struct sieve_binary **sbin_r, enum sieve_error *error_code_r) { struct sieve_file_script *fscript = container_of(script, struct sieve_file_script, script); struct sieve_instance *svinst = script->storage->svinst; - struct sieve_binary *sbin; - if (sieve_binary_open(svinst, fscript->binpath, script, - &sbin, error_code_r) < 0) - return NULL; - return sbin; + return sieve_binary_open(svinst, fscript->binpath, script, + sbin_r, error_code_r); } static int diff --git a/src/lib-sieve/storage/ldap/sieve-ldap-script.c b/src/lib-sieve/storage/ldap/sieve-ldap-script.c index 027e0f21c..0a27adc83 100644 --- a/src/lib-sieve/storage/ldap/sieve-ldap-script.c +++ b/src/lib-sieve/storage/ldap/sieve-ldap-script.c @@ -246,22 +246,20 @@ sieve_ldap_script_get_binpath(struct sieve_ldap_script *lscript) return lscript->binpath; } -static struct sieve_binary * +static int sieve_ldap_script_binary_load(struct sieve_script *script, + struct sieve_binary **sbin_r, enum sieve_error *error_code_r) { struct sieve_storage *storage = script->storage; struct sieve_ldap_script *lscript = container_of(script, struct sieve_ldap_script, script); - struct sieve_binary *sbin; if (sieve_ldap_script_get_binpath(lscript) == NULL) - return NULL; + return -1; - if (sieve_binary_open(storage->svinst, lscript->binpath, script, - &sbin, error_code_r) < 0) - return NULL; - return sbin; + return sieve_binary_open(storage->svinst, lscript->binpath, script, + sbin_r, error_code_r); } static int -- GitLab