Error return code for io_reload_data()

The return code from new_data() and io_load_data() is explicitly defined as a
bit mask. A file access error is recognised and reported back to the user.

Signed-off-by: Lars Henriksen <LarsHenriksen@get2net.dk>
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
This commit is contained in:
Lars Henriksen 2018-09-05 08:46:16 +02:00 committed by Lukas Fleischer
parent ff402d21ab
commit 4b192c0773
3 changed files with 23 additions and 10 deletions

View File

@ -309,7 +309,9 @@ static inline void key_generic_reload(void)
int ret;
ret = io_reload_data();
if (ret != IO_RELOAD_CANCEL && ret != IO_RELOAD_NOOP) {
if (ret == IO_RELOAD_LOAD ||
ret == IO_RELOAD_CTINUE ||
ret == IO_RELOAD_MERGE) {
ui_todo_load_items();
ui_todo_sel_reset();
do_storage(0);
@ -331,6 +333,8 @@ static inline void key_generic_reload(void)
case IO_RELOAD_NOOP:
msg = _("Data were already loaded");
break;
case IO_RELOAD_ERROR:
EXIT(_("Cannot open data file"));
}
status_mesg(msg, "");
}

View File

@ -673,7 +673,8 @@ enum {
IO_RELOAD_CTINUE,
IO_RELOAD_MERGE,
IO_RELOAD_CANCEL,
IO_RELOAD_NOOP
IO_RELOAD_NOOP,
IO_RELOAD_ERROR
};
/* Week days. */

View File

@ -444,12 +444,15 @@ static int resolve_save_conflict(void)
return ret;
}
/* Return codes for new_data(). */
/*
* Return codes for new_data() and io_load_data().
* Note that they are file internal.
*/
#define NONEW 0
#define APTS 1
#define TODO 2
#define APTS_TODO 3
#define NOKNOW 4
#define APTS (1 << 0)
#define TODO (1 << 1)
#define APTS_TODO APTS | TODO
#define NOKNOW -1
static int new_data()
{
char sha1_new[SHA1_DIGESTLEN * 2 + 1];
@ -813,8 +816,8 @@ void io_load_todo(struct item_filter *filter)
/*
* Load appointments and todo items.
* Unless told otherwise, the function will only load a file that has changed
* since last saved or loaded, see new_data() return codes.
* Return codes are for use in io_reload_data() only.
* since last saved or loaded. The new_data() return code is passed on when
* force is false. When force is true (FORCE), the return code is of no use.
*/
int io_load_data(struct item_filter *filter, int force)
{
@ -824,6 +827,9 @@ int io_load_data(struct item_filter *filter, int force)
else
force = new_data();
if (force == NOKNOW)
goto exit;
if (force & APTS) {
apoint_llist_free();
event_llist_free();
@ -842,7 +848,7 @@ int io_load_data(struct item_filter *filter, int force)
}
io_unset_modified();
exit:
run_hook("post-load");
return force;
}
@ -889,6 +895,8 @@ int io_reload_data(void)
load = io_load_data(NULL, load);
if (load == NONEW)
ret = IO_RELOAD_NOOP;
else if (load == NOKNOW)
ret = IO_RELOAD_ERROR;
cleanup:
io_mutex_unlock();
mem_free(msg_um_asktype);