From 17e2feff261f35d7cada59f75f3c11840a1c4cdf Mon Sep 17 00:00:00 2001 From: Stefan Rueger Date: Sun, 1 Jan 2023 23:29:06 +0000 Subject: [PATCH] Fix partial matches for locate_mem() and do_cmd() --- src/avrpart.c | 28 ++++++++++++++-------------- src/term.c | 24 +++++++++++------------- 2 files changed, 25 insertions(+), 27 deletions(-) diff --git a/src/avrpart.c b/src/avrpart.c index 4f03efb2..ac4b8ece 100644 --- a/src/avrpart.c +++ b/src/avrpart.c @@ -420,51 +420,51 @@ void avr_free_memalias(AVRMEM_ALIAS *m) { AVRMEM_ALIAS *avr_locate_memalias(const AVRPART *p, const char *desc) { AVRMEM_ALIAS * m, * match; LNODEID ln; - int matches, exact; - int l; + int matches; + size_t l; if(!p || !desc || !p->mem_alias) return NULL; l = strlen(desc); - matches = exact = 0; + matches = 0; match = NULL; for (ln=lfirst(p->mem_alias); ln; ln=lnext(ln)) { m = ldata(ln); - if (strncmp(m->desc, desc, l) == 0) { // Partial initial match + if(l && strncmp(m->desc, desc, l) == 0) { // Partial initial match match = m; matches++; - if(m->desc[l] == 0) // Exact match between arg and memory - exact++; + if(m->desc[l] == 0) // Exact match; return straight away + return m; } } - return exact == 1 || matches == 1? match: NULL; + return matches == 1? match: NULL; } AVRMEM *avr_locate_mem_noalias(const AVRPART *p, const char *desc) { AVRMEM * m, * match; LNODEID ln; - int matches, exact; - int l; + int matches; + size_t l; if(!p || !desc || !p->mem) return NULL; l = strlen(desc); - matches = exact = 0; + matches = 0; match = NULL; for (ln=lfirst(p->mem); ln; ln=lnext(ln)) { m = ldata(ln); - if (strncmp(m->desc, desc, l) == 0) { // Partial initial match + if(l && strncmp(m->desc, desc, l) == 0) { // Partial initial match match = m; matches++; - if(m->desc[l] == 0) // Exact match between arg and memory - exact++; + if(m->desc[l] == 0) // Exact match; return straight away + return m; } } - return exact == 1 || matches == 1? match: NULL; + return matches == 1? match: NULL; } diff --git a/src/term.c b/src/term.c index ad426fd9..63a9464a 100644 --- a/src/term.c +++ b/src/term.c @@ -1235,30 +1235,28 @@ static int tokenize(char *s, char ***argv) { static int do_cmd(PROGRAMMER *pgm, AVRPART *p, int argc, char *argv[]) { int i; - int hold; - int len; + int hold, matches; + size_t len; len = strlen(argv[0]); - hold = -1; + matches = 0; for (i=0; i 1? "ambiguous": "invalid"); return -1; }