]> ncurses.scripts.mit.edu Git - ncurses.git/blobdiff - ncurses/tinfo/comp_parse.c
ncurses 5.9 - patch 20120901
[ncurses.git] / ncurses / tinfo / comp_parse.c
index 48bd97a8923cd9c1d1d347ac2aa8adba3415dd2b..d45f2489a45667b140d72ddf8d752005a8150a43 100644 (file)
@@ -47,7 +47,7 @@
 
 #include <tic.h>
 
-MODULE_ID("$Id: comp_parse.c,v 1.79 2012/01/28 21:49:23 tom Exp $")
+MODULE_ID("$Id: comp_parse.c,v 1.85 2012/04/14 23:30:10 tom Exp $")
 
 static void sanity_check2(TERMTYPE *, bool);
 NCURSES_IMPEXP void NCURSES_API(*_nc_check_termtype2) (TERMTYPE *, bool) = sanity_check2;
@@ -83,7 +83,7 @@ force_bar(char *dst, char *src)
        if (len > MAX_NAME_SIZE)
            len = MAX_NAME_SIZE;
        (void) strncpy(dst, src, len);
-       (void) strcpy(dst + len, "|");
+       _nc_STRCPY(dst + len, "|", MAX_NAME_SIZE);
        src = dst;
     }
     return src;
@@ -475,7 +475,26 @@ _nc_resolve_uses2(bool fullresolve, bool literal)
                 * checking.
                 */
                if (_nc_check_termtype2 != sanity_check2) {
+                   SCREEN *save_SP = SP;
+                   SCREEN fake_sp;
+                   TERMINAL fake_tm;
+                   TERMINAL *save_tm = cur_term;
+
+                   /*
+                    * Setup so that tic can use ordinary terminfo interface
+                    * to obtain capability information.
+                    */
+                   memset(&fake_sp, 0, sizeof(fake_sp));
+                   memset(&fake_tm, 0, sizeof(fake_tm));
+                   fake_sp._term = &fake_tm;
+                   fake_tm.type = qp->tterm;
+                   SP = &fake_sp;
+                   set_curterm(&fake_tm);
+
                    _nc_check_termtype2(&qp->tterm, literal);
+
+                   SP = save_SP;
+                   set_curterm(save_tm);
                } else {
                    fixup_acsc(&qp->tterm, literal);
                }