From ae719b2706b9a7aa82aff9dad5363f4470a9d674 Mon Sep 17 00:00:00 2001 From: zwelch Date: Wed, 29 Apr 2009 06:30:44 +0000 Subject: [PATCH] Fix jlink usb_bulk_with_retries to return actual error codes. git-svn-id: svn://svn.berlios.de/openocd/trunk@1564 b42882b7-edfa-0310-969c-e2dbd0fdcd60 --- src/jtag/jlink.c | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/src/jtag/jlink.c b/src/jtag/jlink.c index 98e311107..d2e8947c1 100644 --- a/src/jtag/jlink.c +++ b/src/jtag/jlink.c @@ -31,6 +31,7 @@ #include #include +#include #include "log.h" @@ -867,21 +868,17 @@ static int usb_bulk_with_retries( usb_dev_handle *dev, int ep, char *bytes, int size, int timeout) { - int rc = 0, tries = 3, this_size; + int tries = 3, count = 0; - while (tries && size) { - - this_size = f(dev, ep, bytes, size, timeout); - if (this_size > 0) { - - size -= this_size; - rc += this_size; - bytes += this_size; - - } else - tries --; + while (tries && (count < size)) + { + int result = f(dev, ep, bytes + count, size - count, timeout); + if (result > 0) + count += result; + else if ((-ETIMEDOUT != result) || !--tries) + return result; } - return rc; + return count; } static int wrap_usb_bulk_write(usb_dev_handle *dev, int ep,