[libvirt] [PATCH v2] virsh: Allow other escape characters for console
Eric Blake
eblake at redhat.com
Wed Nov 30 19:29:20 UTC 2011
On 11/24/2011 04:03 AM, Michal Privoznik wrote:
> Currently virsh supports only ^] as escape character for console.
> However, some users might want to use something else. This patch
> creates such ability by specifying '-e' switch on virsh command
> line.
> ---
> diff to v1:
> -Eric's review included
>
> tools/console.c | 26 +++++++++++++++++++++-----
> tools/console.h | 4 +++-
> tools/virsh.c | 40 +++++++++++++++++++++++++++++++---------
> tools/virsh.pod | 5 +++++
> 4 files changed, 60 insertions(+), 15 deletions(-)
>
> diff --git a/tools/console.c b/tools/console.c
> index 0f85bc7..060629f 100644
> --- a/tools/console.c
> +++ b/tools/console.c
> @@ -43,9 +43,11 @@
> # include "memory.h"
> # include "virterror_internal.h"
>
> -
> -/* ie Ctrl-] as per telnet */
> -# define CTRL_CLOSE_BRACKET '\35'
> +/*
> + * Convert given character to control character.
> + * Basically, we take lower 6 bits.
Maybe tweak the comment with:
s/we take/we assume ASCII, and take/
> @@ -250,6 +253,7 @@ typedef struct __vshControl {
> virDomainGetState is not supported */
> bool useSnapshotOld; /* cannot use virDomainSnapshotGetParent or
> virDomainSnapshotNumChildren */
> + const char *escapeChar; /* Escape character for domain console */
This confused me in v1. Here, you are storing the string representation
of the escape char, not the escape char itself. How about tweaking the
comment:
/* String representation of console escape character */
> @@ -17095,15 +17100,17 @@ vshUsage(void)
> fprintf(stdout, _("\n%s [options]... [<command_string>]"
> "\n%s [options]... <command> [args...]\n\n"
> " options:\n"
> - " -c | --connect <uri> hypervisor connection URI\n"
> + " -c | --connect=URI hypervisor connection URI\n"
> " -r | --readonly connect readonly\n"
> - " -d | --debug <num> debug level [0-4]\n"
> + " -d | --debug=num debug level [0-4]\n"
Here, I'd write --debug=NUM, to make it obvious that NUM is a metasyntax
to be replaced by a number.
> @@ -17305,6 +17313,18 @@ vshParseArgv(vshControl *ctl, int argc, char **argv)
> case 'l':
> ctl->logfile = vshStrdup(ctl, optarg);
> break;
> + case 'e':
> + len = strlen(optarg);
> +
> + if ((len == 2 && *optarg == '^') ||
> + (len == 1 && *optarg != '^')) {
> + ctl->escapeChar = vshStrdup(ctl, optarg);
Mem leak - this overwrites malloc'd memory...
> + } else {
> + vshError(ctl, _("Invalid string '%s' for escape sequence"),
> + optarg);
> + exit(EXIT_FAILURE);
> + }
> + break;
> default:
> vshError(ctl, _("unsupported option '-%c'. See --help."), arg);
> exit(EXIT_FAILURE);
> @@ -17346,6 +17366,8 @@ main(int argc, char **argv)
> ctl->imode = true; /* default is interactive mode */
> ctl->log_fd = -1; /* Initialize log file descriptor */
> ctl->debug = VSH_DEBUG_DEFAULT;
> + ctl->escapeChar = vshStrdup(ctl, CTRL_CLOSE_BRACKET);
from here. But why do you need vshStrdup in the first place? Why not
just directly assign ctl->escapeChar = CTRL_CLOSE_BRACKET here, and
ctl->escapeChar = optarg above?
> +
>
> if (!setlocale(LC_ALL, "")) {
> perror("setlocale");
> diff --git a/tools/virsh.pod b/tools/virsh.pod
> index db872dd..08b761d 100644
> --- a/tools/virsh.pod
> +++ b/tools/virsh.pod
> @@ -92,6 +92,11 @@ option of the B<connect> command.
>
> Output elapsed time information for each command.
>
> +=item B<-e>, B<--escape> I<string>
> +
> +Set alternative escape sequence for I<console> command. By default,
> +telnet's ^] is used.
It might look better in the man page to use B<^]> for emphasis.
ACK with nits fixed, and apologies for the slow review.
--
Eric Blake eblake at redhat.com +1-919-301-3266
Libvirt virtualization library http://libvirt.org
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 620 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20111130/06c7707c/attachment-0001.sig>
More information about the libvir-list
mailing list