From 52e4ff7513f35de6647b24d6c7c2849347e5949e Mon Sep 17 00:00:00 2001 From: Stefan Rueger Date: Thu, 25 Apr 2024 19:00:27 +0100 Subject: [PATCH 01/11] Pass LIBAVRDUDE_EXIT return value to pgm->open() call --- src/jtag3.c | 35 +++++++++++++---------------------- 1 file changed, 13 insertions(+), 22 deletions(-) diff --git a/src/jtag3.c b/src/jtag3.c index a5e1807d..c18f518e 100644 --- a/src/jtag3.c +++ b/src/jtag3.c @@ -1790,17 +1790,15 @@ static int jtag3_open(PROGRAMMER *pgm, const char *port) { if (rc < 0) return rc; - if (jtag3_getsync(pgm, PARM3_CONN_JTAG) < 0) - return -1; - - return 0; + return jtag3_getsync(pgm, PARM3_CONN_JTAG) < 0? -1: 0; } static int jtag3_open_dw(PROGRAMMER *pgm, const char *port) { pmsg_notice2("jtag3_open_dw()\n"); - if (jtag3_open_common(pgm, port, PDATA(pgm)->pk4_snap_mode) < 0) - return -1; + int rc = jtag3_open_common(pgm, port, PDATA(pgm)->pk4_snap_mode); + if (rc < 0) + return rc; if (jtag3_getsync(pgm, PARM3_CONN_DW) < 0) return -1; @@ -1810,14 +1808,11 @@ static int jtag3_open_dw(PROGRAMMER *pgm, const char *port) { static int jtag3_open_pdi(PROGRAMMER *pgm, const char *port) { pmsg_notice2("jtag3_open_pdi()\n"); + int rc = jtag3_open_common(pgm, port, PDATA(pgm)->pk4_snap_mode); + if (rc < 0) + return rc; - if (jtag3_open_common(pgm, port, PDATA(pgm)->pk4_snap_mode) < 0) - return -1; - - if (jtag3_getsync(pgm, PARM3_CONN_PDI) < 0) - return -1; - - return 0; + return jtag3_getsync(pgm, PARM3_CONN_PDI) < 0? -1: 0; } static int jtag3_open_updi(PROGRAMMER *pgm, const char *port) { @@ -1829,13 +1824,11 @@ static int jtag3_open_updi(PROGRAMMER *pgm, const char *port) { msg_notice2(" %d", *(int *) ldata(ln)); msg_notice2("\n"); - if (jtag3_open_common(pgm, port, PDATA(pgm)->pk4_snap_mode) < 0) - return -1; + int rc = jtag3_open_common(pgm, port, PDATA(pgm)->pk4_snap_mode); + if (rc < 0) + return rc; - if (jtag3_getsync(pgm, PARM3_CONN_UPDI) < 0) - return -1; - - return 0; + return jtag3_getsync(pgm, PARM3_CONN_UPDI) < 0? -1: 0; } void jtag3_close(PROGRAMMER * pgm) { @@ -3118,9 +3111,7 @@ static int jtag3_chip_erase_tpi(const PROGRAMMER *pgm, const AVRPART *p) { static int jtag3_open_tpi(PROGRAMMER *pgm, const char *port) { pmsg_notice2("jtag3_open_tpi()\n"); - if (jtag3_open_common(pgm, port, PDATA(pgm)->pk4_snap_mode) < 0) - return -1; - return 0; + return jtag3_open_common(pgm, port, PDATA(pgm)->pk4_snap_mode); } void jtag3_close_tpi(PROGRAMMER *pgm) { From 54d770a51778b67a9f874a6a4eeb715cb4c8205b Mon Sep 17 00:00:00 2001 From: Stefan Rueger Date: Thu, 25 Apr 2024 19:11:07 +0100 Subject: [PATCH 02/11] Ensure pgm->open()'s LIBAVRDUDE_EXIT return exits in main.c --- src/main.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main.c b/src/main.c index e6e53734..54fd1f42 100644 --- a/src/main.c +++ b/src/main.c @@ -1390,6 +1390,11 @@ int main(int argc, char * argv []) rc = pgm->open(pgm, port); if (rc < 0) { + if(rc == LIBAVRDUDE_EXIT) { + exitrc = 0; + goto main_exit; + } + pmsg_error("unable to open port %s for programmer %s\n", port, pgmid); skipopen: if (print_ports && pgm->conntype == CONNTYPE_SERIAL) { From a4a783a2e2dc301eb5c7e592abc5794123cdc0d3 Mon Sep 17 00:00:00 2001 From: Stefan Rueger Date: Thu, 25 Apr 2024 19:32:02 +0100 Subject: [PATCH 03/11] Percolate LIBAVRDUDE_EXIT up to avr_signature() --- src/avr.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/avr.c b/src/avr.c index cad129fe..c0296764 100644 --- a/src/avr.c +++ b/src/avr.c @@ -471,7 +471,7 @@ int avr_read_mem(const PROGRAMMER *pgm, const AVRPART *p, const AVRMEM *mem, con if (mem_is_signature(mem)) { if (pgm->read_sig_bytes) { int rc = pgm->read_sig_bytes(pgm, p, mem); - if (rc < 0) + if (rc < 0 && rc != LIBAVRDUDE_EXIT) led_set(pgm, LED_ERR); led_clr(pgm, LED_PGM); return rc; @@ -1236,13 +1236,13 @@ int avr_signature(const PROGRAMMER *pgm, const AVRPART *p) { if(verbose > 1) report_progress(0, 1, "Reading"); rc = avr_read(pgm, p, "signature", 0); - if (rc < LIBAVRDUDE_SUCCESS) { + if (rc < LIBAVRDUDE_SUCCESS && rc != LIBAVRDUDE_EXIT) { pmsg_error("unable to read signature data for part %s, rc=%d\n", p->desc, rc); return rc; } report_progress(1, 1, NULL); - return LIBAVRDUDE_SUCCESS; + return rc < LIBAVRDUDE_SUCCESS? LIBAVRDUDE_EXIT: LIBAVRDUDE_SUCCESS; } From f1d77844158cf39bb683c20bd49b3abbc80a75c6 Mon Sep 17 00:00:00 2001 From: Stefan Rueger Date: Thu, 25 Apr 2024 19:33:24 +0100 Subject: [PATCH 04/11] Ensure avr_signature()'s LIBAVRDUDE_EXIT return exits in main.c --- src/main.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main.c b/src/main.c index 54fd1f42..690403f3 100644 --- a/src/main.c +++ b/src/main.c @@ -1554,6 +1554,10 @@ skipopen: usleep(waittime); if (init_ok) { rc = avr_signature(pgm, p); + if (rc == LIBAVRDUDE_EXIT) { + exitrc = 0; + goto main_exit; + } if (rc != LIBAVRDUDE_SUCCESS) { if (rc == LIBAVRDUDE_SOFTFAIL && (p->prog_modes & PM_UPDI) && attempt < 1) { attempt++; From 7db0b673dd4376292d743c5385c6a4179df34f7b Mon Sep 17 00:00:00 2001 From: Stefan Rueger Date: Thu, 25 Apr 2024 19:40:00 +0100 Subject: [PATCH 05/11] Ensure pgm->initialize()'s LIBAVRDUDE_EXIT return exits in main.c --- src/main.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main.c b/src/main.c index 690403f3..b394c44a 100644 --- a/src/main.c +++ b/src/main.c @@ -1517,6 +1517,10 @@ skipopen: */ init_ok = (rc = pgm->initialize(pgm, p)) >= 0; if (!init_ok) { + if(rc == LIBAVRDUDE_EXIT) { + exitrc = 0; + goto main_exit; + } pmsg_error("initialization failed, rc=%d\n", rc); if (rc == -2) imsg_error("the programmer ISP clock is too fast for the target\n"); From c7bffb401829dff4f730a019e62ac8945fc2071a Mon Sep 17 00:00:00 2001 From: Stefan Rueger Date: Thu, 25 Apr 2024 19:45:33 +0100 Subject: [PATCH 06/11] Ensure pgm->parseextparams()'s LIBAVRDUDE_EXIT return exits in main.c --- src/main.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main.c b/src/main.c index b394c44a..46620a0b 100644 --- a/src/main.c +++ b/src/main.c @@ -1243,7 +1243,10 @@ int main(int argc, char * argv []) pmsg_error("programmer does not support extended parameter -x %s, option ignored\n", extended_param); } } else { - if (pgm->parseextparams(pgm, extended_params) < 0) { + int rc = pgm->parseextparams(pgm, extended_params); + if(rc == LIBAVRDUDE_EXIT) + exit(0); + if(rc < 0) { pmsg_error("unable to parse extended parameter list\n"); exit(1); } From 3bc9a1585392f456bd90dd91bf559ef7aa5eee46 Mon Sep 17 00:00:00 2001 From: Stefan Rueger Date: Thu, 25 Apr 2024 19:55:57 +0100 Subject: [PATCH 07/11] Accept exit(1) call in avrftdi.c --- src/avrftdi.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/avrftdi.c b/src/avrftdi.c index be0affd2..29d6fb6a 100644 --- a/src/avrftdi.c +++ b/src/avrftdi.c @@ -1208,10 +1208,9 @@ static void avrftdi_setup(PROGRAMMER * pgm) { pdata->mpsse_pins[i] = valid_mpsse_pins[i]; pdata->ftdic = ftdi_new(); - if(!pdata->ftdic) - { - pmsg_error("failed to allocate memory in ftdi_new()\n"); - exit(1); + if(!pdata->ftdic) { + pmsg_ext_error("ftdi_new() failed to allocate memory\n"); + exit(1); // pgm->setup() should return an int, but it doesn't } E_VOID(ftdi_init(pdata->ftdic), pdata->ftdic); From e213cab09df31ab4f328a52847783c8eec478bb9 Mon Sep 17 00:00:00 2001 From: Stefan Rueger Date: Thu, 25 Apr 2024 23:14:41 +0100 Subject: [PATCH 08/11] Utilise magic memory tree interface for avrpart.c --- src/avrpart.c | 59 +++++++++++++++++++++++------------------------- src/config.c | 5 ++++ src/libavrdude.h | 3 +-- 3 files changed, 34 insertions(+), 33 deletions(-) diff --git a/src/avrpart.c b/src/avrpart.c index baaebd9d..34b678a2 100644 --- a/src/avrpart.c +++ b/src/avrpart.c @@ -33,22 +33,21 @@ ***/ OPCODE *avr_new_opcode(void) { - return (OPCODE *) cfg_malloc("avr_new_opcode()", sizeof(OPCODE)); + return (OPCODE *) mmt_malloc(sizeof(OPCODE)); } static OPCODE *avr_dup_opcode(const OPCODE *op) { if(op == NULL) // Caller wants NULL if op == NULL return NULL; - OPCODE *m = (OPCODE *) cfg_malloc("avr_dup_opcode()", sizeof(*m)); + OPCODE *m = (OPCODE *) mmt_malloc(sizeof(*m)); memcpy(m, op, sizeof(*m)); return m; } void avr_free_opcode(OPCODE *op) { - if(op) - free(op); + mmt_free(op); } @@ -296,7 +295,7 @@ int avr_get_output_index(const OPCODE *op) { ***/ AVRMEM *avr_new_mem(void) { - AVRMEM *m = (AVRMEM *) cfg_malloc("avr_new_mem()", sizeof(*m)); + AVRMEM *m = (AVRMEM *) mmt_malloc(sizeof(*m)); m->desc = cache_string(""); m->page_size = 1; // Ensure not 0 m->initval = -1; // Unknown value represented as -1 @@ -306,7 +305,7 @@ AVRMEM *avr_new_mem(void) { } AVRMEM_ALIAS *avr_new_memalias(void) { - AVRMEM_ALIAS *m = (AVRMEM_ALIAS *) cfg_malloc("avr_new_memalias()", sizeof*m); + AVRMEM_ALIAS *m = (AVRMEM_ALIAS *) mmt_malloc(sizeof *m); m->desc = cache_string(""); return m; } @@ -322,8 +321,8 @@ int avr_initmem(const AVRPART *p) { for (LNODEID ln=lfirst(p->mem); ln; ln=lnext(ln)) { AVRMEM *m = ldata(ln); - m->buf = (unsigned char *) cfg_malloc("avr_initmem()", m->size); - m->tags = (unsigned char *) cfg_malloc("avr_initmem()", m->size); + m->buf = mmt_malloc(m->size); + m->tags = mmt_malloc(m->size); } return 0; @@ -337,12 +336,12 @@ AVRMEM *avr_dup_mem(const AVRMEM *m) { *n = *m; if(m->buf) { - n->buf = (unsigned char *) cfg_malloc("avr_dup_mem()", n->size); + n->buf = mmt_malloc(n->size); memcpy(n->buf, m->buf, n->size); } if(m->tags) { - n->tags = (unsigned char *) cfg_malloc("avr_dup_mem()", n->size); + n->tags = (unsigned char *) mmt_malloc(n->size); memcpy(n->tags, m->tags, n->size); } @@ -367,11 +366,11 @@ void avr_free_mem(AVRMEM * m) { return; if(m->buf) { - free(m->buf); + mmt_free(m->buf); m->buf = NULL; } if(m->tags) { - free(m->tags); + mmt_free(m->tags); m->tags = NULL; } for(size_t i=0; iop)/sizeof(m->op[0]); i++) { @@ -380,12 +379,11 @@ void avr_free_mem(AVRMEM * m) { m->op[i] = NULL; } } - free(m); + mmt_free(m); } void avr_free_memalias(AVRMEM_ALIAS *m) { - if(m) - free(m); + mmt_free(m); } AVRMEM_ALIAS *avr_locate_memalias(const AVRPART *p, const char *desc) { @@ -602,7 +600,7 @@ const Register_file_t *avr_locate_register(const Register_file_t *rgf, int nr, c const Register_file_t **avr_locate_registerlist(const Register_file_t *rgf, int nr, const char *reg, int (*match)(const char *, const char*)) { - const Register_file_t **ret = cfg_malloc(__func__, sizeof rgf*(nr>0? nr+1: 1)), **r = ret; + const Register_file_t **ret = mmt_malloc(sizeof rgf*(nr>0? nr+1: 1)), **r = ret; int eqmatch = match == str_eq; if(rgf && reg && match) @@ -617,7 +615,7 @@ const Register_file_t **avr_locate_registerlist(const Register_file_t *rgf, int return ret; } if(!eqmatch && str_eq(p, reg)) { // reg same as segment: switch to str_eq() match - free(ret); + mmt_free(ret); return avr_locate_registerlist(rgf, nr, reg, str_eq); } if(!reg_matched++) // Record a matching register only once @@ -668,7 +666,7 @@ const Configitem_t *avr_locate_config(const Configitem_t *cfg, int nc, const cha const Configitem_t **avr_locate_configlist(const Configitem_t *cfg, int nc, const char *name, int (*match)(const char *, const char*)) { - const Configitem_t **ret = cfg_malloc(__func__, sizeof cfg*(nc>0? nc+1: 1)), **r = ret; + const Configitem_t **ret = mmt_malloc(sizeof cfg*(nc>0? nc+1: 1)), **r = ret; if(cfg && name && match) { for(int i = 0; i < nc; i++) @@ -774,7 +772,7 @@ static char *print_num(const char *fmt, int n) { static int num_len(const char *fmt, int n) { char *p = print_num(fmt, n); int ret = strlen(p); - free(p); + mmt_free(p); return ret; } @@ -848,7 +846,7 @@ void avr_mem_display(FILE *f, const AVRPART *p, const char *prefix) { m_char_max[1], m->size, m_char_max[2], m->page_size, m_char_max[3], m_offset); - free(m_offset); + mmt_free(m_offset); } else { fprintf(f, "%s%-*s %*d %*d\n", prefix, @@ -856,7 +854,7 @@ void avr_mem_display(FILE *f, const AVRPART *p, const char *prefix) { m_char_max[1], m->size, m_char_max[2], m->page_size); } - free(m_desc_str); + mmt_free(m_desc_str); } } @@ -922,7 +920,7 @@ int avr_variants_display(FILE *f, const AVRPART *p, const char *prefix) { */ AVRPART *avr_new_part(void) { - AVRPART *p = (AVRPART *) cfg_malloc("avr_new_part()", sizeof(AVRPART)); + AVRPART *p = (AVRPART *) mmt_malloc(sizeof(AVRPART)); const char *nulp = cache_string(""); memset(p, 0, sizeof(*p)); @@ -986,13 +984,12 @@ AVRPART *avr_dup_part(const AVRPART *d) { return p; } -void avr_free_part(AVRPART * d) -{ - ldestroy_cb(d->mem, (void(*)(void *))avr_free_mem); +void avr_free_part(AVRPART * d) { + ldestroy_cb(d->mem, (void(*)(void *)) avr_free_mem); d->mem = NULL; - ldestroy_cb(d->mem_alias, (void(*)(void *))avr_free_memalias); + ldestroy_cb(d->mem_alias, (void(*)(void *)) avr_free_memalias); d->mem_alias = NULL; - ldestroy_cb(d->variants, free); + ldestroy_cb(d->variants, cfg_free); d->variants = NULL; /* do not free d->parent_id and d->config_file */ @@ -1002,7 +999,7 @@ void avr_free_part(AVRPART * d) d->op[i] = NULL; } } - free(d); + mmt_free(d); } AVRPART *locate_part(const LISTID parts, const char *partdesc) { @@ -1159,7 +1156,7 @@ char *cmdbitstr(CMDBIT cb) { else space[1] = 0; - return cfg_strdup("cmdbitstr()", space); + return mmt_strdup(space); } @@ -1201,7 +1198,7 @@ char *opcode2str(const OPCODE *op, int opnum, int detailed) { int compact = 1, printbit; if(!op) - return cfg_strdup("opcode2str()", "NULL"); + return mmt_strdup("NULL"); // Can the opcode be printed in a compact way? Only if i, o and a bits are systematic. for(int i=31; i >= 0; i--) @@ -1245,7 +1242,7 @@ char *opcode2str(const OPCODE *op, int opnum, int detailed) { *sp++ = '"'; *sp = 0; - return cfg_strdup("opcode2str()", space); + return mmt_strdup(space); } diff --git a/src/config.c b/src/config.c index ae7d718b..598f7d52 100644 --- a/src/config.c +++ b/src/config.c @@ -217,6 +217,11 @@ char *cfg_strdup(const char *funcname, const char *s) { } +void cfg_free(void *ptr) { + mmt_free(ptr); +} + + int yywrap() { return 1; diff --git a/src/libavrdude.h b/src/libavrdude.h index e4caadcb..db72a578 100644 --- a/src/libavrdude.h +++ b/src/libavrdude.h @@ -1379,10 +1379,9 @@ extern "C" { #endif void *cfg_malloc(const char *funcname, size_t n); - void *cfg_realloc(const char *funcname, void *p, size_t n); - char *cfg_strdup(const char *funcname, const char *s); +void cfg_free(void *ptr); int init_config(void); From 5b0af7e3791d89b5bf7bf6ba9a7e5e74bf6c77a5 Mon Sep 17 00:00:00 2001 From: Stefan Rueger Date: Thu, 25 Apr 2024 23:25:18 +0100 Subject: [PATCH 09/11] Utilise magic memory tree interface for developer_opts.c --- src/developer_opts.c | 82 +++++++++++++++++++++----------------------- 1 file changed, 39 insertions(+), 43 deletions(-) diff --git a/src/developer_opts.c b/src/developer_opts.c index a0f7a11f..7d077c6c 100644 --- a/src/developer_opts.c +++ b/src/developer_opts.c @@ -107,8 +107,8 @@ static int opcodecmp(const OPCODE *op1, const OPCODE *op2, int opnum) { *p = '0'; cmp = strcmp(opstr1, opstr2); - free(opstr1); - free(opstr2); + mmt_free(opstr1); + mmt_free(opstr2); return cmp; } @@ -210,7 +210,7 @@ static void checkaddr(int memsize, int pagesize, int opnum, const OPCODE *op, co dev_info(".cmderr\t%s\t%s-%s\tbit %d outside addressable space should be x or 0 but is %s\n", p->desc, m->desc, opstr, i+8, cbs? cbs: "NULL"); if(cbs) - free(cbs); + mmt_free(cbs); } } else { if(op->bit[i+8].type != AVR_CMDBIT_ADDRESS) @@ -237,10 +237,10 @@ static char *dev_sprintf(const char *fmt, ...) { va_end(ap); if(size < 0) - return cfg_strdup("dev_sprintf()", ""); + return mmt_strdup(""); size++; // For terminating '\0' - p = cfg_malloc("dev_sprintf()", size); + p = mmt_malloc(size); va_start(ap, fmt); size = vsnprintf(p, size, fmt, ap); @@ -337,8 +337,7 @@ static int dev_part_strct_entry(bool tsv, // Print as spreadsheet? dev_cout(comms, n, 1, 1); // Print comments on rhs } - if(cont) - free(cont); + mmt_free(cont); return 1; } @@ -606,7 +605,7 @@ static void dev_part_strct(const AVRPART *p, bool tsv, const AVRPART *base, bool firstid = 0; char *str = cfg_escape(ldata(ln)); dev_info("%*s%s", tsv? 0: 8, "", str); - free(str); + mmt_free(str); } if(tsv) dev_info("\n"); @@ -625,9 +624,9 @@ static void dev_part_strct(const AVRPART *p, bool tsv, const AVRPART *base, bool } _if_partout_str(strcmp, cfg_escape(p->family_id), family_id); - _if_partout_str(intcmp, cfg_strdup("dev_part_strct()", prog_modes_str(p->prog_modes)), prog_modes); + _if_partout_str(intcmp, mmt_strdup(prog_modes_str(p->prog_modes)), prog_modes); if(p->mcuid == 21) { - _if_partout_str(intcmp, cfg_strdup(__func__, "XVII + IV"), mcuid); + _if_partout_str(intcmp, mmt_strdup("XVII + IV"), mcuid); } else { _if_partout(intcmp, "%d", mcuid); } @@ -645,13 +644,12 @@ static void dev_part_strct(const AVRPART *p, bool tsv, const AVRPART *base, bool _if_partout(intcmp, "0x%04x", usbpid); if(!base || base->reset_disposition != p->reset_disposition) - _partout_str(cfg_strdup("dev_part_strct()", - p->reset_disposition == RESET_DEDICATED? "dedicated": p->reset_disposition == RESET_IO? "io": "unknown"), + _partout_str(mmt_strdup(p->reset_disposition == RESET_DEDICATED? + "dedicated": p->reset_disposition == RESET_IO? "io": "unknown"), reset); - _if_partout_str(intcmp, cfg_strdup("dev_part_strct()", - p->retry_pulse == PIN_AVR_RESET? "reset": p->retry_pulse == PIN_AVR_SCK? "sck": "unknown"), - retry_pulse); + _if_partout_str(intcmp, mmt_strdup(p->retry_pulse == PIN_AVR_RESET? + "reset": p->retry_pulse == PIN_AVR_SCK? "sck": "unknown"), retry_pulse); if(!base || base->flags != p->flags) { if(tsv) { @@ -664,9 +662,8 @@ static void dev_part_strct(const AVRPART *p, bool tsv, const AVRPART *base, bool if(!base || (base->flags & (AVRPART_PARALLELOK | AVRPART_PSEUDOPARALLEL)) != (p->flags & (AVRPART_PARALLELOK | AVRPART_PSEUDOPARALLEL))) { int par = p->flags & (AVRPART_PARALLELOK | AVRPART_PSEUDOPARALLEL); - _partout_str(cfg_strdup("dev_part_strct()", - par == 0? "no": par == AVRPART_PSEUDOPARALLEL? "unknown": AVRPART_PARALLELOK? "yes": "pseudo"), - parallel); + _partout_str(mmt_strdup(par == 0? "no": + par == AVRPART_PSEUDOPARALLEL? "unknown": AVRPART_PARALLELOK? "yes": "pseudo"), parallel); } } } @@ -788,7 +785,7 @@ static void dev_part_strct(const AVRPART *p, bool tsv, const AVRPART *base, bool if(meminj[i].mcu && str_casematch(meminj[i].mcu, p->desc)) if(str_match(meminj[i].mem, m->desc)) { dev_part_strct_entry(tsv, ".ptmm", p->desc, m->desc, - meminj[i].var, cfg_strdup("meminj", meminj[i].value), NULL); + meminj[i].var, mmt_strdup(meminj[i].value), NULL); meminj[i].mcu = NULL; } @@ -824,14 +821,14 @@ static void dev_part_strct(const AVRPART *p, bool tsv, const AVRPART *base, bool if(ptinj[i].mcu) if(str_casematch(ptinj[i].mcu, p->desc)) dev_part_strct_entry(tsv, ".pt", p->desc, NULL, - ptinj[i].var, cfg_strdup("ptinj", ptinj[i].value), NULL); + ptinj[i].var, mmt_strdup(ptinj[i].value), NULL); for(size_t i=0; idesc)) { if(!tsv) dev_info(" memory \"%s\"\n", meminj[i].mem); dev_part_strct_entry(tsv, ".ptmm", p->desc, meminj[i].mem, - meminj[i].var, cfg_strdup("meminj", meminj[i].value), NULL); + meminj[i].var, mmt_strdup(meminj[i].value), NULL); meminj[i].mcu = NULL; if(!tsv) dev_info(" ;\n"); @@ -850,21 +847,21 @@ void dev_output_pgm_part(int dev_opt_c, const char *programmer, int dev_opt_p, c char *p; dev_print_comment(cfg_get_prologue()); - dev_info("avrdude_conf_version = %s;\n\n", p = cfg_escape(avrdude_conf_version)); free(p); - dev_info("default_programmer = %s;\n", p = cfg_escape(default_programmer)); free(p); - dev_info("default_parallel = %s;\n", p = cfg_escape(default_parallel)); free(p); - dev_info("default_serial = %s;\n", p = cfg_escape(default_serial)); free(p); - dev_info("default_spi = %s;\n", p = cfg_escape(default_spi)); free(p); + dev_info("avrdude_conf_version = %s;\n\n", p = cfg_escape(avrdude_conf_version)); mmt_free(p); + dev_info("default_programmer = %s;\n", p = cfg_escape(default_programmer)); mmt_free(p); + dev_info("default_parallel = %s;\n", p = cfg_escape(default_parallel)); mmt_free(p); + dev_info("default_serial = %s;\n", p = cfg_escape(default_serial)); mmt_free(p); + dev_info("default_spi = %s;\n", p = cfg_escape(default_spi)); mmt_free(p); dev_info("default_baudrate = %d;\n", default_baudrate); dev_info("default_bitclock = %7.5f;\n", default_bitclock); - dev_info("default_linuxgpio = %s;\n", p = cfg_escape(default_linuxgpio)); free(p); + dev_info("default_linuxgpio = %s;\n", p = cfg_escape(default_linuxgpio)); mmt_free(p); dev_info("allow_subshells = %s;\n", allow_subshells? "yes": "no"); dev_info("\n#\n# PROGRAMMER DEFINITIONS\n#\n\n"); } if(dev_opt_c) - dev_output_pgm_defs(cfg_strdup("main()", programmer)); + dev_output_pgm_defs(mmt_strdup(programmer)); if(dev_opt_p == 2 && dev_opt_c) dev_info("\n"); @@ -872,7 +869,7 @@ void dev_output_pgm_part(int dev_opt_c, const char *programmer, int dev_opt_p, c dev_info("#\n# PART DEFINITIONS\n#\n"); if(dev_opt_p) - dev_output_part_defs(cfg_strdup("main()", partdesc)); + dev_output_part_defs(mmt_strdup(partdesc)); } @@ -1250,7 +1247,7 @@ static char *dev_usbpid_liststr(const PROGRAMMER *pgm) { sprintf(spc + strlen(spc), "0x%04x", *(unsigned int *) ldata(ln)); } - return cfg_strdup(__func__, *spc? spc: "NULL"); + return mmt_strdup(*spc? spc: "NULL"); } static char *dev_hvupdi_support_liststr(const PROGRAMMER *pgm) { @@ -1267,7 +1264,7 @@ static char *dev_hvupdi_support_liststr(const PROGRAMMER *pgm) { sprintf(spc + strlen(spc), "%d", *(unsigned int *) ldata(ln)); } - return cfg_strdup(__func__, *spc? spc: "NULL"); + return mmt_strdup(*spc? spc: "NULL"); } @@ -1313,7 +1310,7 @@ static void dev_pgm_strct(const PROGRAMMER *pgm, bool tsv, const PROGRAMMER *bas firstid = 0; char *str = cfg_escape(ldata(ln)); dev_info("%s", str); - free(str); + mmt_free(str); } if(tsv) dev_info("\n"); @@ -1325,9 +1322,9 @@ static void dev_pgm_strct(const PROGRAMMER *pgm, bool tsv, const PROGRAMMER *bas _if_pgmout_str(strcmp, cfg_escape(pgm->desc), desc); if(!base || base->initpgm != pgm->initpgm) _pgmout_fmt("type", "\"%s\"", locate_programmer_type_id(pgm->initpgm)); - _if_pgmout_str(intcmp, cfg_strdup("dev_pgm_strct()", prog_modes_str(pgm->prog_modes)), prog_modes); - _if_pgmout_str(boolcmp, cfg_strdup("dev_pgm_strct()", pgm->is_serialadapter? "yes": "no"), is_serialadapter); - _if_pgmout_str(intcmp, cfg_strdup("dev_pgm_strct()", extra_features_str(pgm->extra_features)), extra_features); + _if_pgmout_str(intcmp, mmt_strdup(prog_modes_str(pgm->prog_modes)), prog_modes); + _if_pgmout_str(boolcmp, mmt_strdup(pgm->is_serialadapter? "yes": "no"), is_serialadapter); + _if_pgmout_str(intcmp, mmt_strdup(extra_features_str(pgm->extra_features)), extra_features); if(!base || base->conntype != pgm->conntype) _pgmout_fmt("connection_type", "%s", connstr(pgm->conntype)); _if_pgmout(intcmp, "%d", baudrate); @@ -1340,12 +1337,12 @@ static void dev_pgm_strct(const PROGRAMMER *pgm, bool tsv, const PROGRAMMER *bas if(base) { char *basestr = dev_usbpid_liststr(base); show = !str_eq(basestr, pgmstr); - free(basestr); + mmt_free(basestr); } if(show) dev_part_strct_entry(tsv, ".prog", id, NULL, "usbpid", pgmstr, pgm->comments); else // dev_part_strct_entry() frees pgmstr - free(pgmstr); + mmt_free(pgmstr); _if_pgmout_str(strcmp, cfg_escape(pgm->usbdev), usbdev); _if_pgmout_str(strcmp, cfg_escape(pgm->usbsn), usbsn); @@ -1358,9 +1355,8 @@ static void dev_pgm_strct(const PROGRAMMER *pgm, bool tsv, const PROGRAMMER *bas if(!base || !str_eq(bstr, str)) _pgmout_fmt(avr_pin_lcname(i), "%s", str); - free(str); - if(bstr) - free(bstr); + mmt_free(str); + mmt_free(bstr); } pgmstr = dev_hvupdi_support_liststr(pgm); @@ -1369,12 +1365,12 @@ static void dev_pgm_strct(const PROGRAMMER *pgm, bool tsv, const PROGRAMMER *bas if(base) { char *basestr = dev_hvupdi_support_liststr(base); show = !str_eq(basestr, pgmstr); - free(basestr); + mmt_free(basestr); } if(show) dev_part_strct_entry(tsv, ".prog", id, NULL, "hvupdi_support", pgmstr, pgm->comments); else // dev_part_strct_entry() frees pgmstr - free(pgmstr); + mmt_free(pgmstr); if(injct) for(size_t i=0; iid); ln; ln=lnext(ln)) if(str_casematch(pgminj[i].pgmid, ldata(ln))) dev_part_strct_entry(tsv, ".prog", ldata(ln), NULL, - pgminj[i].var, cfg_strdup("pgminj", pgminj[i].value), NULL); + pgminj[i].var, strdup(pgminj[i].value), NULL); if(!tsv) { dev_cout(pgm->comments, ";", 0, 0); From 1ddd5bf1ffc048081338f61606449f7b9d7a5b39 Mon Sep 17 00:00:00 2001 From: Stefan Rueger Date: Thu, 25 Apr 2024 23:26:45 +0100 Subject: [PATCH 10/11] Remove exit() from developer_opts.c --- src/developer_opts.c | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/developer_opts.c b/src/developer_opts.c index 7d077c6c..35ec3b7d 100644 --- a/src/developer_opts.c +++ b/src/developer_opts.c @@ -93,10 +93,6 @@ static int opcodecmp(const OPCODE *op1, const OPCODE *op2, int opnum) { opstr1 = opcode2str(op1, opnum, 1); opstr2 = opcode2str(op2, opnum, 1); - if(!opstr1 || !opstr2) { - dev_info("%s: out of memory\n", progname); - exit(1); - } // Don't care x and 0 are functionally equivalent for(p=opstr1; *p; p++) From f5d9615a9003f96c965e152fdedc6670b45c6695 Mon Sep 17 00:00:00 2001 From: Stefan Rueger Date: Thu, 25 Apr 2024 23:30:44 +0100 Subject: [PATCH 11/11] Remove exit() from dfu.c --- src/dfu.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/dfu.c b/src/dfu.c index b7866fd5..e2096831 100644 --- a/src/dfu.c +++ b/src/dfu.c @@ -281,8 +281,8 @@ int dfu_getstatus(struct dfu_dev *dfu, struct dfu_status *status) } if (result > (int) sizeof(struct dfu_status)) { - pmsg_error("oversize read (should not happen); exiting\n"); - exit(1); + pmsg_error("oversize read (should not happen)\n"); + return -1; } pmsg_trace("dfu_getstatus(): bStatus 0x%02x, bwPollTimeout %d, bState 0x%02x, iString %d\n", @@ -382,8 +382,8 @@ int dfu_upload(struct dfu_dev *dfu, void *ptr, int size) } if (result > size) { - pmsg_error("oversize read (should not happen); exiting\n"); - exit(1); + pmsg_error("oversize read (should not happen)\n"); + return -1; } return 0;