acme: add -m option and avoid looking in the mirror
diff --git a/src/cmd/acme/acme.c b/src/cmd/acme/acme.c
index 87673cd..07ce503 100644
--- a/src/cmd/acme/acme.c
+++ b/src/cmd/acme/acme.c
@@ -28,6 +28,7 @@
 int		snarffd = -1;
 int		mainpid;
 int		swapscrollbuttons = FALSE;
+char		*mtpt;
 
 enum{
 	NSnarf = 1000	/* less than 1024, I/O buffer size */
@@ -106,6 +107,11 @@
 		if(loadfile == nil)
 			goto Usage;
 		break;
+	case 'm':
+		mtpt = ARGF();
+		if(mtpt == nil)
+			goto Usage;
+		break;
 	case 'r':
 		swapscrollbuttons = TRUE;
 		break;
@@ -1056,3 +1062,13 @@
 	free(r);
 	free(s);
 }
+
+int
+ismtpt(char *file)
+{
+	int n;
+
+	/* This is not foolproof, but it will stop a lot of them. */
+	n = strlen(mtpt);
+	return strncmp(file, mtpt, n) == 0 && ((n > 0 && mtpt[n-1] == '/') || file[n] == '/' || file[n] == 0);
+}
diff --git a/src/cmd/acme/dat.h b/src/cmd/acme/dat.h
index a0d5cef..93af258 100644
--- a/src/cmd/acme/dat.h
+++ b/src/cmd/acme/dat.h
@@ -542,6 +542,7 @@
 int			messagesize;		/* negotiated in 9P version setup */
 int			globalautoindent;
 int			dodollarsigns;
+char*		mtpt;
 
 enum
 {
diff --git a/src/cmd/acme/fns.h b/src/cmd/acme/fns.h
index 34d561c..c714175 100644
--- a/src/cmd/acme/fns.h
+++ b/src/cmd/acme/fns.h
@@ -102,3 +102,5 @@
 #define	runemalloc(a)		(Rune*)emalloc((a)*sizeof(Rune))
 #define	runerealloc(a, b)	(Rune*)erealloc((a), (b)*sizeof(Rune))
 #define	runemove(a, b, c)	memmove((a), (b), (c)*sizeof(Rune))
+
+int	ismtpt(char*);
diff --git a/src/cmd/acme/fsys.c b/src/cmd/acme/fsys.c
index 9a7dbd1..b5ed8d6 100644
--- a/src/cmd/acme/fsys.c
+++ b/src/cmd/acme/fsys.c
@@ -121,7 +121,7 @@
 	initfcall();
 	if(pipe(p) < 0)
 		error("can't create pipe");
-	if(post9pservice(p[0], "acme") < 0)
+	if(post9pservice(p[0], "acme", mtpt) < 0)
 		error("can't post service");
 	sfd = p[1];
 	fmtinstall('F', fcallfmt);
diff --git a/src/cmd/acme/look.c b/src/cmd/acme/look.c
index 66c6c66..2ca2061 100644
--- a/src/cmd/acme/look.c
+++ b/src/cmd/acme/look.c
@@ -620,7 +620,7 @@
 	if(w != nil)
 		goto Isfile;
 	/* if it's the name of a file, it's a file */
-	if(access(e->bname, 0) < 0){
+	if(ismtpt(e->bname) || access(e->bname, 0) < 0){
 		free(e->bname);
 		e->bname = nil;
 		goto Isntfile;
diff --git a/src/cmd/acme/text.c b/src/cmd/acme/text.c
index ddb3527..f972b6a 100644
--- a/src/cmd/acme/text.c
+++ b/src/cmd/acme/text.c
@@ -200,6 +200,10 @@
 		warning(nil, "empty directory name");
 		return 0;
 	}
+	if(ismtpt(file)){
+		warning(nil, "will not open self mount point %s\n", file);
+		return 0;
+	}
 	fd = open(file, OREAD);
 	if(fd < 0){
 		warning(nil, "can't open %s: %r\n", file);