git: 9front

Download patch

ref: 0843a94f9a747e9cfb6266e74a90220e487e8f61
parent: a2d49dbe3e11e6468208b3f3cd7461911eb815e7
author: cinap_lenrek <cinap_lenrek@gmx.de>
date: Sun Jul 1 23:38:05 EDT 2012

mothra: remove 4K snarf limit for edit panel

--- a/sys/src/cmd/mothra/libpanel/edit.c
+++ b/sys/src/cmd/mothra/libpanel/edit.c
@@ -49,8 +49,8 @@
 		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 @@
 		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);
--