Commits

Anonymous committed bc767fc

fixed crash (check if t->w exists), and added patch for easier reading

Comments (0)

Files changed (2)

 		bufread(&t->file->b, q0, r, q1-q0);
 		m->data = runetobyte(r, q1-q0);
 		m->ndata = strlen(m->data);
-		if (t->w->backwards) {
+		if (t->w != nil && t->w->backwards) {
 			pat = runemalloc(q1-q0+1);
 			for (eval = 0; eval < q1-q0; eval++)
 				pat[eval] = r[eval];
 
 	/* interpret alphanumeric string ourselves */
 	if(expanded == FALSE) {
-		if (t->w->backwards) {
+		if (t->w != nil && t->w->backwards) {
 			free(pat);
 		}
 		return;
 	if(e.name || e.u.at)
 		openfile(t, &e);
 	else{
-		if (t->w->backwards) {
+		if (t->w != nil && t->w->backwards) {
 			ra = range(e.q0, e.q1);
 			ra = regexp(TRUE, t, range(-1,-1), ra, pat, '-', &eval);
 			if (ra.q0 < 0 || ra.q1 < 0) {
 	}
 
    Return:
-	if (t->w->backwards) {
+	if (t->w != nil && t->w->backwards) {
 		free(pat);
 	}
 	free(e.name);
 			e->jump = FALSE;
 	}
 
-	if(expandfile(t, q0, q1, e))
+	if(expandfile(t, q0, q1, e)) 
 		return TRUE;
 
 	if(q0 == q1){
+diff -r 4f495f8070af src/cmd/acme/dat.h
+--- a/src/cmd/acme/dat.h	Mon Sep 12 12:36:30 2011 -0400
++++ b/src/cmd/acme/dat.h	Wed Nov 23 16:26:45 2011 +0100
+@@ -271,6 +271,7 @@
+ 	int		taglines;
+ 	Rectangle	tagtop;
+ 	QLock	editoutlk;
++	int		backwards;
+ };
+ 
+ void	wininit(Window*, Window*, Rectangle);
+diff -r 4f495f8070af src/cmd/acme/exec.c
+--- a/src/cmd/acme/exec.c	Mon Sep 12 12:36:30 2011 -0400
++++ b/src/cmd/acme/exec.c	Wed Nov 23 16:26:45 2011 +0100
+@@ -49,6 +49,7 @@
+ void	paste(Text*, Text*, Text*, int, int, Rune*, int);
+ void	put(Text*, Text*, Text*, int, int, Rune*, int);
+ void	putall(Text*, Text*, Text*, int, int, Rune*, int);
++void	rev(Text*, Text*, Text*, int, int, Rune*, int);
+ void	sendx(Text*, Text*, Text*, int, int, Rune*, int);
+ void	sort(Text*, Text*, Text*, int, int, Rune*, int);
+ void	tab(Text*, Text*, Text*, int, int, Rune*, int);
+@@ -87,6 +88,7 @@
+ static Rune LPut[] = { 'P', 'u', 't', 0 };
+ static Rune LPutall[] = { 'P', 'u', 't', 'a', 'l', 'l', 0 };
+ static Rune LRedo[] = { 'R', 'e', 'd', 'o', 0 };
++static Rune LRev[] = { 'R', 'e', 'v', 0 };
+ static Rune LSend[] = { 'S', 'e', 'n', 'd', 0 };
+ static Rune LSnarf[] = { 'S', 'n', 'a', 'r', 'f', 0 };
+ static Rune LSort[] = { 'S', 'o', 'r', 't', 0 };
+@@ -118,6 +120,7 @@
+ 	{ LPut,		put,		FALSE,	XXX,		XXX		},
+ 	{ LPutall,		putall,	FALSE,	XXX,		XXX		},
+ 	{ LRedo,		undo,	FALSE,	FALSE,	XXX		},
++	{ LRev,		rev,	FALSE,	FALSE,	XXX		},
+ 	{ LSend,		sendx,	TRUE,	XXX,		XXX		},
+ 	{ LSnarf,		cut,		FALSE,	TRUE,	FALSE	},
+ 	{ LSort,		sort,		FALSE,	XXX,		XXX		},
+@@ -402,6 +405,22 @@
+ }
+ 
+ void
++rev(Text *et, Text *_1, Text *_2, int _3, int _4, Rune *_5, int _6)
++{
++	USED(_1);
++	USED(_2);
++	USED(_3);
++	USED(_4);
++	USED(_4);
++	USED(_6);
++
++	if (et->w->backwards) 
++		et->w->backwards = 0;
++	else 
++		et->w->backwards = 1;
++}
++
++void
+ sort(Text *et, Text *_0, Text *_1, int _2, int _3, Rune *_4, int _5)
+ {
+ 	USED(_0);
+diff -r 4f495f8070af src/cmd/acme/fns.h
+--- a/src/cmd/acme/fns.h	Mon Sep 12 12:36:30 2011 -0400
++++ b/src/cmd/acme/fns.h	Wed Nov 23 16:26:45 2011 +0100
+@@ -83,6 +83,7 @@
+ void *erealloc(void*, uint);
+ char	*estrdup(char*);
+ Range		address(uint, Text*, Range, Range, void*, uint, uint, int (*)(void*, uint),  int*, uint*);
++Range	regexp(uint showerr, Text *t, Range lim, Range r, Rune *pat, int dir, int *foundp);
+ int		rxexecute(Text*, Rune*, uint, uint, Rangeset*);
+ int		rxbexecute(Text*, uint, Rangeset*);
+ Window*	makenewwindow(Text *t);
+diff -r 4f495f8070af src/cmd/acme/look.c
+--- a/src/cmd/acme/look.c	Mon Sep 12 12:36:30 2011 -0400
++++ b/src/cmd/acme/look.c	Wed Nov 23 16:26:45 2011 +0100
+@@ -89,6 +89,10 @@
+ 	Plumbmsg *m;
+ 	Runestr dir;
+ 	char buf[32];
++	// for backwards search
++	int eval;
++	Range ra;
++	Rune *pat;
+ 
+ 	ct = seltext;
+ 	if(ct == nil)
+@@ -182,6 +186,12 @@
+ 		bufread(&t->file->b, q0, r, q1-q0);
+ 		m->data = runetobyte(r, q1-q0);
+ 		m->ndata = strlen(m->data);
++		if (t->w != nil && t->w->backwards) {
++			pat = runemalloc(q1-q0+1);
++			for (eval = 0; eval < q1-q0; eval++)
++				pat[eval] = r[eval];
++			pat[q1-q0] = 0;
++		}
+ 		free(r);
+ 		if(m->ndata<messagesize-1024 && plumbsendtofid(plumbsendfid, m) >= 0){
+ 			plumbfree(m);
+@@ -192,11 +202,27 @@
+ 	}
+ 
+ 	/* interpret alphanumeric string ourselves */
+-	if(expanded == FALSE)
++	if(expanded == FALSE) {
++		if (t->w != nil && t->w->backwards) {
++			free(pat);
++		}
+ 		return;
++	}
+ 	if(e.name || e.u.at)
+ 		openfile(t, &e);
+ 	else{
++		if (t->w != nil && t->w->backwards) {
++			ra = range(e.q0, e.q1);
++			ra = regexp(TRUE, t, range(-1,-1), ra, pat, '-', &eval);
++			if (ra.q0 < 0 || ra.q1 < 0) {
++				goto Return;
++			}		
++			textshow(t, ra.q0, ra.q1, 1);
++			winsettag(t->w);
++			seltext = t;
++			moveto(mousectl, addpt(frptofchar(&t->fr, t->fr.p0), Pt(4, font->height-4)));
++			goto Return;
++		}
+ 		if(t->w == nil)
+ 			return;
+ 		ct = &t->w->body;
+@@ -215,6 +241,9 @@
+ 	}
+ 
+    Return:
++	if (t->w != nil && t->w->backwards) {
++		free(pat);
++	}
+ 	free(e.name);
+ 	free(e.bname);
+ }
+@@ -640,7 +669,7 @@
+ 			e->jump = FALSE;
+ 	}
+ 
+-	if(expandfile(t, q0, q1, e))
++	if(expandfile(t, q0, q1, e)) 
+ 		return TRUE;
+ 
+ 	if(q0 == q1){
+diff -r 4f495f8070af src/cmd/acme/wind.c
+--- a/src/cmd/acme/wind.c	Mon Sep 12 12:36:30 2011 -0400
++++ b/src/cmd/acme/wind.c	Wed Nov 23 16:26:45 2011 +0100
+@@ -408,7 +408,7 @@
+ 	Rune *new, *old, *r;
+ 	uint q0, q1;
+ 	static Rune Ldelsnarf[] = { ' ', 'D', 'e', 'l', ' ',
+-		'S', 'n', 'a', 'r', 'f', 0 };
++		'S', 'n', 'a', 'r', 'f', ' ', 'R', 'e', 'v', 0 };
+ 	static Rune Lundo[] = { ' ', 'U', 'n', 'd', 'o', 0 };
+ 	static Rune Lredo[] = { ' ', 'R', 'e', 'd', 'o', 0 };
+ 	static Rune Lget[] = { ' ', 'G', 'e', 't', 0 };
+@@ -439,8 +439,8 @@
+ 	i = 0;
+ 	runemove(new+i, w->body.file->name, w->body.file->nname);
+ 	i += w->body.file->nname;
+-	runemove(new+i, Ldelsnarf, 10);
+-	i += 10;
++	runemove(new+i, Ldelsnarf, 14);
++	i += 14;
+ 	if(w->filemenu){
+ 		if(w->body.needundo || w->body.file->delta.nc>0 || w->body.ncache){
+ 			runemove(new+i, Lundo, 5);
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.