tfixed a memory leak & segfault in tresize. - st - [fork] customized build of s… | |
git clone git://src.adamsgaard.dk/st | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 129bcd7586968ed882e41c0df76c5c0c0c414e6d | |
parent 059d2ba264f8ee2f6fbdb4d7199b611433ad8a72 | |
Author: Aurélien Aptel <[email protected]> | |
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(-) | |
--- | |
diff --git a/st.c b/st.c | |
t@@ -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; | |
t@@ -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; | |
} | |
t@@ -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 */ | |
t@@ -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; |