.
Another couple of minor changes below, with those it looks good to
me. Any OK for this?
On Fri, Mar 15, 2019 at 01:49:52PM +0200, Artturi Alm wrote:
> On Thu, Mar 14, 2019 at 10:18:57AM +0000, Nicholas Marriott wrote:
> > Thanks, comments inline.
> >
>
> The diff looks much better to me, now with those things fixed based
> on your feedback, thanks :]
>
> -Artturi
>
>
> diff --git a/usr.bin/cu/command.c b/usr.bin/cu/command.c
> index c07fe73aeca..27d80f16dd7 100644
> --- a/usr.bin/cu/command.c
> +++ b/usr.bin/cu/command.c
> @@ -30,6 +30,7 @@
> #include <stdio.h>
> #include <string.h>
> #include <unistd.h>
> +#include <vis.h>
>
> #include "cu.h"
>
> @@ -223,6 +224,8 @@ start_record(void)
> void
> do_command(char c)
> {
> + char esc[4 + 1];
> +
> if (restricted && strchr("CRX$>", c) != NULL) {
> cu_warnx("~%c command is not allowed in restricted mode", c);
> return;
> @@ -266,20 +269,23 @@ do_command(char c)
> sleep(1);
> ioctl(line_fd, TIOCCBRK, NULL);
> break;
> - case '~':
> - bufferevent_write(line_ev, "~", 1);
> + default:
> + if (c == escape_char)
> + bufferevent_write(line_ev, &c, 1);
> break;
> case '?':
> + vis(esc, escape_char, VIS_WHITE | VIS_NOSLASH, 0);
> printf("\r\n"
> - "~# send break\r\n"
> - "~$ pipe local command to remote host\r\n"
> - "~> send file to remote host\r\n"
> - "~C connect program to remote host\r\n"
> - "~D de-assert DTR line briefly\r\n"
> - "~R start recording to file\r\n"
> - "~S set speed\r\n"
> - "~X send file with XMODEM\r\n"
> - "~? get this summary\r\n"
> + "%s# send break\r\n"
> + "%s$ pipe local command to remote host\r\n"
> + "%s> send file to remote host\r\n"
> + "%sC connect program to remote host\r\n"
> + "%sD de-assert DTR line briefly\r\n"
> + "%sR start recording to file\r\n"
> + "%sS set speed\r\n"
> + "%sX send file with XMODEM\r\n"
> + "%s? get this summary\r\n",
> + esc, esc, esc, esc, esc, esc, esc, esc, esc
> );
> break;
> }
> diff --git a/usr.bin/cu/cu.1 b/usr.bin/cu/cu.1
> index 104a6ea7893..3e85488e87c 100644
> --- a/usr.bin/cu/cu.1
> +++ b/usr.bin/cu/cu.1
> @@ -36,6 +36,7 @@
> .Sh SYNOPSIS
> .Nm
> .Op Fl dr
> +.Op Fl E Ar escape_char
> .Op Fl l Ar line
> .Op Fl s Ar speed | Fl Ar speed
> .Nm
> @@ -55,6 +56,8 @@ The options are as follows:
> Specify that the line is directly connected and
> .Nm
> should not allow the driver to block waiting for a carrier to be detected.
> +.It Fl E Ar escape_char
> +Specify an escape character to use instead of the default tilde.
> .It Fl l Ar line
> Specify the line to use.
> Either of the forms like
> diff --git a/usr.bin/cu/cu.c b/usr.bin/cu/cu.c
> index 03a2df4181f..8e3ce0b0c0e 100644
> --- a/usr.bin/cu/cu.c
> +++ b/usr.bin/cu/cu.c
> @@ -41,6 +41,7 @@ FILE *record_file;
> struct termios saved_tio;
> struct bufferevent *input_ev;
> struct bufferevent *output_ev;
> +int escape_char = '~';
> int is_direct = -1;
> int restricted = 0;
> const char *line_path = NULL;
> @@ -53,7 +54,7 @@ struct event sighup_ev;
> enum {
> STATE_NONE,
> STATE_NEWLINE,
> - STATE_TILDE
> + STATE_ESCAPE
> } last_state = STATE_NEWLINE;
>
> __dead void usage(void);
> @@ -67,8 +68,8 @@ void try_remote(const char *, const char *,
> const char *);
> __dead void
> usage(void)
> {
> - fprintf(stderr, "usage: %s [-dr] [-l line] [-s speed | -speed]\n",
> - __progname);
> + fprintf(stderr, "usage: %s [-dr] [-E escape_char] [-l line] "
> + "[-s speed | -speed]\n", __progname);
> fprintf(stderr, " %s [host]\n", __progname);
> exit(1);
> }
> @@ -94,14 +95,14 @@ main(int argc, char **argv)
> for (i = 1; i < argc; i++) {
> if (strcmp("--", argv[i]) == 0)
> break;
> - if (argv[i][0] != '-' || !isdigit((unsigned char)argv[i][1]))
> + if (argv[i][0] != '-' || !isdigit((u_char)argv[i][1]))
> continue;
>
> if (asprintf(&argv[i], "-s%s", &argv[i][1]) == -1)
> errx(1, "speed asprintf");
> }
>
> - while ((opt = getopt(argc, argv, "drl:s:")) != -1) {
> + while ((opt = getopt(argc, argv, "drE:l:s:")) != -1) {
> switch (opt) {
> case 'd':
> is_direct = 1;
> @@ -111,6 +112,17 @@ main(int argc, char **argv)
> err(1, "pledge");
> restricted = 1;
> break;
> + case 'E':
> + if (optarg[0] == '^' && optarg[2] == 0 &&
> + (u_char)optarg[1] >= 64 &&
> + (u_char)optarg[1] < 128)
This line can be joined to the previous line now.
> + escape_char = (u_char)optarg[1] & 31;
> + else if (strlen(optarg) == 1)
> + escape_char = (u_char)optarg[0];
> + else
> + errx(1, "invalid escape character: %s",
> + optarg);
And here as well.
> + break;
> case 'l':
> line_path = optarg;
> break;
> @@ -308,14 +320,14 @@ stream_read(struct bufferevent *bufev, void *data)
> last_state = STATE_NEWLINE;
> break;
> case STATE_NEWLINE:
> - if (state_change && *ptr == '~') {
> - last_state = STATE_TILDE;
> + if (state_change && *ptr == escape_char) {
This needs to be (u_char)*ptr.
> + last_state = STATE_ESCAPE;
> continue;
> }
> if (*ptr != '\r')
> last_state = STATE_NONE;
> break;
> - case STATE_TILDE:
> + case STATE_ESCAPE:
> do_command(*ptr);
> last_state = STATE_NEWLINE;
> continue;
> diff --git a/usr.bin/cu/cu.h b/usr.bin/cu/cu.h
> index 2a7ca45d414..abcedc6d77a 100644
> --- a/usr.bin/cu/cu.h
> +++ b/usr.bin/cu/cu.h
> @@ -23,6 +23,7 @@
> void do_command(char);
>
> /* cu.c */
> +extern int escape_char;
> extern int restricted;
> extern FILE *record_file;
> extern struct termios saved_tio;