diff options
author | cinap_lenrek <cinap_lenrek@gmx.de> | 2012-07-02 03:38:05 +0200 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@gmx.de> | 2012-07-02 03:38:05 +0200 |
commit | 44f97f0cb1f3fd07c348ae634cb33c3aa74e64db (patch) | |
tree | f1c6259833eead02f91c9534f728aa90e1c8c39f /sys/src | |
parent | 200216313c59328fbcd1c8f6af6f4ff5dcf3ca68 (diff) |
mothra: remove 4K snarf limit for edit panel
Diffstat (limited to 'sys/src')
-rw-r--r-- | sys/src/cmd/mothra/libpanel/edit.c | 21 |
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); |