The setupterm(3) manual states: > If errret is not null, then setupterm returns OK or ERR and stores a > status value in the integer pointed to by errret. > ... > If errret is null, setupterm prints an error message upon finding an > error and exits.
Since less(1) passes NULL, it will not return on error but instead terminate the program. Checking the returned value against ERR requires including curses.h which causes a naming conflict with the existing beep function. I therefore kept the condition as is. The error message is borrowed from setupterm when errret is NULL and does currently not distinguish between error code 0 and -1. Should patches to less(1) be submitted upstream[1] instead? If true, I apologize for the noise. [1] https://github.com/gdamore/less-fork Index: screen.c =================================================================== RCS file: /cvs/src/usr.bin/less/screen.c,v retrieving revision 1.23 diff -u -p -u -r1.23 screen.c --- screen.c 16 Mar 2016 15:36:26 -0000 1.23 +++ screen.c 11 Jun 2016 09:12:05 -0000 @@ -16,6 +16,7 @@ #include <sys/ioctl.h> +#include <err.h> #include <term.h> #include <termios.h> @@ -266,6 +267,7 @@ get_term(void) { char *t1, *t2; char *term; + int err; /* * Find out what kind of terminal this is. @@ -274,8 +276,11 @@ get_term(void) term = DEFAULT_TERM; hardcopy = 0; - if (setupterm(term, 1, NULL) < 0) { - hardcopy = 1; + if (setupterm(term, 1, &err) < 0) { + if (err == 1) + hardcopy = 1; + else + errx(1, "%s: unknown terminal type", term); } if (hard_copy == 1) hardcopy = 1;
