From e85678d16e4ef7bd61da458465560c4239c60259 Mon Sep 17 00:00:00 2001 From: Johan Hedberg Date: Fri, 4 Jul 2008 10:00:23 +0300 Subject: [PATCH] obexd: Remove incomplete file if PUT is aborted --- obexd/src/obex.c | 21 ++++++++++++++------- obexd/src/obex.h | 1 + 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/obexd/src/obex.c b/obexd/src/obex.c index 6d36dff8c..b3bba3f81 100644 --- a/obexd/src/obex.c +++ b/obexd/src/obex.c @@ -81,8 +81,18 @@ struct obex_commands ftp = { .chkput = ftp_chkput, }; -static void os_reset_session(struct obex_session *os) +static void os_reset_session(struct obex_session *os, gboolean aborted) { + if (os->fd > 0) { + close(os->fd); + os->fd = -1; + if (aborted && os->cmd == OBEX_CMD_PUT && os->current_folder) { + gchar *path; + path = g_build_filename(os->current_folder, os->name, NULL); + unlink(path); + g_free(path); + } + } if (os->name) { g_free(os->name); os->name = NULL; @@ -95,10 +105,6 @@ static void os_reset_session(struct obex_session *os) g_free(os->buf); os->buf = NULL; } - if (os->fd > 0) { - close(os->fd); - os->fd = -1; - } os->offset = 0; os->size = 0; } @@ -700,7 +706,7 @@ static void obex_event(obex_t *obex, obex_object_t *obj, gint mode, emit_transfer_progress(os->cid, os->size, os->offset); break; case OBEX_EV_ABORT: - os_reset_session(os); + os_reset_session(os, TRUE); OBEX_ObjectSetRsp(obj, OBEX_RSP_SUCCESS, OBEX_RSP_SUCCESS); break; case OBEX_EV_REQDONE: @@ -713,13 +719,14 @@ static void obex_event(obex_t *obex, obex_object_t *obj, gint mode, if (os->target == NULL) emit_transfer_completed(os->cid, os->offset == os->size); - os_reset_session(os); + os_reset_session(os, FALSE); break; default: break; } break; case OBEX_EV_REQHINT: + os->cmd = cmd; switch (cmd) { case OBEX_CMD_PUT: os->checked = FALSE; diff --git a/obexd/src/obex.h b/obexd/src/obex.h index 7cb307b48..ceef2359f 100644 --- a/obexd/src/obex.h +++ b/obexd/src/obex.h @@ -49,6 +49,7 @@ struct obex_session { guint32 cid; guint16 tx_mtu; guint16 rx_mtu; + uint8_t cmd; gchar *name; gchar *type; time_t time; -- 2.47.3