commit f657ab584c92a3b15b956f2c3552a3075ee81e38 Author: Oswald Buddenhagen <o...@kde.org> Date: Sun Mar 27 12:34:25 2011 +0200
centralize imap_cmd disposal src/drv_imap.c | 31 ++++++++++++++----------------- 1 files changed, 14 insertions(+), 17 deletions(-) diff --git a/src/drv_imap.c b/src/drv_imap.c index b9c6035..10d5d35 100644 --- a/src/drv_imap.c +++ b/src/drv_imap.c @@ -199,6 +199,16 @@ new_imap_cmd( int size ) cmdp->gen.callback = cb; \ cmdp->gen.callback_aux = aux; +static int +done_imap_cmd( imap_store_t *ctx, struct imap_cmd *cmd, int response ) +{ + int ret = cmd->param.done( ctx, cmd, response ); + free( cmd->param.data ); + free( cmd->cmd ); + free( cmd ); + return ret; +} + static struct imap_cmd * v_submit_imap_cmd( imap_store_t *ctx, struct imap_cmd *cmd, const char *fmt, va_list ap ) @@ -259,10 +269,7 @@ v_submit_imap_cmd( imap_store_t *ctx, struct imap_cmd *cmd, bail: ctx->gen.bad_callback( ctx->gen.bad_callback_aux ); bail2: - cmd->param.done( ctx, cmd, RESP_CANCEL ); - free( cmd->param.data ); - free( cmd->cmd ); - free( cmd ); + done_imap_cmd( ctx, cmd, RESP_CANCEL ); return NULL; } @@ -286,10 +293,7 @@ cancel_submitted_imap_cmds( imap_store_t *ctx ) while ((cmd = ctx->in_progress)) { ctx->in_progress = cmd->next; /* don't update num_in_progress and in_progress_append - store is dead */ - cmd->param.done( ctx, cmd, RESP_CANCEL ); - free( cmd->param.data ); - free( cmd->cmd ); - free( cmd ); + done_imap_cmd( ctx, cmd, RESP_CANCEL ); } } @@ -893,11 +897,8 @@ get_cmd_result( imap_store_t *ctx, struct imap_cmd *tcmd ) resp = resp2; if (resp == RESP_CANCEL) ctx->gen.bad_callback( ctx->gen.bad_callback_aux ); - if (cmdp->param.done( ctx, cmdp, resp ) < 0) + if (done_imap_cmd( ctx, cmdp, resp ) < 0) resp = RESP_CANCEL; - free( cmdp->param.data ); - free( cmdp->cmd ); - free( cmdp ); if (resp == RESP_CANCEL || !tcmd || tcmd == cmdp) return resp; } @@ -913,11 +914,7 @@ get_cmd_result_p2( imap_store_t *ctx, struct imap_cmd *cmd, int response ) struct imap_cmd *ocmd = cmdp->orig_cmd; if (response != RESP_OK) { - int ret = ocmd->param.done( ctx, ocmd, response ); - free( ocmd->param.data ); - free( ocmd->cmd ); - free( ocmd ); - return ret; + return done_imap_cmd( ctx, ocmd, response ); } else { ctx->uidnext = 0; ocmd->param.create = 0; ------------------------------------------------------------------------------ Xperia(TM) PLAY It's a major breakthrough. An authentic gaming smartphone on the nation's most reliable network. And it wants your games. http://p.sf.net/sfu/verizon-sfdev _______________________________________________ isync-devel mailing list isync-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/isync-devel