Mercurial > dovecot > original-hg > dovecot-1.2
diff src/lib-storage/mailbox-list.c @ 5613:f717fb4b31c0 HEAD
Error handling rewrite.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Sun, 13 May 2007 20:10:48 +0300 |
parents | 3c8d3c722539 |
children | a0310d7b6971 |
line wrap: on
line diff
--- a/src/lib-storage/mailbox-list.c Sun May 13 19:53:41 2007 +0300 +++ b/src/lib-storage/mailbox-list.c Sun May 13 20:10:48 2007 +0300 @@ -154,7 +154,7 @@ void mailbox_list_deinit(struct mailbox_list *list) { - i_free_and_null(list->error); + i_free_and_null(list->error_string); list->v.deinit(list); } @@ -309,11 +309,13 @@ int mailbox_list_delete_mailbox(struct mailbox_list *list, const char *name) { if (!mailbox_list_is_valid_existing_name(list, name)) { - mailbox_list_set_error(list, "Invalid mailbox name"); + mailbox_list_set_error(list, MAIL_ERROR_PARAMS, + "Invalid mailbox name"); return -1; } if (strcmp(name, "INBOX") == 0) { - mailbox_list_set_error(list, "INBOX can't be deleted."); + mailbox_list_set_error(list, MAIL_ERROR_NOTPOSSIBLE, + "INBOX can't be deleted."); return -1; } return list->v.delete_mailbox(list, name); @@ -324,7 +326,8 @@ { if (!mailbox_list_is_valid_existing_name(list, oldname) || !mailbox_list_is_valid_create_name(list, newname)) { - mailbox_list_set_error(list, "Invalid mailbox name"); + mailbox_list_set_error(list, MAIL_ERROR_PARAMS, + "Invalid mailbox name"); return -1; } @@ -415,26 +418,28 @@ } const char *mailbox_list_get_last_error(struct mailbox_list *list, - bool *temporary_error_r) + enum mail_error *error_r) { - *temporary_error_r = list->temporary_error; + *error_r = list->error; - return list->error; + return list->error_string != NULL ? list->error_string : + "Unknown internal list error"; } void mailbox_list_clear_error(struct mailbox_list *list) { - i_free_and_null(list->error); + i_free_and_null(list->error_string); - list->temporary_error = FALSE; + list->error = MAIL_ERROR_NONE; } -void mailbox_list_set_error(struct mailbox_list *list, const char *error) +void mailbox_list_set_error(struct mailbox_list *list, + enum mail_error error, const char *string) { - i_free(list->error); - list->error = i_strdup(error); + i_free(list->error_string); + list->error_string = i_strdup(string); - list->temporary_error = FALSE; + list->error = error; } void mailbox_list_set_internal_error(struct mailbox_list *list) @@ -444,11 +449,11 @@ tm = localtime(&ioloop_time); - i_free(list->error); - list->error = + i_free(list->error_string); + list->error_string = strftime(str, sizeof(str), CRITICAL_MSG_STAMP, tm) > 0 ? i_strdup(str) : i_strdup(CRITICAL_MSG); - list->temporary_error = TRUE; + list->error = MAIL_ERROR_TEMP; } void mailbox_list_set_critical(struct mailbox_list *list, const char *fmt, ...) @@ -464,3 +469,15 @@ easier to look from log files the actual error message. */ mailbox_list_set_internal_error(list); } + +bool mailbox_list_set_error_from_errno(struct mailbox_list *list) +{ + const char *error_string; + enum mail_error error; + + if (!mail_error_from_errno(&error, &error_string)) + return FALSE; + + mailbox_list_set_error(list, error, error_string); + return TRUE; +}