=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/window/Attic/wwinit.c,v retrieving revision 1.12 retrieving revision 1.13 diff -c -r1.12 -r1.13 *** src/usr.bin/window/Attic/wwinit.c 2003/04/05 01:39:50 1.12 --- src/usr.bin/window/Attic/wwinit.c 2003/04/19 23:56:09 1.13 *************** *** 1,4 **** ! /* $OpenBSD: wwinit.c,v 1.12 2003/04/05 01:39:50 pvalchev Exp $ */ /* $NetBSD: wwinit.c,v 1.11 1996/02/08 21:49:07 mycroft Exp $ */ /* --- 1,4 ---- ! /* $OpenBSD: wwinit.c,v 1.13 2003/04/19 23:56:09 dhartmei Exp $ */ /* $NetBSD: wwinit.c,v 1.11 1996/02/08 21:49:07 mycroft Exp $ */ /* *************** *** 41,47 **** #if 0 static char sccsid[] = "@(#)wwinit.c 8.2 (Berkeley) 4/28/95"; #else ! static char rcsid[] = "$OpenBSD: wwinit.c,v 1.12 2003/04/05 01:39:50 pvalchev Exp $"; #endif #endif /* not lint */ --- 41,47 ---- #if 0 static char sccsid[] = "@(#)wwinit.c 8.2 (Berkeley) 4/28/95"; #else ! static char rcsid[] = "$OpenBSD: wwinit.c,v 1.13 2003/04/19 23:56:09 dhartmei Exp $"; #endif #endif /* not lint */ *************** *** 279,320 **** kp = wwwintermcap; if (wwavailmodes & WWM_REV) ! wwaddcap1(WWT_REV, &kp); if (wwavailmodes & WWM_BLK) ! wwaddcap1(WWT_BLK, &kp); if (wwavailmodes & WWM_UL) ! wwaddcap1(WWT_UL, &kp); if (wwavailmodes & WWM_GRP) ! wwaddcap1(WWT_GRP, &kp); if (wwavailmodes & WWM_DIM) ! wwaddcap1(WWT_DIM, &kp); if (wwavailmodes & WWM_USR) ! wwaddcap1(WWT_USR, &kp); if (tt.tt_insline && tt.tt_delline || tt.tt_setscroll) ! wwaddcap1(WWT_ALDL, &kp); if (tt.tt_inschar) ! wwaddcap1(WWT_IMEI, &kp); if (tt.tt_insspace) ! wwaddcap1(WWT_IC, &kp); if (tt.tt_delchar) ! wwaddcap1(WWT_DC, &kp); ! wwaddcap("kb", &kp); ! wwaddcap("ku", &kp); ! wwaddcap("kd", &kp); ! wwaddcap("kl", &kp); ! wwaddcap("kr", &kp); ! wwaddcap("kh", &kp); if ((j = tgetnum("kn")) >= 0) { char cap[32]; ! (void) sprintf(kp, "kn#%d:", j); for (; *kp; kp++) ; for (i = 1; i <= j; i++) { (void) snprintf(cap, sizeof(cap), "k%d", i); ! wwaddcap(cap, &kp); cap[0] = 'l'; ! wwaddcap(cap, &kp); } } /* --- 279,333 ---- kp = wwwintermcap; if (wwavailmodes & WWM_REV) ! wwaddcap1(WWT_REV, &kp, wwwintermcap + sizeof wwwintermcap - ! kp); if (wwavailmodes & WWM_BLK) ! wwaddcap1(WWT_BLK, &kp, wwwintermcap + sizeof wwwintermcap - ! kp); if (wwavailmodes & WWM_UL) ! wwaddcap1(WWT_UL, &kp, wwwintermcap + sizeof wwwintermcap - ! kp); if (wwavailmodes & WWM_GRP) ! wwaddcap1(WWT_GRP, &kp, wwwintermcap + sizeof wwwintermcap - ! kp); if (wwavailmodes & WWM_DIM) ! wwaddcap1(WWT_DIM, &kp, wwwintermcap + sizeof wwwintermcap - ! kp); if (wwavailmodes & WWM_USR) ! wwaddcap1(WWT_USR, &kp, wwwintermcap + sizeof wwwintermcap - ! kp); if (tt.tt_insline && tt.tt_delline || tt.tt_setscroll) ! wwaddcap1(WWT_ALDL, &kp, wwwintermcap + sizeof wwwintermcap - ! kp); if (tt.tt_inschar) ! wwaddcap1(WWT_IMEI, &kp, wwwintermcap + sizeof wwwintermcap - ! kp); if (tt.tt_insspace) ! wwaddcap1(WWT_IC, &kp, wwwintermcap + sizeof wwwintermcap - ! kp); if (tt.tt_delchar) ! wwaddcap1(WWT_DC, &kp, wwwintermcap + sizeof wwwintermcap - ! kp); ! wwaddcap("kb", &kp, wwwintermcap + sizeof wwwintermcap - kp); ! wwaddcap("ku", &kp, wwwintermcap + sizeof wwwintermcap - kp); ! wwaddcap("kd", &kp, wwwintermcap + sizeof wwwintermcap - kp); ! wwaddcap("kl", &kp, wwwintermcap + sizeof wwwintermcap - kp); ! wwaddcap("kr", &kp, wwwintermcap + sizeof wwwintermcap - kp); ! wwaddcap("kh", &kp, wwwintermcap + sizeof wwwintermcap - kp); if ((j = tgetnum("kn")) >= 0) { char cap[32]; ! (void) snprintf(kp, wwwintermcap + sizeof wwwintermcap - kp, ! "kn#%d:", j); for (; *kp; kp++) ; for (i = 1; i <= j; i++) { (void) snprintf(cap, sizeof(cap), "k%d", i); ! wwaddcap(cap, &kp, wwwintermcap + ! sizeof wwwintermcap - kp); cap[0] = 'l'; ! wwaddcap(cap, &kp, wwwintermcap + ! sizeof wwwintermcap - kp); } } /* *************** *** 349,363 **** return -1; } ! wwaddcap(cap, kp) char *cap; char **kp; { ! char tbuf[512]; char *tp = tbuf; char *str, *p; if ((str = tgetstr(cap, &tp)) != 0) { while (*(*kp)++ = *cap++) ; (*kp)[-1] = '='; --- 362,383 ---- return -1; } ! wwaddcap(cap, kp, len) char *cap; char **kp; + int len; { ! char tbuf[1024]; /* tgetstr(, &tp) does strlcpy(tp,, 1024) */ char *tp = tbuf; char *str, *p; if ((str = tgetstr(cap, &tp)) != 0) { + int need = strlen(cap) + 3; + + for (p = str; *p; ++p) + need += strlen(unctrl(*p)); + if (need > len) + return; while (*(*kp)++ = *cap++) ; (*kp)[-1] = '='; *************** *** 371,380 **** } } ! wwaddcap1(cap, kp) char *cap; char **kp; { while (*(*kp)++ = *cap++) ; (*kp)--; --- 391,403 ---- } } ! wwaddcap1(cap, kp, len) char *cap; char **kp; + int len; { + if (strlen(cap) + 1 > len) + return; while (*(*kp)++ = *cap++) ; (*kp)--;