ncurses 5.9 - patch 20130928
[ncurses.git] / ncurses / tinfo / lib_setup.c
index 9467b7df6b3097a68003bb8a00214d7647de7536..946342da41db60ecb7b7ef2ca105d6becb6be327 100644 (file)
@@ -1,5 +1,5 @@
 /****************************************************************************
- * Copyright (c) 1998-2011,2012 Free Software Foundation, Inc.              *
+ * Copyright (c) 1998-2012,2013 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            *
@@ -48,7 +48,7 @@
 #include <locale.h>
 #endif
 
-MODULE_ID("$Id: lib_setup.c,v 1.154 2012/12/08 22:01:26 tom Exp $")
+MODULE_ID("$Id: lib_setup.c,v 1.158 2013/06/22 19:59:08 tom Exp $")
 
 /****************************************************************************
  *
@@ -438,7 +438,7 @@ _nc_update_screensize(SCREEN *sp)
      * We're doing it this way because those functions belong to the upper
      * ncurses library, while this resides in the lower terminfo library.
      */
-    if (sp->_resize != 0) {
+    if (sp != 0 && sp->_resize != 0) {
        if ((new_lines != old_lines) || (new_cols != old_cols)) {
            sp->_resize(NCURSES_SP_ARGx new_lines, new_cols);
        } else if (sp->_sig_winch && (sp->_ungetch != 0)) {
@@ -455,7 +455,7 @@ _nc_update_screensize(SCREEN *sp)
  *
  ****************************************************************************/
 
-#if USE_DATABASE || USE_TERMCAP
+#if NCURSES_USE_DATABASE || NCURSES_USE_TERMCAP
 /*
  * Return 1 if entry found, 0 if not found, -1 if database not accessible,
  * just like tgetent().
@@ -687,7 +687,9 @@ TINFO_SETUP_TERM(TERMINAL ** tp,
 #endif
     } else {
 #ifdef USE_TERM_DRIVER
-       termp = (TERMINAL *) typeCalloc(TERMINAL_CONTROL_BLOCK, 1);
+       TERMINAL_CONTROL_BLOCK *my_tcb;
+       my_tcb = typeCalloc(TERMINAL_CONTROL_BLOCK, 1);
+       termp = &(my_tcb->term);
 #else
        termp = typeCalloc(TERMINAL, 1);
 #endif
@@ -707,7 +709,7 @@ TINFO_SETUP_TERM(TERMINAL ** tp,
                       "Could not find any driver to handle this terminal.\n");
        }
 #else
-#if USE_DATABASE || USE_TERMCAP
+#if NCURSES_USE_DATABASE || NCURSES_USE_TERMCAP
        status = _nc_setup_tinfo(tname, &termp->type);
 #else
        status = TGETENT_NO;
@@ -783,14 +785,12 @@ TINFO_SETUP_TERM(TERMINAL ** tp,
        if ((VALID_STRING(cursor_address)
             || (VALID_STRING(cursor_down) && VALID_STRING(cursor_home)))
            && VALID_STRING(clear_screen)) {
-           free(termp);
            ret_error1(TGETENT_YES, "terminal is not really generic.\n", tname);
        } else {
-           free(termp);
+           del_curterm(termp);
            ret_error1(TGETENT_NO, "I need something more specific.\n", tname);
        }
     } else if (hard_copy) {
-       free(termp);
        ret_error1(TGETENT_YES, "I can't handle hardcopy terminals.\n", tname);
     }
 #endif