From 44f97f0cb1f3fd07c348ae634cb33c3aa74e64db Mon Sep 17 00:00:00 2001 From: cinap_lenrek Date: Mon, 2 Jul 2012 03:38:05 +0200 Subject: mothra: remove 4K snarf limit for edit panel --- sys/src/cmd/mothra/libpanel/edit.c | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) (limited to 'sys/src') diff --git a/sys/src/cmd/mothra/libpanel/edit.c b/sys/src/cmd/mothra/libpanel/edit.c index e6d46c459..f4019fa9b 100644 --- a/sys/src/cmd/mothra/libpanel/edit.c +++ b/sys/src/cmd/mothra/libpanel/edit.c @@ -49,8 +49,8 @@ void pl_drawedit(Panel *p){ sb->setscrollbar(sb, ep->t->top, ep->t->bot, ep->t->etext-ep->t->text); } void pl_snarfedit(Panel *p, int cut){ - int fd, n, s0, s1; - char *s; + int fd, n, r, s0, s1; + char *s, *x; Rune *t; if((fd=open("/dev/snarf", cut ? OWRITE|OTRUNC : OREAD))<0) @@ -68,12 +68,19 @@ void pl_snarfedit(Panel *p, int cut){ free(s); plepaste(p, 0, 0); }else{ - if((s=malloc(4096))==0){ - close(fd); - return; + n=0; + s=nil; + for(;;){ + if((x=realloc(s, n+1024)) == nil){ + free(s); + close(fd); + return; + } + s=x; + if((r = read(fd, s+n, 1024)) <= 0) + break; + n += r; } - if((n=readn(fd, s, 4096))<0) - n=0; t=runesmprint("%.*s", n, s); plepaste(p, t, runestrlen(t)); free(s); -- cgit v1.2.3