fixed a memory leak & segfault in tresize. - st - Personal fork of st
 (HTM) git clone git://git.drkhsh.at/st.git
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 129bcd7586968ed882e41c0df76c5c0c0c414e6d
 (DIR) parent 059d2ba264f8ee2f6fbdb4d7199b611433ad8a72
 (HTM) Author: Aurélien Aptel <aurelien.aptel@gmail.com>
       Date:   Tue, 26 May 2009 02:21:02 +0200
       
       fixed a memory leak & segfault in tresize.
       
       Diffstat:
         M st.c                                |      25 ++++++++++++++++---------
       
       1 file changed, 16 insertions(+), 9 deletions(-)
       ---
 (DIR) diff --git 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;