diff --git a/src/lib-sieve/storage/file/sieve-file-script.c b/src/lib-sieve/storage/file/sieve-file-script.c index 341b7f8b2c2250f72d7fe41ad1c5481fcb607d8b..3fadcc599f289d10ecd74c766369aaee60989621 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 028a2d079d16cd0a362120a53f096f3a4e5b55ca..bcc7456e1260ea82aa69847f415b3821adca36df 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 d4468b4d81f9e51a03d3c88d6e099ce4253f1f72..a96afda9b880f5d1695f14f5a9bdb2787c6e6dae 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 4efcce4f9a2ef469c981ef8c1f35478d806a003c..6a9a7e929529fa465e1e5cfc79cb27240a921155 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.