git: 9front

Download patch

ref: 89ba7754f4d81234d4fa90eda5df0d62a5daa8a0
parent: a12630e8392a4aa7304a416e1314a5dd974bd16e
author: qwx <qwx@sciops.net>
date: Mon Jan 12 12:47:05 EST 2026

libregexp: treat empty strings as valid regexp

assumed behavior in awk (// and !// are valid patterns)
and other tools.

--- a/sys/man/6/regexp
+++ b/sys/man/6/regexp
@@ -91,6 +91,8 @@
 matches the beginning of a line;
 .L $
 matches the end of the line.
+An empty regular expression behaves equivalently to
+.LR ^ .
 .PP
 The 
 .B REP
--- a/sys/src/libregexp/regcomp.c
+++ b/sys/src/libregexp/regcomp.c
@@ -164,6 +164,10 @@
 	int regstrlen, maxthr;
 
 	regstrlen = utflen(regstr);
+	if(regstrlen == 0){
+		regstr = "^";
+		regstrlen = 1;
+	}
 	initplex(&plex, regstr, lit);
 	plex.nodes = calloc(sizeof(*plex.nodes), regstrlen*2);
 	if(plex.nodes == nil)
--- a/sys/src/libregexp/test/basic.rc
+++ b/sys/src/libregexp/test/basic.rc
@@ -42,6 +42,10 @@
 #  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 #  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
+M	'^'	'abracadabracadabra'	'(0,0)'
+M	'^'	''	'(0,0)'
+M	''	'abracadabracadabra'	'(0,0)'
+M	''	''	'(0,0)'
 M	'abracadabra$'	'abracadabracadabra'	'(7,18)'
 M	'a...b'	'abababbb'	'(2,7)'
 M	'XXXXXX'	'..XXXXXX'	'(2,8)'
--