allocate just the right amount of memory for title bar
authorMischa POSLAWSKY <netris@shiar.org>
Sun, 4 Mar 2007 05:32:54 +0000 (06:32 +0100)
committerMischa POSLAWSKY <netris@shiar.org>
Sun, 4 Mar 2007 05:32:54 +0000 (06:32 +0100)
Should prevent truncation on terminals over 254 characters wide.

curses.c

index bb3834eaab3803b00b829ec177f5eb8f23db9373..11fac6e1f132bc2491f9b1dfa4f95370e8478585 100644 (file)
--- a/curses.c
+++ b/curses.c
@@ -202,7 +202,7 @@ void OutputTermStr(char *str, int flush)
 void DrawTitle(void)
 {
        int rows, cols;
-       char s[255];
+       char *s;
 
 #ifdef HAVE_NCURSES
        attrset(A_REVERSE);
@@ -210,12 +210,15 @@ void DrawTitle(void)
        standout();
 #endif
        getmaxyx(stdscr, rows, cols);
+       s = malloc(cols + 1);
        sprintf(s, " " MSG_TITLE " %s", version_string);
-       memset(&s[strlen(s)], ' ', 254 - strlen(s));
-       if (cols > strlen(MSG_TITLE) + 2 + strlen(version_string) + 1 + strlen(MSG_TITLESUB))
+       const int titlelen = strlen(s);
+       memset(&s[titlelen], ' ', cols - strlen(MSG_TITLE)); // pad
+       if (cols > titlelen + 1 + strlen(MSG_TITLESUB))
                memcpy(&s[cols - 1 - strlen(MSG_TITLESUB)], MSG_TITLESUB, sizeof(MSG_TITLESUB) - 1);
        memcpy(&s[cols], "\0", 1);
        mvaddstr(0, 0, s);
+       free(s);
        standend();     //normal text
 }