diff --git a/src/lib-sieve/sieve.c b/src/lib-sieve/sieve.c index daa193e9ccea0e9ae1ad951cf287a2125001a141..4dce5729d4668cf2eb0e359d061b6f35d983e858 100644 --- a/src/lib-sieve/sieve.c +++ b/src/lib-sieve/sieve.c @@ -377,15 +377,10 @@ sieve_run(struct sieve_binary *sbin, struct sieve_result *result, * Reading/writing sieve binaries */ -struct sieve_binary * -sieve_load(struct sieve_instance *svinst, const char *bin_path, - enum sieve_error *error_code_r) +int sieve_load(struct sieve_instance *svinst, const char *bin_path, + struct sieve_binary **sbin_r, enum sieve_error *error_code_r) { - struct sieve_binary *sbin; - - if (sieve_binary_open(svinst, bin_path, NULL, &sbin, error_code_r) < 0) - return NULL; - return sbin; + return sieve_binary_open(svinst, bin_path, NULL, sbin_r, error_code_r); } static int diff --git a/src/lib-sieve/sieve.h b/src/lib-sieve/sieve.h index 3d20d0e82ab629c9a81ecf0b5ac692662e6b81a5..cd4ff7b6de80f1816c5406153dce085271a19e57 100644 --- a/src/lib-sieve/sieve.h +++ b/src/lib-sieve/sieve.h @@ -57,9 +57,8 @@ int sieve_compile(struct sieve_instance *svinst, const char *script_location, */ /* Loads the sieve binary indicated by the provided path. */ -struct sieve_binary * -sieve_load(struct sieve_instance *svinst, const char *bin_path, - enum sieve_error *error_code_r); +int sieve_load(struct sieve_instance *svinst, const char *bin_path, + 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/sieve-tools/sieve-dump.c b/src/sieve-tools/sieve-dump.c index 7a532618953be17a1beb74537c05d8f25e75d175..d197afd6e81ed153b47a9e0bb7e8efbabcd28a34 100644 --- a/src/sieve-tools/sieve-dump.c +++ b/src/sieve-tools/sieve-dump.c @@ -80,15 +80,13 @@ int main(int argc, char **argv) sieve_enable_debug_extension(svinst); /* Dump binary */ - sbin = sieve_load(svinst, binfile, NULL); - if (sbin != NULL) { - sieve_tool_dump_binary_to(sbin, - (outfile == NULL ? "-" : outfile), - hexdump); - sieve_close(&sbin); - } else { + if (sieve_load(svinst, binfile, &sbin, NULL) < 0) { i_error("failed to load binary: %s", binfile); exit_status = EXIT_FAILURE; + } else { + sieve_tool_dump_binary_to(sbin, outfile == NULL ? "-" : outfile, + hexdump); + sieve_close(&sbin); } sieve_tool_deinit(&sieve_tool); diff --git a/src/testsuite/testsuite-binary.c b/src/testsuite/testsuite-binary.c index 011db85dc8094b03d6a6f82591b278917223482a..d1fec9e058dbc9cf6d197a37d5b60935d4a91666 100644 --- a/src/testsuite/testsuite-binary.c +++ b/src/testsuite/testsuite-binary.c @@ -75,8 +75,11 @@ bool testsuite_binary_save(struct sieve_binary *sbin, const char *name) struct sieve_binary *testsuite_binary_load(const char *name) { struct sieve_instance *svinst = testsuite_sieve_instance; + struct sieve_binary *sbin; - return sieve_load(svinst, - t_strdup_printf("%s/%s", testsuite_binary_tmp, - sieve_binfile_from_name(name)), NULL); + if (sieve_load(svinst, t_strdup_printf("%s/%s", testsuite_binary_tmp, + sieve_binfile_from_name(name)), + &sbin, NULL) < 0) + return NULL; + return sbin; }