From 8f6183e9fd179d8a089ed5731d4c949e5f4e59c1 Mon Sep 17 00:00:00 2001
From: Alexander Neumann <alexander@bumpern.de>
Date: Sun, 19 Sep 2010 02:34:31 +0200
Subject: [PATCH 2/2] prefix matching for usb serial numbers (for usbasp)

---
 avrdude.1 |    4 +++-
 usbasp.c  |    4 ++--
 2 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/avrdude.1 b/avrdude.1
index 0e13623..2916767 100644
--- a/avrdude.1
+++ b/avrdude.1
@@ -510,7 +510,9 @@ For programmers using the "USBasp" protocol, the port can be specified as
 If
 .Ar serialno
 is specified, only devices with matching usb serial number strings (case
-insensitive) will be considered.
+insensitive) will be considered.  It is sufficient if the device's usb serial
+number is a prefix of
+.Ar serialno .
 .Pp
 For the USB programmer "AVR-Doper" running in HID mode, the port must
 be specified as
diff --git a/usbasp.c b/usbasp.c
index 343158f..14beffe 100644
--- a/usbasp.c
+++ b/usbasp.c
@@ -276,7 +276,7 @@ static int usbOpenDevice(libusb_device_handle **device, int vendor,
 		        fprintf(stderr,
 				"%s: seen serial number ->%s<-\n",
 				progname, string);
-                    if(strcasecmp(string, serialNumber) != 0){
+                    if(strncasecmp(string, serialNumber, strlen(serialNumber)) != 0){
                         /* serial number does not match, close handle and continue */
                         usb_close(handle);
                         handle = NULL;
@@ -392,7 +392,7 @@ static int           didUsbInit = 0;
 		        fprintf(stderr,
 				"%s: seen serial number ->%s<-\n",
 				progname, string);
-                    if(strcasecmp(string, serialNumber) != 0){
+                    if(strncasecmp(string, serialNumber, strlen(serialNumber)) != 0){
                         /* serial number does not match, close handle and continue */
                         usb_close(handle);
                         handle = NULL;
-- 
1.7.1

