Fix alignment when uploading data to flash.
authorPeter Zotov <whitequark@whitequark.org>
Tue, 15 Feb 2011 23:07:25 +0000 (02:07 +0300)
committerPeter Zotov <whitequark@whitequark.org>
Tue, 15 Feb 2011 23:07:25 +0000 (02:07 +0300)
src/gdb-server.c

index e98f78078bfb6e23ca89a85bc4e0cd0f6e40ed64..8e99cc120b2e226cb4b8b58b2a6acd9111c3173c 100644 (file)
@@ -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