]> ncurses.scripts.mit.edu Git - ncurses.git/blobdiff - ncurses/base/keyok.c
ncurses 5.9 - patch 20121117
[ncurses.git] / ncurses / base / keyok.c
index d700be491038d9c691d84ad9cc15cf859dac313e..00e936dacde991fd8233451558db5a2b94342b6c 100644 (file)
@@ -1,5 +1,5 @@
 /****************************************************************************
- * Copyright (c) 1998-2009,2011 Free Software Foundation, Inc.              *
+ * Copyright (c) 1998-2011,2012 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            *
@@ -33,7 +33,7 @@
 
 #include <curses.priv.h>
 
-MODULE_ID("$Id: keyok.c,v 1.11 2011/06/04 19:24:16 tom Exp $")
+MODULE_ID("$Id: keyok.c,v 1.13 2012/11/18 02:14:35 tom Exp $")
 
 /*
  * Enable (or disable) ncurses' interpretation of a keycode by adding (or
@@ -62,24 +62,30 @@ NCURSES_SP_NAME(keyok) (NCURSES_SP_DCLx int c, bool flag)
            unsigned ch = (unsigned) c;
 
            if (flag) {
-               while ((s = _nc_expand_try(SP_PARM->_key_ok, ch, &count, 0))
-                      != 0
-                      && _nc_remove_key(&(SP_PARM->_key_ok), ch)) {
-                   code = _nc_add_to_try(&(SP_PARM->_keytry), s, ch);
-                   free(s);
-                   count = 0;
-                   if (code != OK)
-                       break;
+               while ((s = _nc_expand_try(SP_PARM->_key_ok,
+                                          ch, &count, (size_t) 0)) != 0) {
+                   if (_nc_remove_key(&(SP_PARM->_key_ok), ch)) {
+                       code = _nc_add_to_try(&(SP_PARM->_keytry), s, ch);
+                       free(s);
+                       count = 0;
+                       if (code != OK)
+                           break;
+                   } else {
+                       free(s);
+                   }
                }
            } else {
-               while ((s = _nc_expand_try(SP_PARM->_keytry, ch, &count, 0))
-                      != 0
-                      && _nc_remove_key(&(SP_PARM->_keytry), ch)) {
-                   code = _nc_add_to_try(&(SP_PARM->_key_ok), s, ch);
-                   free(s);
-                   count = 0;
-                   if (code != OK)
-                       break;
+               while ((s = _nc_expand_try(SP_PARM->_keytry,
+                                          ch, &count, (size_t) 0)) != 0) {
+                   if (_nc_remove_key(&(SP_PARM->_keytry), ch)) {
+                       code = _nc_add_to_try(&(SP_PARM->_key_ok), s, ch);
+                       free(s);
+                       count = 0;
+                       if (code != OK)
+                           break;
+                   } else {
+                       free(s);
+                   }
                }
            }
        }