From: Andreas Fritiofson Date: Thu, 23 Aug 2012 21:28:10 +0000 (+0200) Subject: mpsse: check available buffer space even for discarded data scans X-Git-Tag: v0.6.0-rc2~6 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=d9a02fda075c466dd4a37785d886a4b1ee382242;p=openocd mpsse: check available buffer space even for discarded data scans When there's no data to scan in or out, we still use the clock data out command and fill the buffer with zeroes, so make sure the buffer is checked for available space. Change-Id: Ia6005c40c81f7fdb89379f1b5023fe383184d210 Signed-off-by: Andreas Fritiofson Reviewed-on: http://openocd.zylin.com/793 Reviewed-by: Spencer Oliver Tested-by: jenkins Reviewed-by: Freddie Chopin --- diff --git a/src/jtag/drivers/mpsse.c b/src/jtag/drivers/mpsse.c index 063ef2ff..d6cbc840 100644 --- a/src/jtag/drivers/mpsse.c +++ b/src/jtag/drivers/mpsse.c @@ -443,8 +443,8 @@ int mpsse_clock_data(struct mpsse_ctx *ctx, const uint8_t *out, unsigned out_off while (length > 0) { /* Guarantee buffer space enough for a minimum size transfer */ - if (buffer_write_space(ctx) + (length < 8) < (out ? 4 : 3) - || (in && buffer_read_space(ctx) < 1)) + if (buffer_write_space(ctx) + (length < 8) < (out || (!out && !in) ? 4 : 3) + || (in && buffer_read_space(ctx) < 1)) retval = mpsse_flush(ctx); if (length < 8) { @@ -465,8 +465,8 @@ int mpsse_clock_data(struct mpsse_ctx *ctx, const uint8_t *out, unsigned out_off if (this_bytes > 65536) this_bytes = 65536; /* Buffer space limit. We already made sure there's space for the minimum - *transfer. */ - if (out && this_bytes + 3 > buffer_write_space(ctx)) + * transfer. */ + if ((out || (!out && !in)) && this_bytes + 3 > buffer_write_space(ctx)) this_bytes = buffer_write_space(ctx) - 3; if (in && this_bytes > buffer_read_space(ctx)) this_bytes = buffer_read_space(ctx);