From: Aurélien Aptel Date: Tue, 26 May 2009 00:21:02 +0000 (+0200) Subject: fixed a memory leak & segfault in tresize. X-Git-Url: https://git.danieliu.xyz/?a=commitdiff_plain;h=129bcd7586968ed882e41c0df76c5c0c0c414e6d;p=st.git fixed a memory leak & segfault in tresize. --- diff --git a/st.c b/st.c index c24bb1d..8ddfa8b 100644 --- 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;