X-Git-Url: https://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=ncurses%2Fbase%2Fnew_pair.c;h=2c3c2fb82a2d4c01420b5c8ba47372589a50d202;hp=bbccc19efa7953f3b1b4101c8e3452a512c54670;hb=0de8912c1c0746eb37b733e9e6fdf852aab9506a;hpb=2017ab0e60ca857accae38a01252e0cbdf5f1efe diff --git a/ncurses/base/new_pair.c b/ncurses/base/new_pair.c index bbccc19e..2c3c2fb8 100644 --- a/ncurses/base/new_pair.c +++ b/ncurses/base/new_pair.c @@ -1,5 +1,5 @@ /**************************************************************************** - * Copyright (c) 2017,2018 Free Software Foundation, Inc. * + * Copyright (c) 2017-2018,2019 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * @@ -60,7 +60,7 @@ #endif -MODULE_ID("$Id: new_pair.c,v 1.15 2018/03/01 15:02:12 tom Exp $") +MODULE_ID("$Id: new_pair.c,v 1.18 2019/01/21 14:54:47 tom Exp $") #if NCURSES_EXT_COLORS @@ -102,13 +102,17 @@ dumpit(SCREEN *sp, int pair, const char *tag) char bigbuf[256 * 20]; char *p = bigbuf; int n; - sprintf(p, "%s", tag); - p += strlen(p); + size_t have = sizeof(bigbuf); + + _nc_STRCPY(p, tag, have); for (n = 0; n < sp->_pair_limit; ++n) { if (list[n].mode != cpFREE) { - sprintf(p, " %d%c(%d,%d)", - n, n == pair ? '@' : ':', list[n].next, list[n].prev); p += strlen(p); + if ((size_t) (p - bigbuf) + 50 > have) + break; + _nc_SPRINTF(p, _nc_SLIMIT(have - (p - bigbuf)) + " %d%c(%d,%d)", + n, n == pair ? '@' : ':', list[n].next, list[n].prev); } } T(("(%d/%d) %ld - %s", @@ -193,7 +197,8 @@ _nc_reset_color_pair(SCREEN *sp, int pair, colorpair_t * next) { colorpair_t *last; if (ValidPair(sp, pair)) { - last = _nc_reserve_pairs(sp, pair); + ReservePairs(sp, pair); + last = &(sp->_color_pairs[pair]); delink_color_pair(sp, pair); if (last->mode > cpFREE && (last->fg != next->fg || last->bg != next->bg)) { @@ -277,7 +282,8 @@ NCURSES_SP_NAME(alloc_pair) (NCURSES_SP_DCLx int fg, int bg) } if (!found && (SP_PARM->_pair_alloc < SP_PARM->_pair_limit)) { pair = SP_PARM->_pair_alloc; - if (_nc_reserve_pairs(sp, pair) == 0) { + ReservePairs(SP_PARM, pair); + if (SP_PARM->_color_pairs == 0) { pair = -1; } else { found = TRUE;