replacing the macro to restore programme flow

git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@13394 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
Neil Williams 2006-02-26 18:06:52 +00:00
parent bcc1e9f69e
commit 082212a7eb

View File

@ -157,8 +157,47 @@ qof_commit_edit_part2(QofInstance *inst,
void (*on_done)(QofInstance *),
void (*on_free)(QofInstance *));
#define QOF_COMMIT_EDIT_PART2(inst, on_error, on_done, on_free) \
qof_commit_edit_part2((inst), (on_error), (on_done), (on_free))
/** \brief Macro version of ::qof_commit_edit_part2
\note This macro changes programme flow if the instance is freed.
*/
#define QOF_COMMIT_EDIT_PART2(inst,on_error,on_done,on_free) { \
QofBackend * be; \
\
/* See if there's a backend. If there is, invoke it. */ \
be = qof_book_get_backend ((inst)->book); \
if (be && qof_backend_commit_exists(be)) \
{ \
QofBackendError errcode; \
\
/* clear errors */ \
do { \
errcode = qof_backend_get_error (be); \
} while (ERR_BACKEND_NO_ERR != errcode); \
\
qof_backend_run_commit(be, (inst)); \
errcode = qof_backend_get_error (be); \
if (ERR_BACKEND_NO_ERR != errcode) \
{ \
/* XXX Should perform a rollback here */ \
(inst)->do_free = FALSE; \
\
/* Push error back onto the stack */ \
qof_backend_set_error (be, errcode); \
(on_error)((inst), errcode); \
} \
/* XXX the backend commit code should clear dirty!! */ \
(inst)->dirty = FALSE; \
} \
(on_done)(inst); \
\
LEAVE ("inst=%p, dirty=%d do-free=%d", \
(inst), (inst)->dirty, (inst)->do_free); \
if ((inst)->do_free) { \
(on_free)(inst); \
return; \
} \
}
#endif /* QOF_BE_UTILS_H */
/** @} */