Diff between 9b1e7de26c639922e9054a9f6a75485aab20e19c and 910beb706c43ae5e181145823af47eef1fd665dd

Changed Files

File Additions Deletions Status
attrib/gatt.c +12 -17 modified

Full Patch

diff --git a/attrib/gatt.c b/attrib/gatt.c
index 3e6f040..90427a9 100644
--- a/attrib/gatt.c
+++ b/attrib/gatt.c
@@ -730,9 +730,7 @@ static guint execute_write(GAttrib *attrib, uint8_t flags,
 	return g_attrib_send(attrib, 0, buf, plen, func, user_data, NULL);
 }
 
-static guint prepare_write(GAttrib *attrib, uint16_t handle, uint16_t offset,
-			uint8_t *value, size_t vlen, GAttribResultFunc func,
-			gpointer user_data);
+static guint prepare_write(struct write_long_data *long_write);
 
 static void prepare_write_cb(guint8 status, const guint8 *rpdu, guint16 rlen,
 							gpointer user_data)
@@ -756,28 +754,26 @@ static void prepare_write_cb(guint8 status, const guint8 *rpdu, guint16 rlen,
 		return;
 	}
 
-	prepare_write(long_write->attrib, long_write->handle,
-			long_write->offset, long_write->value, long_write->vlen,
-			long_write->func, long_write);
+	prepare_write(long_write);
 }
 
-static guint prepare_write(GAttrib *attrib, uint16_t handle, uint16_t offset,
-			uint8_t *value, size_t vlen, GAttribResultFunc func,
-			gpointer user_data)
+static guint prepare_write(struct write_long_data *long_write)
 {
+	GAttrib *attrib = long_write->attrib;
+	uint16_t handle = long_write->handle;
+	uint16_t offset = long_write->offset;
+	uint8_t *buf, *value = long_write->value + offset;
+	size_t buflen, vlen = long_write->vlen - offset;
 	guint16 plen;
-	size_t buflen;
-	uint8_t *buf;
 
 	buf = g_attrib_get_buffer(attrib, &buflen);
 
-	plen = enc_prep_write_req(handle, offset, &value[offset], vlen - offset,
-								buf, buflen);
+	plen = enc_prep_write_req(handle, offset, value, vlen, buf, buflen);
 	if (plen == 0)
 		return 0;
 
-	return g_attrib_send(attrib, 0, buf, plen, prepare_write_cb,
-							user_data, NULL);
+	return g_attrib_send(attrib, 0, buf, plen, prepare_write_cb, long_write,
+									NULL);
 }
 
 guint gatt_write_char(GAttrib *attrib, uint16_t handle, uint8_t *value,
@@ -814,8 +810,7 @@ guint gatt_write_char(GAttrib *attrib, uint16_t handle, uint8_t *value,
 	long_write->value = g_memdup(value, vlen);
 	long_write->vlen = vlen;
 
-	return prepare_write(attrib, handle, long_write->offset, value, vlen,
-							func, long_write);
+	return prepare_write(long_write);
 }
 
 guint gatt_exchange_mtu(GAttrib *attrib, uint16_t mtu, GAttribResultFunc func,