From 648f3319a92ab0fdd004cb88bbb84dc6c04bf280 Mon Sep 17 00:00:00 2001
From: Stefan Rueger <stefan.rueger@urclocks.com>
Date: Wed, 3 Aug 2022 00:23:15 +0100
Subject: [PATCH] Ignore target memories not present in part

$ avrdude -qp m8 -c ... -U efuse:w:0xff:m && echo OK

avrdude: AVR device initialized and ready to accept instructions
avrdude: skipping -U efuse:... as memory not defined for part ATmega8

avrdude done.  Thank you.

OK
---
 src/main.c   | 2 +-
 src/update.c | 6 +++---
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/main.c b/src/main.c
index f4095d5f..2984203a 100644
--- a/src/main.c
+++ b/src/main.c
@@ -1243,7 +1243,7 @@ int main(int argc, char * argv [])
   for (ln=lfirst(updates); ln; ln=lnext(ln)) {
     upd = ldata(ln);
     rc = do_op(pgm, p, upd, uflags);
-    if (rc) {
+    if (rc && rc != LIBAVRDUDE_SOFTFAIL) {
       exitrc = 1;
       break;
     }
diff --git a/src/update.c b/src/update.c
index ee205bbc..78703e89 100644
--- a/src/update.c
+++ b/src/update.c
@@ -335,9 +335,9 @@ int do_op(PROGRAMMER * pgm, struct avrpart * p, UPDATE * upd, enum updateflags f
 
   mem = avr_locate_mem(p, upd->memtype);
   if (mem == NULL) {
-    avrdude_message(MSG_INFO, "%s memory type not defined for part %s\n",
-      upd->memtype, p->desc);
-    return LIBAVRDUDE_GENERAL_FAILURE;
+    avrdude_message(MSG_INFO, "%s: skipping -U %s:... as memory not defined for part %s\n",
+      progname, upd->memtype, p->desc);
+    return LIBAVRDUDE_SOFTFAIL;
   }
 
   AVRMEM_ALIAS * alias_mem = avr_find_memalias(p, mem);