summaryrefslogtreecommitdiff
path: root/sys/src/cmd/mothra/libpanel/textwin.c
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@gmx.de>2013-10-08 19:58:55 +0200
committercinap_lenrek <cinap_lenrek@gmx.de>2013-10-08 19:58:55 +0200
commitbc18faccde776934bb314549feb8e5ba91fda053 (patch)
treea7dff7b6f2d9a4d4052bd9163ef2eef55180b256 /sys/src/cmd/mothra/libpanel/textwin.c
parent1c1bef69aae8a6d6758a18abc14f45c674487ece (diff)
libpanel: fix memory corruption bug in plinitentry(), add pl_erealloc()
Diffstat (limited to 'sys/src/cmd/mothra/libpanel/textwin.c')
-rw-r--r--sys/src/cmd/mothra/libpanel/textwin.c13
1 files changed, 3 insertions, 10 deletions
diff --git a/sys/src/cmd/mothra/libpanel/textwin.c b/sys/src/cmd/mothra/libpanel/textwin.c
index 94479f0c8..94ec29812 100644
--- a/sys/src/cmd/mothra/libpanel/textwin.c
+++ b/sys/src/cmd/mothra/libpanel/textwin.c
@@ -66,11 +66,7 @@ void tw_storeloc(Textwin *t, int l, Point p){
int nloc;
if(l>=t->eloc-t->loc){
nloc=l+SLACK;
- t->loc=realloc(t->loc, nloc*sizeof(Point));
- if(t->loc==0){
- fprint(2, "No mem in tw_storeloc\n");
- exits("no mem");
- }
+ t->loc=pl_erealloc(t->loc, nloc*sizeof(Point));
t->eloc=t->loc+nloc;
}
t->loc[l]=p;
@@ -390,16 +386,13 @@ void tw_relocate(Textwin *t, int first, int last, Point dst){
*/
void twreplace(Textwin *t, int r0, int r1, Rune *ins, int nins){
int olen, nlen, tlen, dtop;
- Rune *ntext;
olen=t->etext-t->text;
nlen=olen+nins-(r1-r0);
tlen=t->eslack-t->text;
if(nlen>tlen){
tlen=nlen+SLACK;
- if((ntext=realloc(t->text, tlen*sizeof(Rune)))==0)
- return;
- t->text=ntext;
- t->eslack=ntext+tlen;
+ t->text=pl_erealloc(t->text, tlen*sizeof(Rune));
+ t->eslack=t->text+tlen;
}
if(olen!=nlen)
memmove(t->text+r0+nins, t->text+r1, (olen-r1)*sizeof(Rune));