dfu: Correctly identify DFU firmware that starts at offset zero

Use 0xffffffff as the 'never set' base address.
This commit is contained in:
Richard Hughes 2019-04-29 12:25:59 +01:00 committed by Mario Limonciello
parent 2cebf6c555
commit 3c7f58170d

View File

@ -96,7 +96,7 @@ dfu_firmware_from_ihex (DfuFirmware *firmware,
gsize sz = 0; gsize sz = 0;
guint32 abs_addr = 0x0; guint32 abs_addr = 0x0;
guint32 addr_last = 0x0; guint32 addr_last = 0x0;
guint32 base_addr = 0x0; guint32 base_addr = G_MAXUINT32;
guint32 seg_addr = 0x0; guint32 seg_addr = 0x0;
g_auto(GStrv) lines = NULL; g_auto(GStrv) lines = NULL;
g_autoptr(DfuElement) element = NULL; g_autoptr(DfuElement) element = NULL;
@ -196,7 +196,7 @@ dfu_firmware_from_ihex (DfuFirmware *firmware,
switch (record_type) { switch (record_type) {
case DFU_INHX32_RECORD_TYPE_DATA: case DFU_INHX32_RECORD_TYPE_DATA:
/* base address for element */ /* base address for element */
if (base_addr == 0x0) if (base_addr == G_MAXUINT32)
base_addr = addr; base_addr = addr;
/* does not make sense */ /* does not make sense */
@ -299,6 +299,7 @@ dfu_firmware_from_ihex (DfuFirmware *firmware,
/* add single image */ /* add single image */
contents = g_bytes_new (buf->str, buf->len); contents = g_bytes_new (buf->str, buf->len);
dfu_element_set_contents (element, contents); dfu_element_set_contents (element, contents);
if (base_addr != G_MAXUINT32)
dfu_element_set_address (element, base_addr); dfu_element_set_address (element, base_addr);
dfu_image_add_element (image, element); dfu_image_add_element (image, element);
dfu_firmware_add_image (firmware, image); dfu_firmware_add_image (firmware, image);