Store product info in a short instead of a char array. The spec says it is two bytes and this will avoid a strict-aliasing warning.
diff --git a/rmi4update/firmware_image.cpp b/rmi4update/firmware_image.cpp
index 77e4a69..8ba6ca7 100644
--- a/rmi4update/firmware_image.cpp
+++ b/rmi4update/firmware_image.cpp
@@ -91,8 +91,7 @@
}
memcpy(m_productID, &m_memBlock[RMI_IMG_PRODUCT_ID_OFFSET], RMI_PRODUCT_ID_LENGTH);
m_productID[RMI_PRODUCT_ID_LENGTH] = 0;
- memcpy(m_productInfo, &m_memBlock[RMI_IMG_PRODUCT_INFO_OFFSET],
- RMI_IMG_PRODUCT_INFO_LENGTH);
+ m_productInfo = extract_short(&m_memBlock[RMI_IMG_PRODUCT_INFO_OFFSET]);
m_firmwareData = &m_memBlock[RMI_IMG_FW_OFFSET];
m_configData = &m_memBlock[RMI_IMG_FW_OFFSET + m_firmwareSize];
@@ -129,10 +128,10 @@
fprintf(stdout, "Config Size:\t\t%ld\n", m_configSize);
fprintf(stdout, "Lockdown Size:\t\t%ld\n", m_lockdownSize);
fprintf(stdout, "Firmware Build ID:\t%ld\n", m_firmwareBuildID);
- fprintf(stdout, "Package ID:\t\t%d\n", *((unsigned short*)&m_packageID));
+ fprintf(stdout, "Package ID:\t\t%d\n", m_packageID);
fprintf(stdout, "Bootloader Version:\t%d\n", m_bootloaderVersion);
fprintf(stdout, "Product ID:\t\t%s\n", m_productID);
- fprintf(stdout, "Product Info:\t\t%d\n", *((unsigned short*)&m_productInfo));
+ fprintf(stdout, "Product Info:\t\t%d\n", m_productInfo);
fprintf(stdout, "\n");
}
diff --git a/rmi4update/firmware_image.h b/rmi4update/firmware_image.h
index e203f70..b1e791d 100644
--- a/rmi4update/firmware_image.h
+++ b/rmi4update/firmware_image.h
@@ -29,8 +29,6 @@
#define RMI_IMG_PACKAGE_ID_OFFSET 0x1A
#define RMI_IMG_FW_BUILD_ID_OFFSET 0x50
-#define RMI_IMG_PRODUCT_INFO_LENGTH 2
-
#define RMI_IMG_PRODUCT_ID_OFFSET 0x10
#define RMI_IMG_PRODUCT_INFO_OFFSET 0x1E
@@ -79,7 +77,7 @@
unsigned char m_bootloaderVersion;
unsigned char m_io;
char m_productID[RMI_PRODUCT_ID_LENGTH + 1];
- char m_productInfo[RMI_IMG_PRODUCT_INFO_LENGTH];
+ unsigned short m_productInfo;
unsigned char * m_firmwareData;
unsigned char * m_configData;