ncurses 5.7 - patch 20100717
[ncurses.git] / ncurses / base / lib_slk.c
index 8fafdbca83832530aa11f347106bd107e58f6aaf..118db945d78dfe88a74eb9d4f0809d3431f90299 100644 (file)
@@ -47,7 +47,7 @@
 #define CUR SP_TERMTYPE
 #endif
 
-MODULE_ID("$Id: lib_slk.c,v 1.45 2010/05/01 20:44:34 tom Exp $")
+MODULE_ID("$Id: lib_slk.c,v 1.46 2010/06/05 22:37:05 tom Exp $")
 
 #ifdef USE_TERM_DRIVER
 #define NumLabels    InfoOf(SP_PARM).numlabels
@@ -79,7 +79,7 @@ NCURSES_EXPORT(int)
 _nc_format_slks(NCURSES_SP_DCLx int cols)
 {
     int gap, i, x;
-    unsigned max_length;
+    int max_length;
 
     if (!SP_PARM || !SP_PARM->_slk)
        return ERR;
@@ -98,7 +98,7 @@ _nc_format_slks(NCURSES_SP_DCLx int cols)
        }
     } else {
        if (SP_PARM->slk_format == 2) {         /* 4-4 */
-           gap = cols - (SP_PARM->_slk->maxlab * max_length) - 6;
+           gap = cols - (int) (SP_PARM->_slk->maxlab * max_length) - 6;
 
            if (gap < 1)
                gap = 1;
@@ -138,7 +138,7 @@ _nc_slk_initialize(WINDOW *stwin, int cols)
 {
     int i;
     int res = OK;
-    unsigned max_length;
+    int max_length;
     SCREEN *sp;
     int numlab;
 
@@ -172,15 +172,15 @@ _nc_slk_initialize(WINDOW *stwin, int cols)
     else
        SetAttr(SP_PARM->_slk->attr, A_REVERSE);
 
-    SP_PARM->_slk->maxlab = ((numlab > 0)
-                            ? numlab
-                            : MAX_SKEY(SP_PARM->slk_format));
-    SP_PARM->_slk->maxlen = ((numlab > 0)
-                            ? LabelWidth * LabelHeight
-                            : MAX_SKEY_LEN(SP_PARM->slk_format));
-    SP_PARM->_slk->labcnt = ((SP_PARM->_slk->maxlab < MAX_SKEY(SP_PARM->slk_format))
-                            ? MAX_SKEY(SP_PARM->slk_format)
-                            : SP_PARM->_slk->maxlab);
+    SP_PARM->_slk->maxlab = (short) ((numlab > 0)
+                                    ? numlab
+                                    : MAX_SKEY(SP_PARM->slk_format));
+    SP_PARM->_slk->maxlen = (short) ((numlab > 0)
+                                    ? LabelWidth * LabelHeight
+                                    : MAX_SKEY_LEN(SP_PARM->slk_format));
+    SP_PARM->_slk->labcnt = (short) ((SP_PARM->_slk->maxlab < MAX_SKEY(SP_PARM->slk_format))
+                                    ? MAX_SKEY(SP_PARM->slk_format)
+                                    : SP_PARM->_slk->maxlab);
 
     if (SP_PARM->_slk->maxlen <= 0
        || SP_PARM->_slk->labcnt <= 0
@@ -191,7 +191,7 @@ _nc_slk_initialize(WINDOW *stwin, int cols)
 
     max_length = SP_PARM->_slk->maxlen;
     for (i = 0; i < SP_PARM->_slk->labcnt; i++) {
-       size_t used = max_length + 1;
+       size_t used = (size_t) max_length + 1;
 
        SP_PARM->_slk->ent[i].ent_text = (char *) _nc_doalloc(0, used);
        if (SP_PARM->_slk->ent[i].ent_text == 0)
@@ -201,9 +201,10 @@ _nc_slk_initialize(WINDOW *stwin, int cols)
        SP_PARM->_slk->ent[i].form_text = (char *) _nc_doalloc(0, used);
        if (SP_PARM->_slk->ent[i].form_text == 0)
            returnCode(slk_failed(NCURSES_SP_ARG));
-       memset(SP_PARM->_slk->ent[i].form_text, 0, used);
 
-       memset(SP_PARM->_slk->ent[i].form_text, ' ', max_length);
+       memset(SP_PARM->_slk->ent[i].form_text, ' ', used - 1);
+       SP_PARM->_slk->ent[i].form_text[used] = '\0';
+
        SP_PARM->_slk->ent[i].visible = (char) (i < SP_PARM->_slk->maxlab);
     }