Introduction
Introduction Statistics Contact Development Disclaimer Help
init: check setupterm() return value and error return value - sfeed_curses - sf…
git clone git://git.codemadness.org/sfeed_curses
Log
Files
Refs
README
LICENSE
---
commit 830e63da7d15879638f082e241ee489b895e7782
parent c94a5e5e01d617d1f1c2f08058df832148c4adc9
Author: Hiltjo Posthuma <[email protected]>
Date: Sat, 20 Mar 2021 12:51:10 +0100
init: check setupterm() return value and error return value
POSIX specifies:
"If setupterm() detects an error and errret is a null pointer, setupterm()
writes a diagnostic message and exits."
Specify errret and cleanup ourselves. minicurses will ignore this pointer, it
will not use terminfo anyway. Initialize errret to 1 (success).
Make sure to define and check against `OK` or `ERR` for portability, which is
defined in POSIX.
Reference:
https://pubs.opengroup.org/onlinepubs/7908799/xcurses/del_curterm.html
Discussed with quinq, thanks!
Diffstat:
M minicurses.h | 9 +++++++--
M sfeed_curses.c | 6 +++++-
2 files changed, 12 insertions(+), 3 deletions(-)
---
diff --git a/minicurses.h b/minicurses.h
@@ -1,5 +1,10 @@
#include <sys/ioctl.h>
+#undef ERR
+#define ERR (-1)
+#undef OK
+#define OK (0)
+
const char *clr_eol = "\x1b[K";
const char *clear_screen = "\x1b[H\x1b[2J";
const char *cursor_address = "\x1b[%d;%dH";
@@ -23,13 +28,13 @@ setupterm(char *term, int fildes, int *errret)
struct winsize winsz;
if (ioctl(fildes, TIOCGWINSZ, &winsz) == -1)
- return -1; /* ERR */
+ return ERR;
if (winsz.ws_col > 0)
columns = winsz.ws_col;
if (winsz.ws_row > 0)
lines = winsz.ws_row;
- return 0; /* OK */
+ return OK;
}
char *
diff --git a/sfeed_curses.c b/sfeed_curses.c
@@ -636,6 +636,7 @@ void
init(void)
{
struct sigaction sa;
+ int errret = 1;
tcgetattr(0, &tsave);
memcpy(&tcur, &tsave, sizeof(tcur));
@@ -644,7 +645,10 @@ init(void)
tcur.c_cc[VTIME] = 0;
tcsetattr(0, TCSANOW, &tcur);
- setupterm(NULL, 1, NULL);
+ if (setupterm(NULL, 1, &errret) != OK || errret != 1) {
+ errno = 0;
+ die("setupterm: terminfo database or entry for $TERM not found…
+ }
resizewin();
appmode(1);
You are viewing proxied material from codemadness.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.