summaryrefslogtreecommitdiff
path: root/src/server
diff options
context:
space:
mode:
authordrath <drath@b42882b7-edfa-0310-969c-e2dbd0fdcd60>2007-07-25 10:06:57 +0000
committerdrath <drath@b42882b7-edfa-0310-969c-e2dbd0fdcd60>2007-07-25 10:06:57 +0000
commit290e01c62afdfd5f6eb76a4caef266344510f2c0 (patch)
treed1bc200336f595ce782427f6c86724f7135aa16b /src/server
parent1429d2c659ab9b84dee673e7697da7eab44a8f90 (diff)
downloadopenocd_libswd-290e01c62afdfd5f6eb76a4caef266344510f2c0.tar.gz
openocd_libswd-290e01c62afdfd5f6eb76a4caef266344510f2c0.tar.bz2
openocd_libswd-290e01c62afdfd5f6eb76a4caef266344510f2c0.tar.xz
openocd_libswd-290e01c62afdfd5f6eb76a4caef266344510f2c0.zip
- reformat src/jtag/bitq.c (thanks to Pavel Chromy)
- fix multiple reads from FT2232 into same buffer location (thanks to Magnus Lundin) - retry JTAG chain validation (thanks to Magnus Lundin) - reworked GDB packet input handling (thanks to Pavel Chromy) - output error message when setting a watchpoint failed - removed duplicate out-of-bounds check in at91sam7.c (thanks to Pavel Chromy) git-svn-id: svn://svn.berlios.de/openocd/trunk@181 b42882b7-edfa-0310-969c-e2dbd0fdcd60
Diffstat (limited to 'src/server')
-rw-r--r--src/server/gdb_server.c72
1 files changed, 20 insertions, 52 deletions
diff --git a/src/server/gdb_server.c b/src/server/gdb_server.c
index 34b66050..19c6a233 100644
--- a/src/server/gdb_server.c
+++ b/src/server/gdb_server.c
@@ -264,63 +264,31 @@ int gdb_get_packet(connection_t *connection, char *buffer, int *len)
{
if ((retval = gdb_get_char(connection, &character)) != ERROR_OK)
return retval;
-
- if( !first_char ) {
- packet_type = character;
- first_char = 1;
- }
-
- if( packet_type == 'X' )
+
+ if (character == '#') break;
+
+ if (character == '}')
{
- switch (character)
- {
- case '#':
- break;
- case 0x7d:
- /* data transmitted in binary mode (X packet)
- * uses 0x7d as escape character */
- my_checksum += character & 0xff;
- gdb_get_char(connection, &character);
- my_checksum += character & 0xff;
- buffer[count++] = (character ^ 0x20) & 0xff;
- if (count > *len)
- {
- ERROR("packet buffer too small");
- return ERROR_GDB_BUFFER_TOO_SMALL;
- }
- break;
- default:
- buffer[count++] = character & 0xff;
- my_checksum += character & 0xff;
- if (count > *len)
- {
- ERROR("packet buffer too small");
- return ERROR_GDB_BUFFER_TOO_SMALL;
- }
- break;
- }
+ /* data transmitted in binary mode (X packet)
+ * uses 0x7d as escape character */
+ my_checksum += character & 0xff;
+ if ((retval = gdb_get_char(connection, &character)) != ERROR_OK)
+ return retval;
+ my_checksum += character & 0xff;
+ buffer[count++] = (character ^ 0x20) & 0xff;
}
else
{
- switch (character)
- {
- case '#':
- break;
- case 0x3:
- gdb_con->ctrl_c = 1;
- break;
- default:
- buffer[count++] = character & 0xff;
- my_checksum += character & 0xff;
- if (count > *len)
- {
- ERROR("packet buffer too small");
- return ERROR_GDB_BUFFER_TOO_SMALL;
- }
- break;
- }
+ my_checksum += character & 0xff;
+ buffer[count++] = character & 0xff;
+ }
+
+ if (count > *len)
+ {
+ ERROR("packet buffer too small");
+ return ERROR_GDB_BUFFER_TOO_SMALL;
}
- } while (character != '#');
+ } while (1);
*len = count;