--- avrdude-5.5/usbtiny.c 2007-10-29 09:40:04.000000000 -0600 +++ avrdude-5.5.patched/usbtiny.c 2008-01-06 07:13:41.000000000 -0700 @@ -138,7 +138,7 @@ fprintf( stderr, "Operation %d not defined for this chip!\n", op ); return -1; } - memset(cmd, 0, sizeof(cmd)); + memset(cmd, 0, 4); avr_set_bits(p->op[op], cmd); return pgm->cmd(pgm, cmd, res); @@ -286,19 +286,19 @@ int nbytes; // Make sure its empty so we don't read previous calls if it fails - memset(res, '\0', sizeof(res) ); + memset(res, '\0', 4 ); nbytes = usb_in( USBTINY_SPI, (cmd[1] << 8) | cmd[0], // convert to 16-bit words (cmd[3] << 8) | cmd[2], // " - res, sizeof(res), 8 * sck_period ); + res, 4, 8 * sck_period ); if (verbose > 1) { // print out the data we sent and received - printf( "CMD: [%02x %02x %02x %02x] [%02x %02x %02x %02x]\n", + printf( "CMD: [%02x %02x %02x %02x] [%02x %02x %02x %02x] \n", cmd[0], cmd[1], cmd[2], cmd[3], res[0], res[1], res[2], res[3] ); } - return ((nbytes == sizeof(res)) && // should have read 4 bytes + return ((nbytes == 4) && // should have read 4 bytes res[2] == cmd[1]); // AVR's do a delayed-echo thing }