diff --git a/src/avrftdi.c b/src/avrftdi.c index 232b457b..bfe8173e 100644 --- a/src/avrftdi.c +++ b/src/avrftdi.c @@ -90,7 +90,8 @@ static int write_flush(avrftdi_t *); * the pin names used in FTDI datasheets. */ static char *ftdi_pin_name(avrftdi_t *pdata, struct pindef_t pin) { - static char str[128]; + char *str = pdata->name_str; + size_t strsiz = sizeof pdata->name_str; char interface = '@'; @@ -103,7 +104,7 @@ static char *ftdi_pin_name(avrftdi_t *pdata, struct pindef_t pin) { interface += pdata->ftdic->index; int pinno; - int n = 0; + size_t n = 0; int mask = pin.mask[0]; const char * fmt; @@ -130,7 +131,7 @@ static char *ftdi_pin_name(avrftdi_t *pdata, struct pindef_t pin) { else fmt = ", %c%cBUS%d%n"; - snprintf(&str[n], sizeof(str) - n, fmt, interface, port, pinno, &chars); + snprintf(&str[n], strsiz - n, fmt, interface, port, pinno, &chars); n += chars; } diff --git a/src/avrftdi_private.h b/src/avrftdi_private.h index 4ee45c1d..e8469db3 100644 --- a/src/avrftdi_private.h +++ b/src/avrftdi_private.h @@ -111,6 +111,8 @@ typedef struct avrftdi_s { bool use_bitbanging; /* bits 16-23 of extended 24-bit word flash address for parts with flash > 128k */ uint8_t lext_byte; + + char name_str[128]; // Used in ftdi_pin_name() } avrftdi_t; void avrftdi_log(int level, const char * func, int line, const char * fmt, ...);