From 4c60d60f8630b7b6f499dc7bd7756e886bc4375e Mon Sep 17 00:00:00 2001
From: joerg_wunsch <joerg_wunsch@81a1dc3b-b13d-400b-aceb-764788c761c2>
Date: Mon, 25 Jul 2005 19:52:20 +0000
Subject: [PATCH] On one of my systems (a not-too-current FreeBSD 5.x), libusb
 appears to have problems sending a control message (returns an "I/O error").
 At least try to recover gracefully in the bening case where the user did not
 request a particular serial number, so we could continue anyway without
 knowing it.

git-svn-id: svn://svn.savannah.nongnu.org/avrdude/trunk/avrdude@481 81a1dc3b-b13d-400b-aceb-764788c761c2
---
 ChangeLog    |  4 ++++
 usb_libusb.c | 12 +++++++++++-
 2 files changed, 15 insertions(+), 1 deletion(-)

diff --git a/ChangeLog b/ChangeLog
index 3250d64f..33215fbc 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2005-07-25  Joerg Wunsch <j@uriah.heep.sax.de>
+
+	* usb_libusb.c: Catch benign errors when reading the serial #.
+
 2005-06-19  Joerg Wunsch <j@uriah.heep.sax.de>
 
 	* Makefile.am: Implement libusb-base USB transport for the
diff --git a/usb_libusb.c b/usb_libusb.c
index d7b98455..d53d04b9 100644
--- a/usb_libusb.c
+++ b/usb_libusb.c
@@ -117,7 +117,17 @@ static int usbdev_open(char * port, long baud)
 		      fprintf(stderr,
 			      "%s: usb_open(): cannot read serial number \"%s\"\n",
 			      progname, usb_strerror());
-		      exit(1);
+		      /*
+		       * On some systems, libusb appears to have
+		       * problems sending control messages.  Catch the
+		       * benign case where the user did not request a
+		       * particular serial number, so we could
+		       * continue anyway.
+		       */
+		      if (serno != NULL)
+			exit(1); /* no chance */
+		      else
+			strcpy(string, "[unknown]");
 		    }
 
 		  if (verbose)