shithub: riscv

Download patch

ref: 7b36a7e1a9056bc8046d161c81aee008854daadf
parent: fc8734dac158a7a05b365deef19bd998afa1ab9a
parent: 118cf5e36a7f90d4a9dae015f029f35fe06fccf0
author: cinap_lenrek <cinap_lenrek@gmx.de>
date: Tue Nov 5 03:01:43 EST 2013

merge

--- a/sys/src/cmd/rio/wind.c
+++ b/sys/src/cmd/rio/wind.c
@@ -569,11 +569,9 @@
 	if(w->q0<w->nr && w->r[w->q0]>' ')	/* must be at end of word */
 		return;
 	nstr = windfilewidth(w, w->q0, TRUE);
-	str = runemalloc(nstr);
-	runemove(str, w->r+(w->q0-nstr), nstr);
+	str = w->r+(w->q0-nstr);
 	npath = windfilewidth(w, w->q0-nstr, FALSE);
-	path = runemalloc(npath);
-	runemove(path, w->r+(w->q0-nstr-npath), npath);
+	path = w->r+(w->q0-nstr-npath);
 
 	/* is path rooted? if not, we need to make it relative to window path */
 	if(npath>0 && path[0]=='/')
@@ -585,6 +583,8 @@
 			root = w->dir;
 		dir = smprint("%s/%.*S", root, npath, path);
 	}
+	if(dir == nil)
+		return;
 
 	/* run in background, winctl will collect the result on w->complete chan */
 	job = emalloc(sizeof *job);
@@ -593,9 +593,6 @@
 	job->win = w;
 	incref(w);
 	proccreate(completeproc, job, STACK);
-
-	free(path);
-	free(str);
 }
 
 void
@@ -1640,10 +1637,8 @@
 		fixup = 1;	/* frdelete can leave end of last line in wrong selection mode; it doesn't know what follows */
 	}else if(a<0 && -a<w->nchars){
 		n = w->org - org;
-		r = runemalloc(n);
-		runemove(r, w->r+org, n);
+		r = w->r+org;
 		frinsert(w, r, r+n, 0);
-		free(r);
 	}else
 		frdelete(w, 0, w->nchars);
 	w->org = org;
@@ -1764,16 +1759,14 @@
 	Rune *rp;
 	int i, n, m, nl;
 
-	if(w->lastlinefull)
-		return;
-	rp = malloc(messagesize);
-	do{
+	while(w->lastlinefull == FALSE){
 		n = w->nr-(w->org+w->nchars);
 		if(n == 0)
 			break;
 		if(n > 2000)	/* educated guess at reasonable amount */
 			n = 2000;
-		runemove(rp, w->r+(w->org+w->nchars), n);
+		rp = w->r+(w->org+w->nchars);
+
 		/*
 		 * it's expensive to frinsert more than we need, so
 		 * count newlines.
@@ -1788,8 +1781,7 @@
 			}
 		}
 		frinsert(w, rp, rp+i, w->nchars);
-	}while(w->lastlinefull == FALSE);
-	free(rp);
+	}
 }
 
 char*
--