[RFAv3 0/6] Implement | (pipe) command.

Philippe Waroquiers
2019-05-04T16:18:06Z

Implement | (pipe) command.

This patch series adds the pipe command, that allows to send the output
of a GDB command to a shell command.

This is the third version, handling the comments of Pedro.
The doc, help and NEWS are changed in this version, so must be
re-reviewed.

* Comments of Pedro:
* Implement -d SEP (SEP being a string) instead of -dX.
* popen has been kept as libiberty pexecute still implies to use
the WIF* macros. However, exit status handling reworked to go via
convenience variables, rather than being shown to the user.
* various small changes (== '\0', Skip, ...).
* simplified error messages to just indicate with a static string
what argument is wrong or missing.
* extended the test to verify all error handling messages and check
the new convenience variables $_shell_exitcode and $_shell_exitsignal.

* Comments from Eli :
* better definition of WIF* macros for MinGW.
* replace @ref by @xref in the doc.

* Comment from Abhijit Halder/Tom:
* it not that unlikely to have | in a GDB command
=> an optional -d SEP option allows to specify an
alternate string to use SEP to replace the | as separator
between the GDB COMMAND and the SHELL_COMMAND.

* Comments from Tom:
* make previous_saved_command_line static. For this, saved_command_line
is now also static, and all repeat related functions/vars are now
in top.c
* various small changes (use std::swap, strchr, .empty (), ...).
* removed the scoped_restore_current_thread restore
* popen has been kept as libiberty pexecute still implies to use
the WIF* macros.
* Instead of using execute_command_to_string, use GDB redirection
mechanism. I did several trials for this, and at the end,
the only one working properly was very close to the code
of execute_command_to_string.
=> we now have a function execute_command_to_ui_file that is used
to implement the pipe command, and also used by
execute_command_to_string.