* remote.c (remote_write_bytes): Chop up large transfers.

This commit is contained in:
Steve Chamberlain 1995-08-15 14:53:24 +00:00
parent 8513c9536d
commit ec10503a73
2 changed files with 40 additions and 26 deletions

View File

@ -1,3 +1,7 @@
Tue Aug 15 07:51:21 1995 steve chamberlain <sac@slash.cygnus.com>
* remote.c (remote_write_bytes): Chop up large transfers.
Mon Aug 14 17:56:36 1995 Stan Shebs <shebs@andros.cygnus.com>
* gcc.patch: Remove, relevant only to long-ago versions of GCC.

View File

@ -135,8 +135,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
running and the debugger should
continue to wait for 'W', 'T', etc.
or... Otext Send text to stdout.
thread alive TXX Find out if the thread XX is alive.
reply OK thread is still alive
ENN thread is dead
@ -1054,19 +1052,29 @@ remote_write_bytes (memaddr, myaddr, len)
char buf[PBUFSIZ];
int i;
char *p;
int done;
/* Chop the transfer down if necessary */
done = 0;
while (done < len)
{
int todo = len - done;
int cando = PBUFSIZ /2 - 32; /* number of bytes that will fit. */
if (todo > cando)
todo = cando;
/* FIXME-32x64: Need a version of print_address_numeric which puts the
result in a buffer like sprintf. */
sprintf (buf, "M%lx,%x:", (unsigned long) memaddr, len);
sprintf (buf, "M%lx,%x:", (unsigned long) memaddr + done, todo);
/* We send target system values byte by byte, in increasing byte addresses,
each byte encoded as two hex characters. */
p = buf + strlen (buf);
for (i = 0; i < len; i++)
for (i = 0; i < todo; i++)
{
*p++ = tohex ((myaddr[i] >> 4) & 0xf);
*p++ = tohex (myaddr[i] & 0xf);
*p++ = tohex ((myaddr[i + done] >> 4) & 0xf);
*p++ = tohex (myaddr[i + done] & 0xf);
}
*p = '\0';
@ -1082,6 +1090,8 @@ remote_write_bytes (memaddr, myaddr, len)
errno = EIO;
return 0;
}
done += todo;
}
return len;
}