diff options
author | Todd C. Miller <millert@cvs.openbsd.org> | 1999-12-28 23:15:17 +0000 |
---|---|---|
committer | Todd C. Miller <millert@cvs.openbsd.org> | 1999-12-28 23:15:17 +0000 |
commit | 5b5b8eab120321315d0a50d8a81f42b6ea1ea6ce (patch) | |
tree | 023f5d2f292e2e903ca3f8f3ff58a43ac7e7d03c /lib/libcurses/tinfo/read_bsd_terminfo.c | |
parent | b7455191930ede0336c3cdc52c67122f76bf0316 (diff) |
When reading an entry from terminfo.db, do not try to set a capability
to be 'not present' since that has already been done for us in _nc_init_entry().
This fixes some core dumps caused by a divide by 0 bug deep within ncurses
that resulted from using the old way to specify that a capability was
'not present'.
Diffstat (limited to 'lib/libcurses/tinfo/read_bsd_terminfo.c')
-rw-r--r-- | lib/libcurses/tinfo/read_bsd_terminfo.c | 29 |
1 files changed, 10 insertions, 19 deletions
diff --git a/lib/libcurses/tinfo/read_bsd_terminfo.c b/lib/libcurses/tinfo/read_bsd_terminfo.c index ef57727825c..8446b4877c5 100644 --- a/lib/libcurses/tinfo/read_bsd_terminfo.c +++ b/lib/libcurses/tinfo/read_bsd_terminfo.c @@ -1,4 +1,4 @@ -/* $OpenBSD: read_bsd_terminfo.c,v 1.5 1999/03/02 06:23:29 millert Exp $ */ +/* $OpenBSD: read_bsd_terminfo.c,v 1.6 1999/12/28 23:15:16 millert Exp $ */ /* * Copyright (c) 1998, 1999 Todd C. Miller <Todd.Miller@courtesan.com> @@ -32,7 +32,7 @@ */ #ifndef lint -static char rcsid[] = "$OpenBSD: read_bsd_terminfo.c,v 1.5 1999/03/02 06:23:29 millert Exp $"; +static char rcsid[] = "$OpenBSD: read_bsd_terminfo.c,v 1.6 1999/12/28 23:15:16 millert Exp $"; #endif #include <curses.priv.h> @@ -174,25 +174,16 @@ _nc_lookup_bsd_terminfo_entry(tn, filename, tp) if (strlen(p) > MAX_ALIAS) _nc_warning("alias `%s' may be too long", p); - /* Copy capabilities */ - for_each_boolean(i, tp) { - if (cgetcap(capbuf, (char *)boolnames[i], ':') == NULL) - tp->Booleans[i] = FALSE; - else + /* Copy existing capabilities */ + for_each_boolean(i, tp) + if (cgetcap(capbuf, (char *)boolnames[i], ':') != NULL) tp->Booleans[i] = TRUE; - } - for_each_number(i, tp) { - if (cgetnum(capbuf, (char *)numnames[i], &num) < 0) - tp->Numbers[i] = 0; - else - tp->Numbers[i] = (int)num; - } - for_each_string(i, tp) { - if (cgetstr(capbuf, (char *)strnames[i], &p) < 0) - tp->Strings[i] = NULL; - else + for_each_number(i, tp) + if (cgetnum(capbuf, (char *)numnames[i], &num) == 0) + tp->Numbers[i] = (short)num; + for_each_string(i, tp) + if (cgetstr(capbuf, (char *)strnames[i], &p) >= 0) tp->Strings[i] = p; - } i = 0; } |