On Fri, Mar 15, 2019 at 02:43:04PM +0000, Nicholas Marriott wrote: > . > 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 > > );
Maybe it's nicer to use numbered arguments for this instead of repeating esc? Like: printf("%1$s %1$s %1$s", 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; > -- Kind regards, Hiltjo