libftdi Archives

Subject: [PATCH 2/2] Rework user area handling

From: yegorslists@xxxxxxxxxxxxxx
To: libftdi@xxxxxxxxxxxxxxxxxxxxxxx
Cc: thomas.jarosch@xxxxxxxxxxxxx, Yegor Yefremov <yegorslists@xxxxxxxxxxxxxx>
Date: Thu, 3 Aug 2023 11:11:28 +0200
From: Yegor Yefremov <yegorslists@xxxxxxxxxxxxxx>

User area begins after the serial number string. Hence, use free_end
to specify the end of the necessary data like producer, serial number
strings as also PNP bits.
---
 src/ftdi.c | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/src/ftdi.c b/src/ftdi.c
index eca122c..ebe02d6 100644
--- a/src/ftdi.c
+++ b/src/ftdi.c
@@ -3074,7 +3074,6 @@ int ftdi_eeprom_build(struct ftdi_context *ftdi)
     }
     /* Wrap around 0x80 for 128 byte EEPROMS (Internale and 93x46) */
     eeprom_size_mask = eeprom->size -1;
-    free_end = i & eeprom_size_mask;
 
     // Addr 0E: Offset of the manufacturer string + 0x80, calculated later
     // Addr 0F: Length of manufacturer string
@@ -3474,15 +3473,19 @@ int ftdi_eeprom_build(struct ftdi_context *ftdi)
             free_start += 0x14;
     }
 
+    free_end = i & eeprom_size_mask;
+
     /* Arbitrary user data */
     if (eeprom->user_data_size > 0)
     {
+        if (!eeprom->user_data_addr)
+            eeprom->user_data_addr = free_end;
         if (eeprom->user_data_addr < free_start)
             fprintf(stderr,"Warning, user data starts inside the generated 
data!\n");
-        if (eeprom->user_data_addr + eeprom->user_data_size >= free_end)
+        if (eeprom->user_data_addr < free_end)
             fprintf(stderr,"Warning, user data overlaps the strings area!\n");
-        if (eeprom->user_data_addr + eeprom->user_data_size > eeprom->size)
-            ftdi_error_return(-1,"eeprom size exceeded");
+        if (eeprom->user_data_addr + eeprom->user_data_size > eeprom->size - 2)
+            ftdi_error_return(-1, "eeprom size exceeded");
         memcpy(output + eeprom->user_data_addr, eeprom->user_data, 
eeprom->user_data_size);
     }
 
-- 
2.34.1


--
libftdi - see http://www.intra2net.com/en/developer/libftdi for details.
To unsubscribe send a mail to libftdi+unsubscribe@xxxxxxxxxxxxxxxxxxxxxxx   

Current Thread