/* UI_FILE - a generic STDIO like output stream.
- Copyright (C) 1999-2013 Free Software Foundation, Inc.
+ Copyright (C) 1999-2015 Free Software Foundation, Inc.
This file is part of GDB.
#include "ui-file.h"
#include "tui/tui-file.h"
#include "tui/tui-io.h"
-
+#include "tui/tui-command.h"
#include "tui.h"
-#include <string.h>
-
/* A ``struct ui_file'' that is compatible with all the legacy
code. */
static struct ui_file *
tui_file_new (void)
{
- struct tui_stream *tui = XMALLOC (struct tui_stream);
+ struct tui_stream *tui = XNEW (struct tui_stream);
struct ui_file *file = ui_file_new ();
set_ui_file_data (file, tui, tui_file_delete);
static void
tui_file_delete (struct ui_file *file)
{
- struct tui_stream *tmpstream = ui_file_data (file);
+ struct tui_stream *tmpstream = (struct tui_stream *) ui_file_data (file);
if (tmpstream->ts_magic != &tui_file_magic)
internal_error (__FILE__, __LINE__,
tui_fileopen (FILE *stream)
{
struct ui_file *file = tui_file_new ();
- struct tui_stream *tmpstream = ui_file_data (file);
+ struct tui_stream *tmpstream = (struct tui_stream *) ui_file_data (file);
tmpstream->ts_streamtype = afile;
tmpstream->ts_filestream = stream;
tui_sfileopen (int n)
{
struct ui_file *file = tui_file_new ();
- struct tui_stream *tmpstream = ui_file_data (file);
+ struct tui_stream *tmpstream = (struct tui_stream *) ui_file_data (file);
tmpstream->ts_streamtype = astring;
tmpstream->ts_filestream = NULL;
if (n > 0)
{
- tmpstream->ts_strbuf = xmalloc ((n + 1) * sizeof (char));
+ tmpstream->ts_strbuf = XNEWVEC (char, n + 1);
tmpstream->ts_strbuf[0] = '\0';
}
else
static int
tui_file_isatty (struct ui_file *file)
{
- struct tui_stream *stream = ui_file_data (file);
+ struct tui_stream *stream = (struct tui_stream *) ui_file_data (file);
if (stream->ts_magic != &tui_file_magic)
internal_error (__FILE__, __LINE__,
static void
tui_file_rewind (struct ui_file *file)
{
- struct tui_stream *stream = ui_file_data (file);
+ struct tui_stream *stream = (struct tui_stream *) ui_file_data (file);
if (stream->ts_magic != &tui_file_magic)
internal_error (__FILE__, __LINE__,
ui_file_put_method_ftype *write,
void *dest)
{
- struct tui_stream *stream = ui_file_data (file);
+ struct tui_stream *stream = (struct tui_stream *) ui_file_data (file);
if (stream->ts_magic != &tui_file_magic)
internal_error (__FILE__, __LINE__,
void
tui_file_fputs (const char *linebuffer, struct ui_file *file)
{
- struct tui_stream *stream = ui_file_data (file);
+ struct tui_stream *stream = (struct tui_stream *) ui_file_data (file);
if (stream->ts_streamtype == astring)
{
else
{
tui_puts (linebuffer);
+ /* gdb_stdout is buffered, and the caller must gdb_flush it at
+ appropriate times. Other streams are not so buffered. */
+ if (file != gdb_stdout)
+ tui_refresh_cmd_win ();
}
}
char *
tui_file_get_strbuf (struct ui_file *file)
{
- struct tui_stream *stream = ui_file_data (file);
+ struct tui_stream *stream = (struct tui_stream *) ui_file_data (file);
if (stream->ts_magic != &tui_file_magic)
internal_error (__FILE__, __LINE__,
void
tui_file_adjust_strbuf (int n, struct ui_file *file)
{
- struct tui_stream *stream = ui_file_data (file);
+ struct tui_stream *stream = (struct tui_stream *) ui_file_data (file);
int non_null_chars;
if (stream->ts_magic != &tui_file_magic)
if (n > (stream->ts_buflen - non_null_chars - 1))
{
stream->ts_buflen = n + non_null_chars + 1;
- stream->ts_strbuf = xrealloc (stream->ts_strbuf, stream->ts_buflen);
+ stream->ts_strbuf
+ = XRESIZEVEC (char, stream->ts_strbuf, stream->ts_buflen);
}
}
else
/* No buffer yet, so allocate one of the desired size. */
- stream->ts_strbuf = xmalloc ((n + 1) * sizeof (char));
+ stream->ts_strbuf = XNEWVEC (char, n + 1);
}
static void
tui_file_flush (struct ui_file *file)
{
- struct tui_stream *stream = ui_file_data (file);
+ struct tui_stream *stream = (struct tui_stream *) ui_file_data (file);
if (stream->ts_magic != &tui_file_magic)
internal_error (__FILE__, __LINE__,
case astring:
break;
case afile:
+ /* gdb_stdout is buffered. Other files are always flushed on
+ every write. */
+ if (file == gdb_stdout)
+ tui_refresh_cmd_win ();
fflush (stream->ts_filestream);
break;
}