Skip to content

Commit

Permalink
Support COLOR_PAIRS > SHRT_MAX
Browse files Browse the repository at this point in the history
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
  • Loading branch information
michaelforney committed Feb 18, 2018
1 parent 5963289 commit f33585c
Showing 1 changed file with 2 additions and 2 deletions.
4 changes: 2 additions & 2 deletions ui-terminal-curses.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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));
}
Expand Down

0 comments on commit f33585c

Please sign in to comment.