From: Daniel Jacobowitz Date: Fri, 13 Nov 2009 22:54:42 +0000 (+0000) Subject: * ui-file.c (stdio_file_read): Call gdb_select before read. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=ad960ed22e5c049c6e700a2f04c0231534e35177;p=binutils-gdb.git * ui-file.c (stdio_file_read): Call gdb_select before read. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index aaa0af46218..f6aa0cf9f1d 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,7 @@ +2009-11-13 Daniel Jacobowitz + + * ui-file.c (stdio_file_read): Call gdb_select before read. + 2009-11-13 Maciej W. Rozycki * mips-tdep.c (mips_insn16_frame_this_id): Mark the outermost diff --git a/gdb/ui-file.c b/gdb/ui-file.c index 527917c414f..b9ddbb5c5a7 100644 --- a/gdb/ui-file.c +++ b/gdb/ui-file.c @@ -23,6 +23,7 @@ #include "defs.h" #include "ui-file.h" #include "gdb_string.h" +#include "gdb_select.h" #include @@ -471,6 +472,19 @@ stdio_file_read (struct ui_file *file, char *buf, long length_buf) if (stdio->magic != &stdio_file_magic) internal_error (__FILE__, __LINE__, _("stdio_file_read: bad magic number")); + + /* For the benefit of Windows, call gdb_select before reading from + the file. Wait until at least one byte of data is available. + Control-C can interrupt gdb_select, but not read. */ + { + int fd = fileno (stdio->file); + fd_set readfds; + FD_ZERO (&readfds); + FD_SET (fd, &readfds); + if (gdb_select (fd + 1, &readfds, NULL, NULL, NULL) == -1) + return -1; + } + return read (fileno (stdio->file), buf, length_buf); }