# HG changeset patch # User nadvornik # Date 1216751232 0 # Node ID 2f9edd196dcadf2d1c5413ebff29c4fe8f77c72b # Parent 9108a7158c02f9c43dbbe75e73ad85b08f146284 clean up fd->change on error diff -r 9108a7158c02 -r 2f9edd196dca src/filedata.c --- a/src/filedata.c Tue Jul 22 18:13:41 2008 +0000 +++ b/src/filedata.c Tue Jul 22 18:27:12 2008 +0000 @@ -1331,72 +1331,99 @@ return ret; } -gboolean file_data_sc_add_ci_copy_list(GList *fd_list, const gchar *dest) +static void file_data_sc_revert_ci_list(GList *fd_list) { GList *work; - gboolean ret = TRUE; work = fd_list; while (work) { FileData *fd = work->data; - if (!file_data_sc_add_ci_copy(fd, dest)) ret = FALSE; + file_data_sc_free_ci(fd); + work = work->prev; + } +} + + +gboolean file_data_sc_add_ci_copy_list(GList *fd_list, const gchar *dest) +{ + GList *work; + + work = fd_list; + while (work) + { + FileData *fd = work->data; + + if (!file_data_sc_add_ci_copy(fd, dest)) + { + file_data_sc_revert_ci_list(work->prev); + return FALSE; + } work = work->next; } - return ret; + return TRUE; } gboolean file_data_sc_add_ci_move_list(GList *fd_list, const gchar *dest) { GList *work; - gboolean ret = TRUE; work = fd_list; while (work) { FileData *fd = work->data; - if (!file_data_sc_add_ci_move(fd, dest)) ret = FALSE; + if (!file_data_sc_add_ci_move(fd, dest)) + { + file_data_sc_revert_ci_list(work->prev); + return FALSE; + } work = work->next; } - return ret; + return TRUE; } gboolean file_data_sc_add_ci_rename_list(GList *fd_list, const gchar *dest) { GList *work; - gboolean ret = TRUE; work = fd_list; while (work) { FileData *fd = work->data; - if (!file_data_sc_add_ci_rename(fd, dest)) ret = FALSE; + if (!file_data_sc_add_ci_rename(fd, dest)) + { + file_data_sc_revert_ci_list(work->prev); + return FALSE; + } work = work->next; } - return ret; + return TRUE; } gboolean file_data_sc_add_ci_unspecified_list(GList *fd_list, const gchar *dest) { GList *work; - gboolean ret = TRUE; work = fd_list; while (work) { FileData *fd = work->data; - if (!file_data_sc_add_ci_unspecified(fd, dest)) ret = FALSE; + if (!file_data_sc_add_ci_unspecified(fd, dest)) + { + file_data_sc_revert_ci_list(work->prev); + return FALSE; + } work = work->next; } - return ret; + return TRUE; } void file_data_sc_free_ci_list(GList *fd_list)