aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Jacobowitz <drow@false.org>2009-11-12 21:01:00 +0000
committerDaniel Jacobowitz <drow@false.org>2009-11-12 21:01:00 +0000
commitb86ab4ff1548b4524bb90e3348ae416c586e8380 (patch)
tree4814babcff48f4b552a42c8b4ee62a0ab0280590
parenta69b7d9d9622c4e238978449762097a216f55b8b (diff)
downloadgdb-b86ab4ff1548b4524bb90e3348ae416c586e8380.zip
gdb-b86ab4ff1548b4524bb90e3348ae416c586e8380.tar.gz
gdb-b86ab4ff1548b4524bb90e3348ae416c586e8380.tar.bz2
* remote-fileio.c (remote_fileio_func_read): Limit console
reads to 16K.
-rw-r--r--gdb/ChangeLog5
-rw-r--r--gdb/remote-fileio.c15
2 files changed, 18 insertions, 2 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 424383d..275955c 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,4 +1,9 @@
2009-11-12 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * remote-fileio.c (remote_fileio_func_read): Limit console
+ reads to 16K.
+
+2009-11-12 Daniel Jacobowitz <dan@codesourcery.com>
Paul Brook <paul@codesourcery.com>
* c-typeprint.c (c_type_print_base): Skip artificial fields.
diff --git a/gdb/remote-fileio.c b/gdb/remote-fileio.c
index 1683e99..31ee244 100644
--- a/gdb/remote-fileio.c
+++ b/gdb/remote-fileio.c
@@ -741,7 +741,7 @@ remote_fileio_func_read (char *buf)
static char *remaining_buf = NULL;
static int remaining_length = 0;
- buffer = (gdb_byte *) xmalloc (32768);
+ buffer = (gdb_byte *) xmalloc (16384);
if (remaining_buf)
{
remote_fio_no_longjmp = 1;
@@ -763,7 +763,18 @@ remote_fileio_func_read (char *buf)
}
else
{
- ret = ui_file_read (gdb_stdtargin, (char *) buffer, 32767);
+ /* Windows (at least XP and Server 2003) has difficulty
+ with large reads from consoles. If a handle is
+ backed by a real console device, overly large reads
+ from the handle will fail and set errno == ENOMEM.
+ On a Windows Server 2003 system where I tested,
+ reading 26608 bytes from the console was OK, but
+ anything above 26609 bytes would fail. The limit has
+ been observed to vary on different systems. So, we
+ limit this read to something smaller than that - by a
+ safe margin, in case the limit depends on system
+ resources or version. */
+ ret = ui_file_read (gdb_stdtargin, (char *) buffer, 16383);
remote_fio_no_longjmp = 1;
if (ret > 0 && (size_t)ret > length)
{