libftdi Archives

Subject: [WIP PATCH v2 1/2] Change user_data from pointer to a buffer

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

Handle user_data the same way as the main EEPROM buffer. Copy buffer
instead of assigning a pointer in ftdi_set_eeprom_user_data(). This
is required because if used from Python, the input buf is not
available as soon as the ftdi_set_eeprom_user_data() exits.
---
 src/ftdi.c   | 9 +++++++--
 src/ftdi_i.h | 2 +-
 2 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/src/ftdi.c b/src/ftdi.c
index 0a7fb27..eca122c 100644
--- a/src/ftdi.c
+++ b/src/ftdi.c
@@ -3475,7 +3475,7 @@ int ftdi_eeprom_build(struct ftdi_context *ftdi)
     }
 
     /* Arbitrary user data */
-    if (eeprom->user_data && eeprom->user_data_size >= 0)
+    if (eeprom->user_data_size > 0)
     {
         if (eeprom->user_data_addr < free_start)
             fprintf(stderr,"Warning, user data starts inside the generated 
data!\n");
@@ -4440,8 +4440,13 @@ int ftdi_set_eeprom_user_data(struct ftdi_context *ftdi, 
const char * buf, int s
     if (!ftdi || !(ftdi->eeprom) || !buf)
         ftdi_error_return(-1, "No appropriate structure");
 
+    // Only copy up to FTDI_MAX_EEPROM_SIZE bytes
+    if (size > FTDI_MAX_EEPROM_SIZE)
+        size = FTDI_MAX_EEPROM_SIZE;
+
     ftdi->eeprom->user_data_size = size;
-    ftdi->eeprom->user_data = buf;
+    memcpy(ftdi->eeprom->user_data, buf, size);
+
     return 0;
 }
 
diff --git a/src/ftdi_i.h b/src/ftdi_i.h
index 5d04120..accae1c 100644
--- a/src/ftdi_i.h
+++ b/src/ftdi_i.h
@@ -129,7 +129,7 @@ struct ftdi_eeprom
     /** user data **/
     int user_data_addr;
     int user_data_size;
-    const char *user_data;
+    unsigned char user_data[FTDI_MAX_EEPROM_SIZE];
 
     /** eeprom size in bytes. This doesn't get stored in the eeprom
         but is the only way to pass it to ftdi_eeprom_build. */
-- 
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