gdb/
* cli-logging.c: Include gdb_assert.h. (set_logging_overwrite): New function. (logging_redirect): New comment. (logging_no_redirect_file, set_logging_redirect) (pop_output_files) <logging_no_redirect_file>: New. (handle_redirections) <!logging_redirect>: New variable no_redirect_file. Remove file autoclose for tee_file_new. No longer discard cleanup for the close of former OUTPUT. Set LOGGING_NO_REDIRECT_FILE. (handle_redirections) <logging_redirect>: gdb_assert LOGGING_NO_REDIRECT_FILE. (show_logging_command) <logging_redirect handling>: Adjust messages for SAVED_FILENAME not NULL. (_initialize_cli_logging): Install set_logging_overwrite and set_logging_redirect.
This commit is contained in:
parent
3f3540e14f
commit
58b61394cf
2 changed files with 121 additions and 11 deletions
|
@ -1,3 +1,21 @@
|
|||
2010-09-02 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
* cli-logging.c: Include gdb_assert.h.
|
||||
(set_logging_overwrite): New function.
|
||||
(logging_redirect): New comment.
|
||||
(logging_no_redirect_file, set_logging_redirect)
|
||||
(pop_output_files) <logging_no_redirect_file>: New.
|
||||
(handle_redirections) <!logging_redirect>: New variable
|
||||
no_redirect_file. Remove file autoclose for tee_file_new. No longer
|
||||
discard cleanup for the close of former OUTPUT. Set
|
||||
LOGGING_NO_REDIRECT_FILE.
|
||||
(handle_redirections) <logging_redirect>: gdb_assert
|
||||
LOGGING_NO_REDIRECT_FILE.
|
||||
(show_logging_command) <logging_redirect handling>: Adjust messages
|
||||
for SAVED_FILENAME not NULL.
|
||||
(_initialize_cli_logging): Install set_logging_overwrite and
|
||||
set_logging_redirect.
|
||||
|
||||
2010-09-02 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
* iq2000-tdep.c (iq2000_scan_prologue): Initialize SAL.END.
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
#include "defs.h"
|
||||
#include "gdbcmd.h"
|
||||
#include "ui-out.h"
|
||||
#include "gdb_assert.h"
|
||||
|
||||
#include "gdb_string.h"
|
||||
|
||||
|
@ -46,6 +47,15 @@ show_logging_filename (struct ui_file *file, int from_tty,
|
|||
}
|
||||
|
||||
static int logging_overwrite;
|
||||
|
||||
static void
|
||||
set_logging_overwrite (char *args, int from_tty, struct cmd_list_element *c)
|
||||
{
|
||||
if (saved_filename)
|
||||
warning (_("Currently logging to %s. Turn the logging off and on to "
|
||||
"make the new setting effective."), saved_filename);
|
||||
}
|
||||
|
||||
static void
|
||||
show_logging_overwrite (struct ui_file *file, int from_tty,
|
||||
struct cmd_list_element *c, const char *value)
|
||||
|
@ -55,7 +65,67 @@ Whether logging overwrites or appends to the log file is %s.\n"),
|
|||
value);
|
||||
}
|
||||
|
||||
/* Value as configured by the user. */
|
||||
static int logging_redirect;
|
||||
|
||||
/* The on-disk file in use if logging is currently active together with
|
||||
redirection turned off (and therefore using tee_file_new). For active
|
||||
logging with redirection the on-disk file is directly in GDB_STDOUT and
|
||||
this variable is NULL. */
|
||||
static struct ui_file *logging_no_redirect_file;
|
||||
|
||||
static void
|
||||
set_logging_redirect (char *args, int from_tty, struct cmd_list_element *c)
|
||||
{
|
||||
struct cleanup *cleanups = NULL;
|
||||
struct ui_file *output, *new_logging_no_redirect_file;
|
||||
|
||||
if (saved_filename == NULL
|
||||
|| (logging_redirect != 0 && logging_no_redirect_file == NULL)
|
||||
|| (logging_redirect == 0 && logging_no_redirect_file != NULL))
|
||||
return;
|
||||
|
||||
if (logging_redirect != 0)
|
||||
{
|
||||
gdb_assert (logging_no_redirect_file != NULL);
|
||||
|
||||
/* ui_out_redirect still has not been called for next gdb_stdout. */
|
||||
cleanups = make_cleanup_ui_file_delete (gdb_stdout);
|
||||
|
||||
output = logging_no_redirect_file;
|
||||
new_logging_no_redirect_file = NULL;
|
||||
|
||||
if (from_tty)
|
||||
fprintf_unfiltered (saved_output.out, "Redirecting output to %s.\n",
|
||||
logging_filename);
|
||||
}
|
||||
else
|
||||
{
|
||||
gdb_assert (logging_no_redirect_file == NULL);
|
||||
output = tee_file_new (saved_output.out, 0, gdb_stdout, 0);
|
||||
if (output == NULL)
|
||||
perror_with_name (_("set logging"));
|
||||
new_logging_no_redirect_file = gdb_stdout;
|
||||
|
||||
if (from_tty)
|
||||
fprintf_unfiltered (saved_output.out, "Copying output to %s.\n",
|
||||
logging_filename);
|
||||
}
|
||||
|
||||
gdb_stdout = output;
|
||||
gdb_stderr = output;
|
||||
gdb_stdlog = output;
|
||||
gdb_stdtarg = output;
|
||||
logging_no_redirect_file = new_logging_no_redirect_file;
|
||||
|
||||
/* It should not happen, the redirection has been already setup. */
|
||||
if (ui_out_redirect (uiout, output) < 0)
|
||||
warning (_("Current output protocol does not support redirection"));
|
||||
|
||||
if (logging_redirect != 0)
|
||||
do_cleanups (cleanups);
|
||||
}
|
||||
|
||||
static void
|
||||
show_logging_redirect (struct ui_file *file, int from_tty,
|
||||
struct cmd_list_element *c, const char *value)
|
||||
|
@ -70,6 +140,11 @@ pop_output_files (void)
|
|||
/* Only delete one of the files -- they are all set to the same
|
||||
value. */
|
||||
ui_file_delete (gdb_stdout);
|
||||
if (logging_no_redirect_file)
|
||||
{
|
||||
ui_file_delete (logging_no_redirect_file);
|
||||
logging_no_redirect_file = NULL;
|
||||
}
|
||||
gdb_stdout = saved_output.out;
|
||||
gdb_stderr = saved_output.err;
|
||||
gdb_stdlog = saved_output.log;
|
||||
|
@ -104,18 +179,25 @@ handle_redirections (int from_tty)
|
|||
/* Redirects everything to gdb_stdout while this is running. */
|
||||
if (!logging_redirect)
|
||||
{
|
||||
output = tee_file_new (gdb_stdout, 0, output, 1);
|
||||
struct ui_file *no_redirect_file = output;
|
||||
|
||||
output = tee_file_new (gdb_stdout, 0, no_redirect_file, 0);
|
||||
if (output == NULL)
|
||||
perror_with_name (_("set logging"));
|
||||
discard_cleanups (cleanups);
|
||||
cleanups = make_cleanup_ui_file_delete (output);
|
||||
make_cleanup_ui_file_delete (output);
|
||||
if (from_tty)
|
||||
fprintf_unfiltered (gdb_stdout, "Copying output to %s.\n",
|
||||
logging_filename);
|
||||
logging_no_redirect_file = no_redirect_file;
|
||||
}
|
||||
else
|
||||
{
|
||||
gdb_assert (logging_no_redirect_file == NULL);
|
||||
|
||||
if (from_tty)
|
||||
fprintf_unfiltered (gdb_stdout, "Redirecting output to %s.\n",
|
||||
logging_filename);
|
||||
}
|
||||
else if (from_tty)
|
||||
fprintf_unfiltered (gdb_stdout, "Redirecting output to %s.\n",
|
||||
logging_filename);
|
||||
|
||||
discard_cleanups (cleanups);
|
||||
|
||||
|
@ -187,10 +269,20 @@ show_logging_command (char *args, int from_tty)
|
|||
else
|
||||
printf_unfiltered (_("Logs will be appended to the log file.\n"));
|
||||
|
||||
if (logging_redirect)
|
||||
printf_unfiltered (_("Output will be sent only to the log file.\n"));
|
||||
if (saved_filename)
|
||||
{
|
||||
if (logging_redirect)
|
||||
printf_unfiltered (_("Output is being sent only to the log file.\n"));
|
||||
else
|
||||
printf_unfiltered (_("Output is being logged and displayed.\n"));
|
||||
}
|
||||
else
|
||||
printf_unfiltered (_("Output will be logged and displayed.\n"));
|
||||
{
|
||||
if (logging_redirect)
|
||||
printf_unfiltered (_("Output will be sent only to the log file.\n"));
|
||||
else
|
||||
printf_unfiltered (_("Output will be logged and displayed.\n"));
|
||||
}
|
||||
}
|
||||
|
||||
/* Provide a prototype to silence -Wmissing-prototypes. */
|
||||
|
@ -211,7 +303,7 @@ _initialize_cli_logging (void)
|
|||
Set whether logging overwrites or appends to the log file."), _("\
|
||||
Show whether logging overwrites or appends to the log file."), _("\
|
||||
If set, logging overrides the log file."),
|
||||
NULL,
|
||||
set_logging_overwrite,
|
||||
show_logging_overwrite,
|
||||
&set_logging_cmdlist, &show_logging_cmdlist);
|
||||
add_setshow_boolean_cmd ("redirect", class_support, &logging_redirect, _("\
|
||||
|
@ -219,7 +311,7 @@ Set the logging output mode."), _("\
|
|||
Show the logging output mode."), _("\
|
||||
If redirect is off, output will go to both the screen and the log file.\n\
|
||||
If redirect is on, output will go only to the log file."),
|
||||
NULL,
|
||||
set_logging_redirect,
|
||||
show_logging_redirect,
|
||||
&set_logging_cmdlist, &show_logging_cmdlist);
|
||||
add_setshow_filename_cmd ("file", class_support, &logging_filename, _("\
|
||||
|
|
Loading…
Reference in a new issue