From d03edbf5ffae792e5e5201e3bb7ba6b0a809080a Mon Sep 17 00:00:00 2001
From: Joerg Wunsch <j@uriah.heep.sax.de>
Date: Wed, 1 Jul 2009 16:08:49 +0000
Subject: [PATCH] bug #26412: avrdude segfaults when called with a programmer
 that does not support it

Do not call pgm->perform_osccal() unless it is != 0.



git-svn-id: svn://svn.savannah.nongnu.org/avrdude/trunk/avrdude@822 81a1dc3b-b13d-400b-aceb-764788c761c2
---
 ChangeLog |  6 ++++++
 NEWS      |  1 +
 main.c    | 11 +++++++++--
 3 files changed, 16 insertions(+), 2 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 7f4525d7..26f96edf 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2009-07-01  Joerg Wunsch <j.gnu@uriah.heep.sax.de>
+
+	bug #26412: avrdude segfaults when called with a programmer that does not
+	support it
+	* main.c: do not call pgm->perform_osccal() unless it is != 0.
+
 2009-06-24  Joerg Wunsch <j.gnu@uriah.heep.sax.de>
 
 	Contributed by Zoltan Laday:
diff --git a/NEWS b/NEWS
index f1531ef2..80db7a38 100644
--- a/NEWS
+++ b/NEWS
@@ -26,6 +26,7 @@ Current:
 
   * Major Xmega fixes for the JTAG ICE mkII (patch #6825)
 
+  * Bugfixes.
 
 Version 5.6:
 
diff --git a/main.c b/main.c
index 0f986bf3..62cb4dae 100644
--- a/main.c
+++ b/main.c
@@ -786,8 +786,15 @@ int main(int argc, char * argv [])
      * perform an RC oscillator calibration
      * as outlined in appnote AVR053
      */
-    fprintf(stderr, "%s: performing RC oscillator calibration\n", progname);
-    exitrc = pgm->perform_osccal(pgm);
+    if (pgm->perform_osccal == 0) {
+      fprintf(stderr,
+              "%s: programmer does not support RC oscillator calibration\n",
+	      progname);
+      exitrc = 1;
+    } else {
+      fprintf(stderr, "%s: performing RC oscillator calibration\n", progname);
+      exitrc = pgm->perform_osccal(pgm);
+    }
     if (exitrc == 0 && quell_progress < 2) {
       fprintf(stderr,
               "%s: calibration value is now stored in EEPROM at address 0\n",