fixed a memory leak & segfault in tresize.
authorAurélien Aptel <aurelien.aptel@gmail.com>
Tue, 26 May 2009 00:21:02 +0000 (02:21 +0200)
committerAurélien Aptel <aurelien.aptel@gmail.com>
Tue, 26 May 2009 00:21:02 +0000 (02:21 +0200)
st.c

diff --git a/st.c b/st.c
index c24bb1d..8ddfa8b 100644 (file)
--- a/st.c
+++ b/st.c
@@ -573,7 +573,7 @@ void
 tputc(char c) {
        static int inesc = 0;
 
-       dump(c);
+       //dump(c);
        /* start of escseq */
        if(c == '\033')
                escreset(), inesc = 1;
@@ -636,20 +636,24 @@ tresize(int col, int row) {
 
        if(col < 1 || row < 1)
                return;
+    /* alloc */
        line = calloc(row, sizeof(Line));
        for(i = 0 ; i < row; i++)
                line[i] = calloc(col, sizeof(Glyph));
-       for(i = 0 ; i < minrow; i++) {
-               memcpy(line[i], term.line[i], mincol * sizeof(Glyph));
-               free(term.line[i]);
-       }
+    /* copy */
+    for(i = 0 ; i < minrow; i++)
+        memcpy(line[i], term.line[i], mincol * sizeof(Glyph));
+    /* free */
+    for(i = 0; i < term.row; i++)
+        free(term.line[i]);
        free(term.line);
+
        LIMIT(term.c.x, 0, col-1);
        LIMIT(term.c.y, 0, row-1);
        LIMIT(term.top, 0, row-1);
        LIMIT(term.bot, 0, row-1);
-       //    if(term.bot == term.row-1)
-       term.bot = row-1;
+
+    term.bot = row-1;
        term.line = line;
        term.col = col, term.row = row;
 }
@@ -775,7 +779,10 @@ xcursor(int mode) {
        static int oldx = 0;
        static int oldy = 0;
        Glyph g = {' ', ATnone, DefaultBG, DefaultCS, 0};
-
+    
+    LIMIT(oldx, 0, term.col-1);
+       LIMIT(oldy, 0, term.row-1);
+    
        if(term.line[term.c.y][term.c.x].state & CRset)
                g.c = term.line[term.c.y][term.c.x].c;
        /* remove the old cursor */
@@ -859,7 +866,7 @@ resize(XEvent *e) {
        col = e->xconfigure.width / xw.cw;
        row = e->xconfigure.height / xw.ch;
     
-       if(term.col != col && term.row != row) {
+       if(term.col != col || term.row != row) {
                tresize(col, row);
                ttyresize(col, row);
                xw.w = e->xconfigure.width;