From 441bffd8edc3026359176c1630be6193ed6d3abe Mon Sep 17 00:00:00 2001 From: Peter Zotov Date: Wed, 16 Feb 2011 02:07:25 +0300 Subject: [PATCH 1/1] Fix alignment when uploading data to flash. --- src/gdb-server.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/gdb-server.c b/src/gdb-server.c index e98f780..8e99cc1 100644 --- a/src/gdb-server.c +++ b/src/gdb-server.c @@ -231,9 +231,10 @@ int serve(struct stlink* sl, int port) { unsigned addr = strtoul(s_addr, NULL, 16); unsigned data_length = status - (data - packet); - // length of decoded data cannot be more than - // encoded, as escapes are removed - uint8_t *decoded = calloc(data_length, 1); + // Length of decoded data cannot be more than + // encoded, as escapes are removed. + // Additional byte is reserved for alignment fix. + uint8_t *decoded = calloc(data_length + 1, 1); unsigned dec_index = 0; for(int i = 0; i < data_length; i++) { if(data[i] == 0x7d) { @@ -244,6 +245,10 @@ int serve(struct stlink* sl, int port) { } } + // Fix alignment + if(dec_index % 2 != 0) + dec_index++; + #ifdef DEBUG printf("binary packet %d -> %d\n", data_length, dec_index); #endif -- 2.30.2