summaryrefslogtreecommitdiff
path: root/sys/src
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@gmx.de>2012-07-02 03:38:05 +0200
committercinap_lenrek <cinap_lenrek@gmx.de>2012-07-02 03:38:05 +0200
commit44f97f0cb1f3fd07c348ae634cb33c3aa74e64db (patch)
treef1c6259833eead02f91c9534f728aa90e1c8c39f /sys/src
parent200216313c59328fbcd1c8f6af6f4ff5dcf3ca68 (diff)
mothra: remove 4K snarf limit for edit panel
Diffstat (limited to 'sys/src')
-rw-r--r--sys/src/cmd/mothra/libpanel/edit.c21
1 files changed, 14 insertions, 7 deletions
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);