From af5f7ee565a5aa5079bc073d511c2bb4f1f49796 Mon Sep 17 00:00:00 2001 From: Stefan Rueger Date: Fri, 19 Apr 2024 12:35:39 +0100 Subject: [PATCH 1/2] Utilise magic memory tree interface for urclock.c --- src/avrdude.h | 1 + src/urclock.c | 24 ++++++++++++------------ 2 files changed, 13 insertions(+), 12 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/urclock.c b/src/urclock.c index 1787ff80..5d488252 100644 --- a/src/urclock.c +++ b/src/urclock.c @@ -1803,38 +1803,38 @@ static int ur_readEF(const PROGRAMMER *pgm, const AVRPART *p, uint8_t *buf, uint static int parseUrclockID(const PROGRAMMER *pgm) { if(*ur.iddesc) { // User override of ID, eg, -xid=F.-4.2 for penultimate flash word - char *idstr = cfg_strdup(__func__, ur.iddesc), *idlenp; + char *idstr = mmt_strdup(ur.iddesc), *idlenp; const char *errstr; int ad, lg; if(!(strchr("EF", *idstr) && idstr[1] == '.')) { pmsg_warning("-xid=%s string must start with E. or F.\n", ur.iddesc); - free(idstr); + mmt_free(idstr); return -1; } if(!(idlenp = strchr(idstr+2, '.'))) { pmsg_warning("-xid=%s string must look like [E|F]..\n", ur.iddesc); - free(idstr); + mmt_free(idstr); return -1; } *idlenp++ = 0; ad = str_int(idstr+2, STR_INT32, &errstr); if(errstr) { pmsg_warning("address %s of -xid=%s: %s\n", idstr+2, ur.iddesc, errstr); - free(idstr); + mmt_free(idstr); return -1; } lg = str_int(idlenp, STR_INT32, &errstr); if(errstr) { pmsg_warning("length %s of -xid=%s string: %s\n", idlenp, ur.iddesc, errstr); - free(idstr); + mmt_free(idstr); return -1; } if(!lg || lg > 8) { pmsg_warning("length %s of -xid=%s string must be between 1 and 8\n", idlenp, ur.iddesc); - free(idstr); + mmt_free(idstr); return -1; } @@ -1842,7 +1842,7 @@ static int parseUrclockID(const PROGRAMMER *pgm) { ur.idaddr = ad; ur.idlen = lg; - free(idstr); + mmt_free(idstr); } return 0; @@ -2155,14 +2155,14 @@ static int urclock_chip_erase(const PROGRAMMER *pgm, const AVRPART *p) { AVRMEM *flm = avr_locate_flash(p); int vecsz = ur.uP.flashsize <= 8192? 2: 4; if(flm && flm->page_size >= vecsz) { - unsigned char *page = cfg_malloc(__func__, flm->page_size); + unsigned char *page = mmt_malloc(flm->page_size); memset(page, 0xff, flm->page_size); set_reset(pgm, page, vecsz); if(avr_write_page_default(pgm, p, flm, 0, page) < 0) { - free(page); + mmt_free(page); return -1; } - free(page); + mmt_free(page); } } } @@ -2539,7 +2539,7 @@ static int urclock_parseextparms(const PROGRAMMER *pgm, LISTID extparms) { static void urclock_setup(PROGRAMMER *pgm) { // Allocate ur - pgm->cookie = cfg_malloc(__func__, sizeof(Urclock_t)); + pgm->cookie = mmt_malloc(sizeof(Urclock_t)); ur.xvectornum = -1; // Initialise, to ascertain whether user had set to 0 ur.ext_addr_byte = 0xff; // So first memory address will load extended address @@ -2549,7 +2549,7 @@ static void urclock_setup(PROGRAMMER *pgm) { static void urclock_teardown(PROGRAMMER *pgm) { - free(pgm->cookie); + mmt_free(pgm->cookie); pgm->cookie = NULL; } From 9d76a3619c9068912b861b5f59064b1b7d6be88b Mon Sep 17 00:00:00 2001 From: Stefan Rueger Date: Mon, 22 Apr 2024 15:17:47 +0100 Subject: [PATCH 2/2] return LIBAVRDUDE_EXIT instead of exit(0) --- src/libavrdude.h | 1 + src/urclock.c | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) 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/urclock.c b/src/urclock.c index 5d488252..2dfef552 100644 --- a/src/urclock.c +++ b/src/urclock.c @@ -1608,7 +1608,7 @@ vblvecfound: term_out(&" %s"[first], ur.uP.name); if(!first) { term_out("\n"); - exit(0); + return LIBAVRDUDE_EXIT;; } alldone: @@ -2527,7 +2527,7 @@ static int urclock_parseextparms(const PROGRAMMER *pgm, LISTID extparms) { urmax(0, 16-(int) strlen(options[i].name)-(options[i].assign? 6: 0)), "", options[i].help); } if(rc == 0) - exit(0); + return LIBAVRDUDE_EXIT;; } if(parseUrclockID(pgm) < 0)