[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v3 1/2] tools/console: Add escape argument to configure escape character
On Thu, Jun 22, 2023 at 03:12:47PM +0100, Peter Hoyes wrote: > From: Peter Hoyes <Peter.Hoyes@xxxxxxx> > > Dom0 may be accessed via telnet, meaning the default escape character > (which is the same as telnet's) cannot be directly used to exit the > console. It would be helpful to make the escape character customizable > in such use cases. > > Add --escape argument to console tool for this purpose. > > Create parse_escape_character static function to convert a character > string (which may include a '^' modifier) into an ANSI integer. > > Add argument to getopt options, parse escape character and pass value > to console_loop. > > If --escape is not specified, it falls back to the existing behavior > using DEFAULT_ESCAPE_SEQUENCE. > > Signed-off-by: Peter Hoyes <Peter.Hoyes@xxxxxxx> > Reviewed-by: Luca Fancellu <luca.fancellu@xxxxxxx> > --- > tools/console/client/main.c | 17 +++++++++++++---- > 1 file changed, 13 insertions(+), 4 deletions(-) > > diff --git a/tools/console/client/main.c b/tools/console/client/main.c > index 6775006488..fb7cfb04b5 100644 > --- a/tools/console/client/main.c > +++ b/tools/console/client/main.c > @@ -42,7 +42,7 @@ > #include <xenstore.h> > #include "xenctrl.h" > > -#define ESCAPE_CHARACTER 0x1d > +#define DEFAULT_ESCAPE_CHARACTER 0x1d > > static volatile sig_atomic_t received_signal = 0; > static char lockfile[sizeof (XEN_LOCK_DIR "/xenconsole.") + 8] = { 0 }; > @@ -77,6 +77,7 @@ static void usage(const char *program) { > " -n, --num N use console number N\n" > " --type TYPE console type. must be 'pv', 'serial' or > 'vuart'\n" > " --start-notify-fd N file descriptor used to notify parent\n" > + " --escape E escape sequence to exit console\n" > , program); > } > > @@ -174,7 +175,7 @@ static void restore_term(int fd, struct termios *old) > } > > static int console_loop(int fd, struct xs_handle *xs, char *pty_path, > - bool interactive) > + bool interactive, char escape_character) > { > int ret, xs_fd = xs_fileno(xs), max_fd = -1; > > @@ -215,7 +216,7 @@ static int console_loop(int fd, struct xs_handle *xs, > char *pty_path, > char msg[60]; > > len = read(STDIN_FILENO, msg, sizeof(msg)); > - if (len == 1 && msg[0] == ESCAPE_CHARACTER) { > + if (len == 1 && msg[0] == escape_character) { > return 0; > } > > @@ -335,6 +336,7 @@ int main(int argc, char **argv) > { "help", 0, 0, 'h' }, > { "start-notify-fd", 1, 0, 's' }, > { "interactive", 0, 0, 'i' }, > + { "escape", 1, 0, 'e' }, > { 0 }, > > }; > @@ -345,6 +347,7 @@ int main(int argc, char **argv) > console_type type = CONSOLE_INVAL; > bool interactive = 0; > const char *console_names = "serial, pv, vuart"; > + char escape_character = DEFAULT_ESCAPE_CHARACTER; > > while((ch = getopt_long(argc, argv, sopt, lopt, &opt_ind)) != -1) { > switch(ch) { > @@ -375,6 +378,12 @@ int main(int argc, char **argv) > case 'i': > interactive = 1; > break; > + case 'e': > + if (optarg[0] == '^') > + escape_character = optarg[1] & 0x1f; > + else > + escape_character = optarg[0]; > + break; Could you check that `optarg` actually contains a valid escape character sequence? Either only 1 character, or '^' followed by only one char. (If one want to use the NUL char to escape, it should set ^@, not '' or '^'.) Thanks, -- Anthony PERARD
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |