Update libregexp with recent bug fixes from Plan 9.
diff --git a/src/libregexp/regaux.c b/src/libregexp/regaux.c
index 956c1eb..b854b5a 100644
--- a/src/libregexp/regaux.c
+++ b/src/libregexp/regaux.c
@@ -30,19 +30,27 @@
 extern Relist*
 _renewthread(Relist *lp,	/* _relist to add to */
 	Reinst *ip,		/* instruction to add */
+	int ms,
 	Resublist *sep)		/* pointers to subexpressions */
 {
 	Relist *p;
 
 	for(p=lp; p->inst; p++){
 		if(p->inst == ip){
-			if((sep)->m[0].s.sp < p->se.m[0].s.sp)
-				p->se = *sep;
+			if(sep->m[0].s.sp < p->se.m[0].s.sp){
+				if(ms > 1)
+					p->se = *sep;
+				else
+					p->se.m[0] = sep->m[0];
+			}
 			return 0;
 		}
 	}
 	p->inst = ip;
-	p->se = *sep;
+	if(ms > 1)
+		p->se = *sep;
+	else
+		p->se.m[0] = sep->m[0];
 	(++p)->inst = 0;
 	return p;
 }
@@ -54,6 +62,7 @@
 extern Relist*
 _renewemptythread(Relist *lp,	/* _relist to add to */
 	Reinst *ip,		/* instruction to add */
+	int ms,
 	char *sp)		/* pointers to subexpressions */
 {
 	Relist *p;
@@ -61,16 +70,43 @@
 	for(p=lp; p->inst; p++){
 		if(p->inst == ip){
 			if(sp < p->se.m[0].s.sp) {
-				memset((void *)&p->se, 0, sizeof(p->se));
+				if(ms > 1)
+					memset(&p->se, 0, sizeof(p->se));
 				p->se.m[0].s.sp = sp;
 			}
 			return 0;
 		}
 	}
 	p->inst = ip;
-	memset((void *)&p->se, 0, sizeof(p->se));
+	if(ms > 1)
+		memset(&p->se, 0, sizeof(p->se));
 	p->se.m[0].s.sp = sp;
 	(++p)->inst = 0;
 	return p;
 }
 
+extern Relist*
+_rrenewemptythread(Relist *lp,	/* _relist to add to */
+	Reinst *ip,		/* instruction to add */
+	int ms,
+	Rune *rsp)		/* pointers to subexpressions */
+{
+	Relist *p;
+
+	for(p=lp; p->inst; p++){
+		if(p->inst == ip){
+			if(rsp < p->se.m[0].s.rsp) {
+				if(ms > 1)
+					memset(&p->se, 0, sizeof(p->se));
+				p->se.m[0].s.rsp = rsp;
+			}
+			return 0;
+		}
+	}
+	p->inst = ip;
+	if(ms > 1)
+		memset(&p->se, 0, sizeof(p->se));
+	p->se.m[0].s.rsp = rsp;
+	(++p)->inst = 0;
+	return p;
+}