void
err_set_exit(void (*ef)(int))
{
- _e_err_exit.type = ERR_EXIT_FUNC;
+#ifdef __BLOCKS__
+ if (_e_err_exit.type == ERR_EXIT_BLOCK) {
+ Block_release(_e_err_exit.block);
+ _e_err_exit.block = NULL;
+ }
+#endif /* __BLOCKS__ */
+ _e_err_exit.type = ef ? ERR_EXIT_FUNC : ERR_EXIT_UNDEF;
_e_err_exit.func = ef;
}
void
err_set_exit_b(void (^ef)(int))
{
- _e_err_exit.type = ERR_EXIT_BLOCK;
+ if (_e_err_exit.type == ERR_EXIT_BLOCK) {
+ Block_release(_e_err_exit.block);
+ }
+ _e_err_exit.type = ef ? ERR_EXIT_BLOCK : ERR_EXIT_UNDEF;
_e_err_exit.block = Block_copy(ef);
}
#endif /* __BLOCKS__ */