Diff between 3031cd97d29ada4ca9de06967733248324095abf and e85678d16e4ef7bd61da458465560c4239c60259

Changed Files

File Additions Deletions Status
obexd/src/obex.c +14 -7 modified
obexd/src/obex.h +1 -0 modified

Full Patch

diff --git a/obexd/src/obex.c b/obexd/src/obex.c
index 6d36dff..b3bba3f 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 7cb307b..ceef235 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;