ncurses 5.9 - patch 20121229
[ncurses.git] / test / ncurses.c
index 6ff52e08fd2902660b1e1962e930df8e07c84c35..15f732964e8b950eb671780afd48b4929ee8bc94 100644 (file)
@@ -40,7 +40,7 @@ AUTHOR
    Author: Eric S. Raymond <esr@snark.thyrsus.com> 1993
            Thomas E. Dickey (beginning revision 1.27 in 1996).
 
-$Id: ncurses.c,v 1.378 2012/10/27 19:37:56 tom Exp $
+$Id: ncurses.c,v 1.386 2012/12/29 23:37:55 tom Exp $
 
 ***************************************************************************/
 
@@ -1095,7 +1095,7 @@ wget_wch_test(unsigned level, WINDOW *win, int delay)
        } else if (c == 'g') {
            waddstr(win, "getstr test: ");
            echo();
-           code = wgetn_wstr(win, wint_buf, sizeof(wint_buf) - 1);
+           code = wgetn_wstr(win, wint_buf, BUFSIZ - 1);
            noecho();
            if (code == ERR) {
                wprintw(win, "wgetn_wstr returns an error.");
@@ -1660,6 +1660,7 @@ get_wide_background(void)
     short pair;
     wchar_t wch[10];
 
+    memset(&ch, 0, sizeof(ch));
     if (getbkgrnd(&ch) != ERR) {
        if (getcchar(&ch, wch, &attr, &pair, 0) != ERR) {
            result = attr;
@@ -1918,7 +1919,7 @@ show_color_name(int y, int x, int color, bool wide)
        } else if (color < 0) {
            strcpy(temp, "default");
        } else {
-           strcpy(temp, the_color_names[color]);
+           sprintf(temp, "%.*s", 16, the_color_names[color]);
        }
        printw("%-*.*s", width, width, temp);
     }
@@ -2182,7 +2183,7 @@ wide_color_test(void)
     bool opt_wide = FALSE;
     bool opt_nums = FALSE;
     bool opt_xchr = FALSE;
-    wchar_t buffer[10];
+    wchar_t buffer[80];
     WINDOW *helpwin;
 
     if (COLORS * COLORS == COLOR_PAIRS) {
@@ -2243,7 +2244,7 @@ wide_color_test(void)
 
            if (row >= 0 && move(row, col) != ERR) {
                init_pair(pair, InxToFG(i), InxToBG(i));
-               color_set(pair, NULL);
+               (void) color_set(pair, NULL);
                if (opt_acsc)
                    attr_on((attr_t) A_ALTCHARSET, NULL);
                if (opt_bold)
@@ -3727,7 +3728,7 @@ show_2_wacs(int n, const char *name, const char *code, attr_t attr, short pair)
 
     MvPrintw(row, col, "%*s : ", COLS / 4, name);
     (void) attr_set(attr, pair, 0);
-    addstr(strcpy(temp, code));
+    addstr(strncpy(temp, code, 20));
     (void) attr_set(A_NORMAL, 0, 0);
     return n + 1;
 }
@@ -4243,7 +4244,8 @@ getwindow(void)
     outerbox(ul, lr, TRUE);
     refresh();
 
-    wrefresh(rwindow);
+    if (rwindow != 0)
+       wrefresh(rwindow);
 
     move(0, 0);
     clrtoeol();
@@ -5758,10 +5760,9 @@ display_form(FORM * f)
        set_form_sub(f, derwin(w, rows, cols, 1, 2));
        box(w, 0, 0);
        keypad(w, TRUE);
+       if (post_form(f) != E_OK)
+           wrefresh(w);
     }
-
-    if (post_form(f) != E_OK)
-       wrefresh(w);
 }
 
 static void
@@ -5785,55 +5786,60 @@ edit_secure(FIELD * me, int c)
     if (field_info(me, &rows, &cols, &frow, &fcol, &nrow, &nbuf) == E_OK
        && nbuf > 0) {
        char *source = field_buffer(me, 1);
-       char temp[80];
+       size_t have = (source ? strlen(source) : 0) + 1;
+       size_t need = 80 + have;
+       char *temp = malloc(need);
        long len;
 
-       strcpy(temp, source ? source : "");
-       len = (long) (char *) field_userptr(me);
-       if (c <= KEY_MAX) {
-           if (isgraph(c) && (len + 1) < (int) sizeof(temp)) {
-               temp[len++] = (char) c;
-               temp[len] = 0;
-               set_field_buffer(me, 1, temp);
-               c = '*';
-           } else {
-               c = 0;
-           }
-       } else {
-           switch (c) {
-           case REQ_BEG_FIELD:
-           case REQ_CLR_EOF:
-           case REQ_CLR_EOL:
-           case REQ_DEL_LINE:
-           case REQ_DEL_WORD:
-           case REQ_DOWN_CHAR:
-           case REQ_END_FIELD:
-           case REQ_INS_CHAR:
-           case REQ_INS_LINE:
-           case REQ_LEFT_CHAR:
-           case REQ_NEW_LINE:
-           case REQ_NEXT_WORD:
-           case REQ_PREV_WORD:
-           case REQ_RIGHT_CHAR:
-           case REQ_UP_CHAR:
-               c = 0;          /* we don't want to do inline editing */
-               break;
-           case REQ_CLR_FIELD:
-               if (len) {
-                   temp[0] = 0;
+       if (temp != 0) {
+           strncpy(temp, source ? source : "", have + 1);
+           len = (long) (char *) field_userptr(me);
+           if (c <= KEY_MAX) {
+               if (isgraph(c) && (len + 1) < (int) sizeof(temp)) {
+                   temp[len++] = (char) c;
+                   temp[len] = 0;
                    set_field_buffer(me, 1, temp);
+                   c = '*';
+               } else {
+                   c = 0;
                }
-               break;
-           case REQ_DEL_CHAR:
-           case REQ_DEL_PREV:
-               if (len) {
-                   temp[--len] = 0;
-                   set_field_buffer(me, 1, temp);
+           } else {
+               switch (c) {
+               case REQ_BEG_FIELD:
+               case REQ_CLR_EOF:
+               case REQ_CLR_EOL:
+               case REQ_DEL_LINE:
+               case REQ_DEL_WORD:
+               case REQ_DOWN_CHAR:
+               case REQ_END_FIELD:
+               case REQ_INS_CHAR:
+               case REQ_INS_LINE:
+               case REQ_LEFT_CHAR:
+               case REQ_NEW_LINE:
+               case REQ_NEXT_WORD:
+               case REQ_PREV_WORD:
+               case REQ_RIGHT_CHAR:
+               case REQ_UP_CHAR:
+                   c = 0;      /* we don't want to do inline editing */
+                   break;
+               case REQ_CLR_FIELD:
+                   if (len) {
+                       temp[0] = 0;
+                       set_field_buffer(me, 1, temp);
+                   }
+                   break;
+               case REQ_DEL_CHAR:
+               case REQ_DEL_PREV:
+                   if (len) {
+                       temp[--len] = 0;
+                       set_field_buffer(me, 1, temp);
+                   }
+                   break;
                }
-               break;
            }
+           set_field_userptr(me, (void *) len);
+           free(temp);
        }
-       set_field_userptr(me, (void *) len);
     }
     return c;
 }
@@ -6826,7 +6832,14 @@ main(int argc, char *argv[])
 #ifdef NCURSES_VERSION
        case 'a':
            assumed_colors = TRUE;
-           sscanf(optarg, "%d,%d", &default_fg, &default_bg);
+           switch (sscanf(optarg, "%d,%d", &default_fg, &default_bg)) {
+           case 0:
+               default_fg = COLOR_WHITE;
+               /* FALLTHRU */
+           case 1:
+               default_bg = COLOR_BLACK;
+               break;
+           }
            break;
        case 'd':
            default_colors = TRUE;