]> ncurses.scripts.mit.edu Git - ncurses.git/blobdiff - ncurses/tinfo/tinfo_driver.c
ncurses 6.2 - patch 20200404
[ncurses.git] / ncurses / tinfo / tinfo_driver.c
index 9b6dbb72174aa86c4370165faa3a492d8c7fc790..7919a9b092763a8481586c083b0a585c17953068 100644 (file)
@@ -1,5 +1,6 @@
 /****************************************************************************
- * Copyright (c) 2008-2018,2019 Free Software Foundation, Inc.              *
+ * Copyright 2018-2019,2020 Thomas E. Dickey                                *
+ * Copyright 2008-2016,2017 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            *
@@ -51,7 +52,7 @@
 # endif
 #endif
 
-MODULE_ID("$Id: tinfo_driver.c,v 1.64 2019/07/28 18:43:09 tom Exp $")
+MODULE_ID("$Id: tinfo_driver.c,v 1.67 2020/02/02 23:34:34 tom Exp $")
 
 /*
  * SCO defines TIOCGSIZE and the corresponding struct.  Other systems (SunOS,
@@ -188,6 +189,8 @@ drv_CanHandle(TERMINAL_CONTROL_BLOCK * TCB, const char *tname, int *errret)
        } else if (status == TGETENT_NO) {
            ret_error1(status, "unknown terminal type.\n",
                       tname, NO_COPY);
+       } else {
+           ret_error0(status, "unexpected return-code\n");
        }
     }
     result = TRUE;
@@ -1340,23 +1343,29 @@ drv_keyok(TERMINAL_CONTROL_BLOCK * TCB, int c, int flag)
        unsigned ch = (unsigned) c;
        if (flag) {
            while ((s = _nc_expand_try(sp->_key_ok,
-                                      ch, &count, (size_t) 0)) != 0
-                  && _nc_remove_key(&(sp->_key_ok), ch)) {
-               code = _nc_add_to_try(&(sp->_keytry), s, ch);
-               free(s);
-               count = 0;
-               if (code != OK)
-                   break;
+                                      ch, &count, (size_t) 0)) != 0) {
+               if (_nc_remove_key(&(sp->_key_ok), ch)) {
+                   code = _nc_add_to_try(&(sp->_keytry), s, ch);
+                   free(s);
+                   count = 0;
+                   if (code != OK)
+                       break;
+               } else {
+                   free(s);
+               }
            }
        } else {
            while ((s = _nc_expand_try(sp->_keytry,
-                                      ch, &count, (size_t) 0)) != 0
-                  && _nc_remove_key(&(sp->_keytry), ch)) {
-               code = _nc_add_to_try(&(sp->_key_ok), s, ch);
-               free(s);
-               count = 0;
-               if (code != OK)
-                   break;
+                                      ch, &count, (size_t) 0)) != 0) {
+               if (_nc_remove_key(&(sp->_keytry), ch)) {
+                   code = _nc_add_to_try(&(sp->_key_ok), s, ch);
+                   free(s);
+                   count = 0;
+                   if (code != OK)
+                       break;
+               } else {
+                   free(s);
+               }
            }
        }
     }