From 784c83d23ae0307345004e18abf11d09f5d07d36 Mon Sep 17 00:00:00 2001 From: Stefan Rueger Date: Thu, 1 Jun 2023 21:18:55 +0100 Subject: [PATCH] Prevent terminal write error in r/o region when memory unchanged --- src/avrcache.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/avrcache.c b/src/avrcache.c index da40c7a7..6df68d51 100644 --- a/src/avrcache.c +++ b/src/avrcache.c @@ -625,9 +625,6 @@ int avr_read_byte_cached(const PROGRAMMER *pgm, const AVRPART *p, const AVRMEM * int avr_write_byte_cached(const PROGRAMMER *pgm, const AVRPART *p, const AVRMEM *mem, unsigned long addr, unsigned char data) { - if(pgm->readonly && pgm->readonly(pgm, p, mem, addr)) - return LIBAVRDUDE_SOFTFAIL; - // Use pgm->write_byte() if not EEPROM/flash or no paged access if(!avr_has_paged_access(pgm, mem)) return fallback_write_byte(pgm, p, mem, addr, data); @@ -650,6 +647,12 @@ int avr_write_byte_cached(const PROGRAMMER *pgm, const AVRPART *p, const AVRMEM if(loadCachePage(cp, pgm, p, mem, addr, cacheaddr, 0) < 0) return LIBAVRDUDE_GENERAL_FAILURE; + if(cp->cont[cacheaddr] == data) + return LIBAVRDUDE_SUCCESS; + + if(pgm->readonly && pgm->readonly(pgm, p, mem, addr)) + return LIBAVRDUDE_SOFTFAIL; + cp->cont[cacheaddr] = data; return LIBAVRDUDE_SUCCESS;