diff options
author | Alex Badea <vamposdecampos@gmail.com> | 2010-11-10 03:10:41 +0000 |
---|---|---|
committer | Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net> | 2010-11-10 03:10:41 +0000 |
commit | 81fd5860a2e497b8fdf015a921cd1f1c9f7bacfc (patch) | |
tree | c1166ef08ed111353fef468d1e4ee5466bf411ba | |
parent | cecb1131cccc5fea60dceb8830b2dccb9a57bb44 (diff) | |
download | flashrom-81fd5860a2e497b8fdf015a921cd1f1c9f7bacfc.zip flashrom-81fd5860a2e497b8fdf015a921cd1f1c9f7bacfc.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.
Corresponding to flashrom svn r1228.
Signed-off-by: Alex Badea <vamposdecampos@gmail.com>
Acked-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net>
-rw-r--r-- | ft2232_spi.c | 15 |
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; } |