diff options
author | zwelch <zwelch@b42882b7-edfa-0310-969c-e2dbd0fdcd60> | 2009-04-29 06:30:44 +0000 |
---|---|---|
committer | zwelch <zwelch@b42882b7-edfa-0310-969c-e2dbd0fdcd60> | 2009-04-29 06:30:44 +0000 |
commit | ae719b2706b9a7aa82aff9dad5363f4470a9d674 (patch) | |
tree | 9fa82b8d2279668cf096a985b07164807cf7c8b2 | |
parent | 5ee99a7e80c5a904fa4618f9492313aa3b3eca19 (diff) | |
download | openocd+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
-rw-r--r-- | src/jtag/jlink.c | 23 |
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, |