diff options
| author | Michael Forney <mforney@mforney.org> | 2018-02-18 14:23:05 -0800 |
|---|---|---|
| committer | Michael Forney <mforney@mforney.org> | 2018-02-18 14:23:05 -0800 |
| commit | f33585c7fd4057d10e42868b183993e7b3ee045f (patch) | |
| tree | 9be5fd79194596689f62e1b2a680992aab92a441 /ui-terminal-curses.c | |
| parent | 5963289d0257c7bd422c3cf54866a846168f5c7a (diff) | |
| download | vis-f33585c7fd4057d10e42868b183993e7b3ee045f.tar.gz vis-f33585c7fd4057d10e42868b183993e7b3ee045f.tar.xz | |
Support COLOR_PAIRS > SHRT_MAX
In ncurses 6.1, the TERMINAL structure was updated[0] to store data in `int`
instead of `short`, and terminfo definitions for 256-color terminals were
updated from `pairs#32767` to `pairs#0x10000`.
However, since vis stores the value of COLOR_PAIRS in a short (ncurses
internally stores it as an int), it is now overflowing into negative, breaking
color support completely.
The standard `init_pair` entry points still use `short` for their parameters, so
just restrict the pairs to `SHRT_MAX` during allocation.
[0] http://invisible-island.net/ncurses/announce-6.1.html#h4-new-library
Diffstat (limited to 'ui-terminal-curses.c')
| -rw-r--r-- | ui-terminal-curses.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/ui-terminal-curses.c b/ui-terminal-curses.c index 744cbb4..59f5bc3 100644 --- a/ui-terminal-curses.c +++ b/ui-terminal-curses.c @@ -41,7 +41,7 @@ # define NCURSES_EXT_COLORS 0 # endif # if !NCURSES_EXT_COLORS -# define MAX_COLOR_PAIRS 256 +# define MAX_COLOR_PAIRS MIN(COLOR_PAIRS, 256) # endif #endif #ifndef MAX_COLOR_PAIRS @@ -179,7 +179,7 @@ static short color_pair_get(short fg, short bg) { if (default_bg == -1) default_bg = CELL_COLOR_BLACK; has_default_colors = (use_default_colors() == OK); - color_pairs_max = MIN(COLOR_PAIRS, MAX_COLOR_PAIRS); + color_pairs_max = MIN(MAX_COLOR_PAIRS, SHRT_MAX); if (COLORS) color2palette = calloc((COLORS + 2) * (COLORS + 2), sizeof(short)); } |
