X-Git-Url: http://developer.intra2net.com/git/?p=libftdi;a=blobdiff_plain;f=src%2Fftdi.c;h=409e2940bf06853d08866219be6cd8181c4c3321;hp=63e2a36782701e6a2b5c7611ec43733bee86961f;hb=74e8e79d4e311001d0f890cdf0219d84b58bb70a;hpb=a35aa9bdfbb149efe72c32727a0ebfe3585465f8 diff --git a/src/ftdi.c b/src/ftdi.c index 63e2a36..409e294 100644 --- a/src/ftdi.c +++ b/src/ftdi.c @@ -199,6 +199,21 @@ void ftdi_deinit(struct ftdi_context *ftdi) if (ftdi->eeprom != NULL) { + if (ftdi->eeprom->manufacturer != 0) + { + free(ftdi->eeprom->manufacturer); + ftdi->eeprom->manufacturer = 0; + } + if (ftdi->eeprom->product != 0) + { + free(ftdi->eeprom->product); + ftdi->eeprom->product = 0; + } + if (ftdi->eeprom->serial != 0) + { + free(ftdi->eeprom->serial); + ftdi->eeprom->serial = 0; + } free(ftdi->eeprom); ftdi->eeprom = NULL; } @@ -2167,7 +2182,8 @@ int ftdi_set_error_char(struct ftdi_context *ftdi, \param ftdi pointer to ftdi_context */ -void ftdi_eeprom_initdefaults(struct ftdi_context *ftdi) +void ftdi_eeprom_initdefaults(struct ftdi_context *ftdi, char * manufacturer, + char * product, char * serial) { struct ftdi_eeprom *eeprom; @@ -2193,9 +2209,35 @@ void ftdi_eeprom_initdefaults(struct ftdi_context *ftdi) eeprom->usb_version = 0x0200; eeprom->max_power = 50; + if (eeprom->manufacturer) + free (eeprom->manufacturer); eeprom->manufacturer = NULL; + if (manufacturer) + { + eeprom->manufacturer = malloc(strlen(manufacturer)+1); + if (eeprom->manufacturer) + strcpy(eeprom->manufacturer, manufacturer); + } + + if (eeprom->product) + free (eeprom->product); eeprom->product = NULL; + { + eeprom->product = malloc(strlen(product)+1); + if (eeprom->product) + strcpy(eeprom->product, product); + } + + if (eeprom->serial) + free (eeprom->serial); eeprom->serial = NULL; + if (serial) + { + eeprom->serial = malloc(strlen(serial)+1); + if (eeprom->serial) + strcpy(eeprom->serial, serial); + } + if(ftdi->type == TYPE_R) { @@ -2212,34 +2254,6 @@ void ftdi_eeprom_initdefaults(struct ftdi_context *ftdi) } /** - Frees allocated memory in eeprom. - - \param ftdi pointer to ftdi_context -*/ -void ftdi_eeprom_free(struct ftdi_context *ftdi) -{ - if (!ftdi) - return; - if (ftdi->eeprom) - { - struct ftdi_eeprom *eeprom = ftdi->eeprom; - - if (eeprom->manufacturer != 0) { - free(eeprom->manufacturer); - eeprom->manufacturer = 0; - } - if (eeprom->product != 0) { - free(eeprom->product); - eeprom->product = 0; - } - if (eeprom->serial != 0) { - free(eeprom->serial); - eeprom->serial = 0; - } - } -} - -/** Build binary buffer from ftdi_eeprom structure. Output is suitable for ftdi_write_eeprom(). @@ -2698,6 +2712,8 @@ int ftdi_eeprom_decode(struct ftdi_context *ftdi, int verbose) // Addr 0E: Offset of the manufacturer string + 0x80, calculated later // Addr 0F: Length of manufacturer string manufacturer_size = buf[0x0F]/2; + if(eeprom->manufacturer) + free(eeprom->manufacturer); if (manufacturer_size > 0) { eeprom->manufacturer = malloc(manufacturer_size); @@ -2716,6 +2732,8 @@ int ftdi_eeprom_decode(struct ftdi_context *ftdi, int verbose) // Addr 10: Offset of the product string + 0x80, calculated later // Addr 11: Length of product string + if(eeprom->product) + free(eeprom->product); product_size = buf[0x11]/2; if (product_size > 0) { @@ -2735,6 +2753,8 @@ int ftdi_eeprom_decode(struct ftdi_context *ftdi, int verbose) // Addr 12: Offset of the serial string + 0x80, calculated later // Addr 13: Length of serial string + if(eeprom->serial) + free(eeprom->serial); serial_size = buf[0x13]/2; if (serial_size > 0) {