* defs.h (make_cleanup_restore_uinteger, make_cleanup_restore_ui_file)
	(make_cleanup_restore_page_info)
	(set_batch_flag_and_make_cleanup_restore_page_info): New declarations.
	* gdbcmd.h (execute_command_to_string): New declaration.
	* python/python.c (struct restore_ui_file_closure, restore_ui_file)
	(make_cleanup_restore_ui_file): Move to utils.c
	(execute_gdb_command) <to_string>: Move ...
	* top.c (execute_command_to_string): ... here.  Call
	set_batch_flag_and_make_cleanup_restore_page_info.
	* utils.c (make_cleanup_restore_integer): New source file blank line.
	(make_cleanup_restore_uinteger): New.
	(struct restore_ui_file_closure, do_restore_ui_file)
	(make_cleanup_restore_ui_file): Move here from python/python.c.
	(init_page_info) <batch_flag>
	(do_restore_page_info_cleanup, make_cleanup_restore_page_info)
	(set_batch_flag_and_make_cleanup_restore_page_info): New.

gdb/testsuite/
	* gdb.python/python.exp (show height, set height 10)
	(verify pagination beforehand, verify pagination beforehand: q)
	(gdb.execute does not page, verify pagination afterwards)
	(verify pagination afterwards: q): New.

gdb/doc/
	* gdb.texinfo (Mode Options) <-batch>
	(Basic Python) <gdb.execute>: Describe setting width and height.
This commit is contained in:
Jan Kratochvil 2010-08-07 15:00:39 +00:00
parent 8574ee7158
commit 5da1313be2
10 changed files with 190 additions and 48 deletions

View file

@ -309,33 +309,6 @@ gdbpy_target_wide_charset (PyObject *self, PyObject *args)
return PyUnicode_Decode (cset, strlen (cset), host_charset (), NULL);
}
struct restore_ui_file_closure
{
struct ui_file **variable;
struct ui_file *value;
};
static void
restore_ui_file (void *p)
{
struct restore_ui_file_closure *closure = p;
*(closure->variable) = closure->value;
}
/* Remember the current value of *VARIABLE and make it restored when
the cleanup is run. */
struct cleanup *
make_cleanup_restore_ui_file (struct ui_file **variable)
{
struct restore_ui_file_closure *c = XNEW (struct restore_ui_file_closure);
c->variable = variable;
c->value = *variable;
return make_cleanup_dtor (restore_ui_file, (void *) c, xfree);
}
/* A Python function which evaluates a string using the gdb CLI. */
static PyObject *
@ -376,26 +349,14 @@ execute_gdb_command (PyObject *self, PyObject *args, PyObject *kw)
/* Copy the argument text in case the command modifies it. */
char *copy = xstrdup (arg);
struct cleanup *cleanup = make_cleanup (xfree, copy);
struct ui_file *str_file = NULL;
if (to_string)
{
str_file = mem_fileopen ();
make_cleanup_restore_ui_file (&gdb_stdout);
make_cleanup_restore_ui_file (&gdb_stderr);
make_cleanup_ui_file_delete (str_file);
gdb_stdout = str_file;
gdb_stderr = str_file;
}
execute_command (copy, from_tty);
if (str_file)
result = ui_file_xstrdup (str_file, NULL);
result = execute_command_to_string (copy, from_tty);
else
result = NULL;
{
result = NULL;
execute_command (copy, from_tty);
}
do_cleanups (cleanup);
}