From cf4285f5b8bc7ac2730e47441bc471e146222c22 Mon Sep 17 00:00:00 2001 From: Stefan Rueger Date: Fri, 3 Nov 2023 17:21:52 +0000 Subject: [PATCH 1/2] Test programmers for prog_modes and type This corrects the error message when AVRDUDE cannot use a programmer to say it is owing to lack of prog_modes or type. --- src/main.c | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/main.c b/src/main.c index 2d0b3fa6..5c4cc5bb 100644 --- a/src/main.c +++ b/src/main.c @@ -442,11 +442,15 @@ static int dev_opt(const char *str) { } -static void programmer_not_found(const char *programmer) { +static void programmer_not_found(const char *programmer, PROGRAMMER *pgm) { msg_error("\n"); - if(programmer && *programmer) - pmsg_error("cannot find programmer id %s\n", programmer); - else { + if(programmer && *programmer) { + if(!pgm || !pgm->id || !lsize(pgm->id)) + pmsg_error("cannot find programmer id %s\n", programmer); + else + pmsg_error("programmer %s lacks %s setting\n", programmer, + !pgm->prog_modes? "prog_modes": !pgm->initpgm? "type": "some"); + } else { pmsg_error("no programmer has been specified on the command line or in the\n"); imsg_error("config file(s); specify one using the -c option and try again\n"); } @@ -1057,7 +1061,7 @@ int main(int argc, char * argv []) if(pgmid && *pgmid && explicit_c) { PROGRAMMER *pgm = locate_programmer_set(programmers, pgmid, &pgmid); if(!pgm || !is_programmer(pgm)) { - programmer_not_found(pgmid); + programmer_not_found(pgmid, pgm); exit(1); } msg_error("\nValid parts for programmer %s are:\n", pgmid); @@ -1100,13 +1104,13 @@ int main(int argc, char * argv []) msg_notice("\n"); if(!pgmid || !*pgmid) { - programmer_not_found(NULL); + programmer_not_found(NULL, NULL); exit(1); } pgm = locate_programmer_set(programmers, pgmid, &pgmid); if (pgm == NULL || !is_programmer(pgm)) { - programmer_not_found(pgmid); + programmer_not_found(pgmid, pgm); exit(1); } From 84e7ff134d35725353b78a8420dc41212b270951 Mon Sep 17 00:00:00 2001 From: Stefan Rueger Date: Sat, 4 Nov 2023 15:08:47 +0000 Subject: [PATCH 2/2] Suppress multiple-modes warnings for dryrun type programmers --- src/main.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main.c b/src/main.c index 5c4cc5bb..f1b45fb1 100644 --- a/src/main.c +++ b/src/main.c @@ -1032,6 +1032,7 @@ int main(int argc, char * argv []) exit(0); } + PROGRAMMER *dry = locate_programmer(programmers, "dryrun"); for(LNODEID ln1 = lfirst(part_list); ln1; ln1 = lnext(ln1)) { AVRPART *p = ldata(ln1); for(LNODEID ln2 = lfirst(programmers); ln2; ln2 = lnext(ln2)) { @@ -1040,7 +1041,7 @@ int main(int argc, char * argv []) continue; const char *pnam = pgm->id? ldata(lfirst(pgm->id)): "???"; int pm = pgm->prog_modes & p->prog_modes; - if((pm & (pm-1)) && !str_eq(pnam, "dryrun")) + if((pm & (pm-1)) && !str_eq(pnam, "dryrun") && !(dry && pgm->initpgm == dry->initpgm)) pmsg_warning("%s and %s share multiple modes (%s)\n", pnam, p->desc, avr_prog_modes(pm)); } }