From 1e417efde1ca8bfa462d31742ab8e4f28d9f7b76 Mon Sep 17 00:00:00 2001 From: Stefan Rueger Date: Fri, 19 Apr 2024 19:39:24 +0100 Subject: [PATCH 1/4] Utilise magic memory tree interface for wiring.c --- src/avrdude.h | 1 + src/wiring.c | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/avrdude.h b/src/avrdude.h index c679a654..6b777d30 100644 --- a/src/avrdude.h +++ b/src/avrdude.h @@ -44,6 +44,7 @@ extern const char *pgmid; // Programmer -c string #define mmt_strdup(s) cfg_strdup(__func__, s) #define mmt_malloc(n) cfg_malloc(__func__, n) #define mmt_realloc(p, n) cfg_realloc(__func__, p, n) +#define mmt_free(p) free(p) int avrdude_message2(FILE *fp, int lno, const char *file, const char *func, int msgmode, int msglvl, const char *format, ...); diff --git a/src/wiring.c b/src/wiring.c index 6c62354d..a24e6bc2 100644 --- a/src/wiring.c +++ b/src/wiring.c @@ -69,11 +69,11 @@ static void wiring_setup(PROGRAMMER *pgm) { stk500v2_setup(pgm); // Then prepare our data and store in a safe place for the time being - ((struct pdata *)(pgm->cookie))->chained_pdata = cfg_malloc(__func__, sizeof(struct wiringpdata)); + ((struct pdata *)(pgm->cookie))->chained_pdata = mmt_malloc(sizeof(struct wiringpdata)); } static void wiring_teardown(PROGRAMMER *pgm) { - free(((struct pdata *)(pgm->cookie))->chained_pdata); + mmt_free(((struct pdata *)(pgm->cookie))->chained_pdata); stk500v2_teardown(pgm); } From 0bf59aa87ba30e3d7cb6cc6d0b20468548b6ac2f Mon Sep 17 00:00:00 2001 From: Stefan Rueger Date: Fri, 19 Apr 2024 19:43:15 +0100 Subject: [PATCH 2/4] Update programmer description --- src/wiring.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/wiring.c b/src/wiring.c index a24e6bc2..caac6bbe 100644 --- a/src/wiring.c +++ b/src/wiring.c @@ -174,7 +174,7 @@ static void wiring_close(PROGRAMMER * pgm) pgm->fd.ifd = -1; } -const char wiring_desc[] = "http://wiring.org.co/, Basically STK500v2 protocol, with some glue to trigger the bootloader."; +const char wiring_desc[] = "Bootloader using STK500v2 protocol, see http://wiring.org.co"; void wiring_initpgm(PROGRAMMER *pgm) { /* The Wiring bootloader uses a near-complete STK500v2 protocol. */ From 18837e7984ec03ea6e849f528370db4162addbfb Mon Sep 17 00:00:00 2001 From: Stefan Rueger Date: Mon, 22 Apr 2024 15:17:47 +0100 Subject: [PATCH 3/4] return LIBAVRDUDE_EXIT instead of exit(0) --- src/libavrdude.h | 1 + src/wiring.c | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/libavrdude.h b/src/libavrdude.h index 453b22a0..60cf4ebf 100644 --- a/src/libavrdude.h +++ b/src/libavrdude.h @@ -59,6 +59,7 @@ typedef uint32_t pinmask_t; #define LIBAVRDUDE_NOTSUPPORTED (-2) // operation not supported #define LIBAVRDUDE_SOFTFAIL (-3) // returned, eg, by avr_signature() if caller // might proceed with chip erase +#define LIBAVRDUDE_EXIT (-4) // End all operations in this session /* formerly lists.h */ diff --git a/src/wiring.c b/src/wiring.c index caac6bbe..798db2a3 100644 --- a/src/wiring.c +++ b/src/wiring.c @@ -109,7 +109,7 @@ static int wiring_parseextparms(const PROGRAMMER *pgm, const LISTID extparms) { msg_error(" -xsnooze= Wait snooze [ms] before protocol sync after port open\n"); msg_error(" -xdelay= Add delay [ms] after reset, can be negative\n"); msg_error(" -xhelp Show this help menu and exit\n"); - exit(0); + return LIBAVRDUDE_EXIT;; } pmsg_error("invalid extended parameter '%s'\n", extended_param); From 9aeeefdfc68290412d999c4cc321fa77e9883305 Mon Sep 17 00:00:00 2001 From: Stefan Rueger Date: Mon, 22 Apr 2024 15:47:55 +0100 Subject: [PATCH 4/4] Render double teardown() harmless in wiring --- src/wiring.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/wiring.c b/src/wiring.c index 798db2a3..60b8f705 100644 --- a/src/wiring.c +++ b/src/wiring.c @@ -73,8 +73,10 @@ static void wiring_setup(PROGRAMMER *pgm) { } static void wiring_teardown(PROGRAMMER *pgm) { - mmt_free(((struct pdata *)(pgm->cookie))->chained_pdata); + if(pgm->cookie) + mmt_free(((struct pdata *)(pgm->cookie))->chained_pdata); stk500v2_teardown(pgm); + pgm->cookie = NULL; } static int wiring_parseextparms(const PROGRAMMER *pgm, const LISTID extparms) {