mk: avoid infinite loop when targets are repeated

Fixes "mk -f /tmp/x.mk y x" or "mk -f /tmp/x.mk" where /tmp/x.mk is:

x y x: f
	echo hi

Change-Id: I7fa87dc4750c04fdba010b990c190722b432b333
Reviewed-on: https://plan9port-review.googlesource.com/1361
Reviewed-by: Russ Cox <rsc@swtch.com>
diff --git a/src/cmd/mk/mk.h b/src/cmd/mk/mk.h
index a40e9de..ca14e9d 100644
--- a/src/cmd/mk/mk.h
+++ b/src/cmd/mk/mk.h
@@ -109,6 +109,7 @@
 #define		NORECIPE	0x0400
 #define		DELETE		0x0800
 #define		NOMINUSE	0x1000
+#define		ONLIST		0x2000
 
 typedef struct Job
 {
diff --git a/src/cmd/mk/recipe.c b/src/cmd/mk/recipe.c
index 7993e09..6032519 100644
--- a/src/cmd/mk/recipe.c
+++ b/src/cmd/mk/recipe.c
@@ -70,10 +70,15 @@
 			ww->next = newword(buf);
 			ww = ww->next;
 			if(n == node) continue;
+			if((n->flags&ONLIST) != 0)
+				continue;
+			n->flags |= ONLIST;
 			n->next = node->next;
 			node->next = n;
 		}
 	}
+	for(n = node->next; n; n = n->next)
+		n->flags &= ~ONLIST;
 	for(n = node; n; n = n->next)
 		if((n->flags&READY) == 0)
 			return(did);