Browse Source

Bugfix: jtag: Fix optimized register reading code (it was reading an extra bit before the last, corrupting outside the buffer)

Luke Dashjr 13 years ago
parent
commit
85a96e7524
1 changed files with 3 additions and 2 deletions
  1. 3 2
      jtag.c

+ 3 - 2
jtag.c

@@ -167,9 +167,10 @@ bool _jtag_llrw(struct jtag_port *jp, void *buf, size_t bitlength, bool do_read,
 		rbufsz = jp->a->bufread + 3;
 		rbufsz = jp->a->bufread + 3;
 		if (ft232r_read_all(jp->a->ftdi, rbuf, rbufsz) != rbufsz)
 		if (ft232r_read_all(jp->a->ftdi, rbuf, rbufsz) != rbufsz)
 			return false;
 			return false;
-		for (ssize_t j = rbufsz - 1 - (bitspending * 2); j < rbufsz; j += 2)
+		--rbufsz;
+		for (ssize_t j = rbufsz - (bitspending * 2); j < rbufsz; j += 2)
 			setbit(data, databitoff++, (rbuf[j] & jp->tdo));
 			setbit(data, databitoff++, (rbuf[j] & jp->tdo));
-		setbit(data, databitoff++, (rbuf[rbufsz - 1] & jp->tdo));
+		setbit(data, databitoff++, (rbuf[rbufsz] & jp->tdo));
 		jp->a->bufread = 0;
 		jp->a->bufread = 0;
 		
 		
 		if (stage & 2) {
 		if (stage & 2) {