summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorzwelch <zwelch@b42882b7-edfa-0310-969c-e2dbd0fdcd60>2009-04-29 06:30:44 +0000
committerzwelch <zwelch@b42882b7-edfa-0310-969c-e2dbd0fdcd60>2009-04-29 06:30:44 +0000
commitae719b2706b9a7aa82aff9dad5363f4470a9d674 (patch)
tree9fa82b8d2279668cf096a985b07164807cf7c8b2 /src
parent5ee99a7e80c5a904fa4618f9492313aa3b3eca19 (diff)
downloadopenocd+libswd-ae719b2706b9a7aa82aff9dad5363f4470a9d674.tar.gz
openocd+libswd-ae719b2706b9a7aa82aff9dad5363f4470a9d674.tar.bz2
openocd+libswd-ae719b2706b9a7aa82aff9dad5363f4470a9d674.tar.xz
openocd+libswd-ae719b2706b9a7aa82aff9dad5363f4470a9d674.zip
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
Diffstat (limited to 'src')
-rw-r--r--src/jtag/jlink.c23
1 files changed, 10 insertions, 13 deletions
diff --git a/src/jtag/jlink.c b/src/jtag/jlink.c
index 98e31110..d2e8947c 100644
--- a/src/jtag/jlink.c
+++ b/src/jtag/jlink.c
@@ -31,6 +31,7 @@
#include <usb.h>
#include <string.h>
+#include <errno.h>
#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,