summaryrefslogtreecommitdiff
path: root/ft2232_spi.c
diff options
context:
space:
mode:
authorhailfinger <hailfinger@2b7e53f0-3cfb-0310-b3e9-8179ed1497e1>2010-11-10 03:10:41 +0000
committerhailfinger <hailfinger@2b7e53f0-3cfb-0310-b3e9-8179ed1497e1>2010-11-10 03:10:41 +0000
commit7bf3f5990eae3a692e5956566d9e366186cd1783 (patch)
treec1166ef08ed111353fef468d1e4ee5466bf411ba /ft2232_spi.c
parent04cb7c145c1917b305eabc6029dbfa152fd258c9 (diff)
downloadflashrom-7bf3f5990eae3a692e5956566d9e366186cd1783.tar.gz
Retry short reads in ft2232_spi.
It is possible that ftdi_read_data() returns less data than requested. Catch this case and retry reading the rest of the buffer. Signed-off-by: Alex Badea <vamposdecampos@gmail.com> Acked-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net> git-svn-id: https://code.coreboot.org/svn/flashrom/trunk@1228 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
Diffstat (limited to 'ft2232_spi.c')
-rw-r--r--ft2232_spi.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/ft2232_spi.c b/ft2232_spi.c
index a2ea2a8..7c2d9b5 100644
--- a/ft2232_spi.c
+++ b/ft2232_spi.c
@@ -108,11 +108,16 @@ static int get_buf(struct ftdi_context *ftdic, const unsigned char *buf,
int size)
{
int r;
- r = ftdi_read_data(ftdic, (unsigned char *) buf, size);
- if (r < 0) {
- msg_perr("ftdi_read_data: %d, %s\n", r,
- ftdi_get_error_string(ftdic));
- return 1;
+
+ while (size > 0) {
+ r = ftdi_read_data(ftdic, (unsigned char *) buf, size);
+ if (r < 0) {
+ msg_perr("ftdi_read_data: %d, %s\n", r,
+ ftdi_get_error_string(ftdic));
+ return 1;
+ }
+ buf += r;
+ size -= r;
}
return 0;
}