Module Name:    othersrc
Committed By:   agc
Date:           Fri Feb 24 19:01:11 UTC 2023

Modified Files:
        othersrc/external/bsd/agcre/bin: Makefile
        othersrc/external/bsd/agcre/dist: agcre.c agcre.h
        othersrc/external/bsd/agcre/dist/tests: 54.expected 62.expected
        othersrc/external/bsd/agcre/lib: Makefile
Added Files:
        othersrc/external/bsd/agcre: namespace.mk

Log Message:
Update agcre (yet another regexp library) to version 20230224

+ revamp the reverse searching functionality
        + bug fixes
        + don't terminate searches too early
+ update namespace protection to just use simple definitions
+ bump version to 20230224


To generate a diff of this commit:
cvs rdiff -u -r0 -r1.1 othersrc/external/bsd/agcre/namespace.mk
cvs rdiff -u -r1.1 -r1.2 othersrc/external/bsd/agcre/bin/Makefile
cvs rdiff -u -r1.2 -r1.3 othersrc/external/bsd/agcre/dist/agcre.c
cvs rdiff -u -r1.4 -r1.5 othersrc/external/bsd/agcre/dist/agcre.h
cvs rdiff -u -r1.3 -r1.4 othersrc/external/bsd/agcre/dist/tests/54.expected
cvs rdiff -u -r1.2 -r1.3 othersrc/external/bsd/agcre/dist/tests/62.expected
cvs rdiff -u -r1.3 -r1.4 othersrc/external/bsd/agcre/lib/Makefile

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: othersrc/external/bsd/agcre/bin/Makefile
diff -u othersrc/external/bsd/agcre/bin/Makefile:1.1 othersrc/external/bsd/agcre/bin/Makefile:1.2
--- othersrc/external/bsd/agcre/bin/Makefile:1.1	Wed Aug 16 23:38:13 2017
+++ othersrc/external/bsd/agcre/bin/Makefile	Fri Feb 24 19:01:10 2023
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile,v 1.1 2017/08/16 23:38:13 agc Exp $
+# $NetBSD: Makefile,v 1.2 2023/02/24 19:01:10 agc Exp $
 
 .include <bsd.own.mk>
 
@@ -9,6 +9,8 @@ CPPFLAGS+=	-I${DIST}
 MAN=	agcre.1
 WARNS=	5
 
+.sinclude "../namespace.mk"
+
 DIST=	${.CURDIR}/../dist
 .PATH: ${DIST}
 

Index: othersrc/external/bsd/agcre/dist/agcre.c
diff -u othersrc/external/bsd/agcre/dist/agcre.c:1.2 othersrc/external/bsd/agcre/dist/agcre.c:1.3
--- othersrc/external/bsd/agcre/dist/agcre.c:1.2	Sat Dec  4 01:54:51 2021
+++ othersrc/external/bsd/agcre/dist/agcre.c	Fri Feb 24 19:01:10 2023
@@ -223,6 +223,7 @@ static int unicode_isOther_Uppercase(uin
 static int unicode_isPattern_White_Space(uint32_t /*ch*/);
 static int unicode_isalnum(uint32_t /*ch*/);
 static int unicode_isalpha(uint32_t /*ch*/);
+static int unicode_ispunct2(uint32_t /*ch*/);
 static int unicode_isblank(uint32_t /*ch*/);
 static int unicode_iscntrl(uint32_t /*ch*/);
 static int unicode_isdigit(uint32_t /*ch*/);
@@ -233,7 +234,7 @@ static int unicode_ispunct(uint32_t /*ch
 static int unicode_isspace(uint32_t /*ch*/);
 static int unicode_isupper(uint32_t /*ch*/);
 static int unicode_isxdigit(uint32_t /*ch*/);
-static int unicode_isident(uint32_t /*ch*/);
+static int unicode_isword(uint32_t /*ch*/);
 static uint32_t unicode_tolower(uint32_t /*ch*/);
 static uint32_t unicode_toupper(uint32_t /*ch*/);
 
@@ -417,7 +418,7 @@ emit(re_t *re, retoken_t *tok)
 			(tok->ch == 'd' || tok->ch == 'D') ? unicode_isdigit :
 			(tok->ch == 'p' || tok->ch == 'P') ? unicode_isprint :
 			(tok->ch == 's' || tok->ch == 'S') ? unicode_isspace :
-								unicode_isident,
+								unicode_isword,
 			unicode_isupper(tok->ch));
 		re->pc++;
 		return 1;
@@ -1169,16 +1170,16 @@ isendline(re_t *re, input_t *in)
 static inline int
 isbegword(re_t *re, input_t *in)
 {
-	return (isbegline(re, in) || !unicode_isident(in->prevch)) &&
-		unicode_isident(in->ch);
+	return (isbegline(re, in) || !unicode_isword(in->prevch)) &&
+		unicode_isword(in->ch);
 }
 
 /* return 1 at end of words */
 static inline int
 isendword(re_t *re, input_t *in)
 {
-	return (isendline(re, in) || (in->c > in->so && unicode_isident(in->prevch))) &&
-		(!unicode_isident(in->ch));
+	return (isendline(re, in) || (in->c > in->so && unicode_isword(in->prevch))) &&
+		(!unicode_isword(in->ch));
 }
 
 /* do the chars match? */
@@ -1577,10 +1578,6 @@ rec_posix_class(input_t *in, set_t *set)
 		set_add_callback(set, unicode_isgraph, 0);
 		in->c += 8;
 		return 1;
-	case /* ":ident:]" */ 0x8a1572f1:
-		set_add_callback(set, unicode_isident, 0);
-		in->c += 8;
-		return 1;
 	case /* ":lower:]" */ 0x8bfc6af8:
 		set_add_callback(set, unicode_islower, 0);
 		in->c += 8;
@@ -1593,6 +1590,10 @@ rec_posix_class(input_t *in, set_t *set)
 		set_add_callback(set, unicode_ispunct, 0);
 		in->c += 8;
 		return 1;
+	case /* ":punct2:]" */ 0xf09af6aa:
+		set_add_callback(set, unicode_ispunct2, 0);
+		in->c += 9;
+		return 1;
 	case /* ":space:]" */ 0xa876bcf2:
 		set_add_callback(set, unicode_isspace, 0);
 		in->c += 8;
@@ -1605,6 +1606,10 @@ rec_posix_class(input_t *in, set_t *set)
 		set_add_callback(set, unicode_isxdigit, 0);
 		in->c += 9;
 		return 1;
+	case /* ":word:]" */ 0x96b11914:
+		set_add_callback(set, unicode_isword, 0);
+		in->c += 7;
+		return 1;
 	default:
 		return 0;
 	}
@@ -1661,7 +1666,7 @@ rec_set(input_t *in)
 					(token->ch == 'd' || token->ch == 'D') ? unicode_isdigit :
 					(token->ch == 'p' || token->ch == 'P') ? unicode_isprint :
 					(token->ch == 's' || token->ch == 'S') ? unicode_isspace :
-										unicode_isident,
+										unicode_isword,
 					unicode_isupper((uint8_t)token->ch));
 				break;
 			}
@@ -2612,11 +2617,20 @@ unicode_isxdigit(uint32_t ch)
 }
 
 static int
-unicode_isident(uint32_t ch)
+unicode_isword(uint32_t ch)
 {
 	return unicode_isalnum(ch) || ch == '_';
 }
 
+static int
+unicode_ispunct2(uint32_t ch)
+{
+	if (!unicode_isprint(ch) || unicode_isspace(ch) || unicode_isword(ch)) {
+		return 0;
+	}
+	return 1;
+}
+
 static uint32_t
 unicode_tolower(uint32_t ch)
 {
@@ -2658,14 +2672,14 @@ growspace(char **buf, size_t *size, size
 /***********************************************************/
 
 /* allocate a new structure and return it */
-AGCRE_EXPORT agcre_regex_t *
+agcre_regex_t *
 agcre_new(void)
 {
 	return calloc(1, sizeof(agcre_regex_t));
 }
 
 /* compile regular expression */
-AGCRE_EXPORT int
+int
 agcre_regcomp(agcre_regex_t *agcre, const void *vs, uint32_t flags)
 {
 	retoken_t	*tok;
@@ -2737,7 +2751,7 @@ agcre_regcomp(agcre_regex_t *agcre, cons
 #endif
 
 /* format the error nicely */
-AGCRE_EXPORT size_t
+size_t
 agcre_regerror(int errcode, const agcre_regex_t *agcre, char *errbuf, size_t size)
 {
 	re_t	*re;
@@ -2751,7 +2765,7 @@ agcre_regerror(int errcode, const agcre_
 }
 
 /* execute the regular expression */
-AGCRE_EXPORT int
+int
 agcre_regexec(agcre_regex_t *agcre, const void *vs, size_t matchc, agcre_regmatch_t *m, uint32_t flags)
 {
 	threadlist_t	*current;
@@ -2917,14 +2931,16 @@ break_for:
 }
 
 /* execute the regular expression backwards */
-AGCRE_EXPORT int
+int
 agcre_rev_regexec(agcre_regex_t *agcre, const void *vs, size_t matchc, agcre_regmatch_t *m, uint32_t flags)
 {
-	int64_t	from;
-	int64_t	to;
-	int64_t	i;
-	int	found;
-	int	this;
+	uint32_t	revflags;
+	uint32_t	bolflags;
+	int64_t		from;
+	int64_t		to;
+	int64_t		i;
+	int		found;
+	int		lastmatch;
 
 	if (flags & AGCRE_REG_STARTEND) {
 		from = m[0].rm_so;
@@ -2933,23 +2949,36 @@ agcre_rev_regexec(agcre_regex_t *agcre, 
 		from = 0;
 		to = strlen(vs);
 	}
-	flags |= (AGCRE_REG_STARTEND | AGCRE_REG_ANCHOR);
+	/* initialise here or final regexec doesn't work for "^$" */
+	lastmatch = 0;
+	m[0].rm_so = from;
+	m[0].rm_eo = to;
+	/* quick check to see if we have anything */
+	if (agcre_regexec(agcre, vs, matchc, m, flags | AGCRE_REG_STARTEND) != 0) {
+		lastmatch = m[0].rm_so;
+		return AGCRE_REG_FAILURE;
+	}
+	revflags = (AGCRE_REG_STARTEND | AGCRE_REG_ANCHOR);
 	for (found = 0, i = to - 1 ; i >= from ; --i) {
 		m[0].rm_so = i;
 		m[0].rm_eo = to;
-		if ((this = agcre_regexec(agcre, vs, matchc, m, flags)) == 0) {
+		bolflags = (i > 0) ? AGCRE_REG_NOTBOL : 0;
+		if (agcre_regexec(agcre, vs, matchc, m, flags | revflags | bolflags) == 0) {
 			found += 1;
+			lastmatch = i;
 		} else if (found > 0) {
-			m[0].rm_so = i + 1;
-			m[0].rm_eo = to;
-			return agcre_regexec(agcre, vs, matchc, m, flags);
+			break;
 		}
 	}
-	return AGCRE_REG_FAILURE;
+	/* just do 1 final forward search to load m array */
+	m[0].rm_so = lastmatch;
+	m[0].rm_eo = to;
+	bolflags = (lastmatch > 0) ? AGCRE_REG_NOTBOL : 0;
+	return agcre_regexec(agcre, vs, matchc, m, flags | revflags | bolflags);
 }
 
 /* free the regular expression */
-AGCRE_EXPORT void
+void
 agcre_regfree(agcre_regex_t *agcre)
 {
 	uint32_t	 i;
@@ -2969,7 +2998,7 @@ agcre_regfree(agcre_regex_t *agcre)
 }
 
 /* do regexp sed-style substitution */
-AGCRE_EXPORT ssize_t
+ssize_t
 agcre_regnsub(char *buf, size_t size, const char *repl, const agcre_regmatch_t *rm, const char *str)
 {
 	const char	*i;
@@ -3022,7 +3051,7 @@ agcre_regnsub(char *buf, size_t size, co
 }
 
 /* do regexp sed-style substitution */
-AGCRE_EXPORT ssize_t
+ssize_t
 agcre_regasub(char **buf, const char *repl, const agcre_regmatch_t *rm, const char *str)
 {
 	const char	*i;

Index: othersrc/external/bsd/agcre/dist/agcre.h
diff -u othersrc/external/bsd/agcre/dist/agcre.h:1.4 othersrc/external/bsd/agcre/dist/agcre.h:1.5
--- othersrc/external/bsd/agcre/dist/agcre.h:1.4	Sat Dec  4 03:40:29 2021
+++ othersrc/external/bsd/agcre/dist/agcre.h	Fri Feb 24 19:01:10 2023
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013,2017,2020,2021 Alistair Crooks. All Rights reserved.
+ * Copyright (c) 2013,2017,2020,2021,2022,2023 Alistair Crooks. All Rights reserved.
  * Copyright (c) 2007-2009 Russ Cox, Google Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -29,7 +29,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 #ifndef AGCRE_VERSION
-#define AGCRE_VERSION	20211001
+#define AGCRE_VERSION	20230224
 
 #include <inttypes.h>
 
@@ -95,6 +95,22 @@
 #define AGCRE_MAX_SUBEXPR	100
 #define AGCRE_MAX_EXPR_LENGTH	1024
 
+#ifdef LIB_NAMESPACE
+#define AGCRE_CONCAT(x, y)	x##y
+#define AGCRE_NAMESPACE(x, y)	AGCRE_CONCAT(x, y)
+#define agcre_regex_t		AGCRE_NAMESPACE(LIB_NAMESPACE, agcre_regex_t)
+#define agcre_regoff_t		AGCRE_NAMESPACE(LIB_NAMESPACE, agcre_regoff_t)
+#define agcre_regmatch_t	AGCRE_NAMESPACE(LIB_NAMESPACE, agcre_regmatch_t)
+#define agcre_regex_new		AGCRE_NAMESPACE(LIB_NAMESPACE, agcre_regex_new)
+#define agcre_regcomp		AGCRE_NAMESPACE(LIB_NAMESPACE, agcre_regcomp)
+#define agcre_regexec		AGCRE_NAMESPACE(LIB_NAMESPACE, agcre_regexec)
+#define agcre_rev_regexec	AGCRE_NAMESPACE(LIB_NAMESPACE, agcre_rev_regexec)
+#define agcre_regfree		AGCRE_NAMESPACE(LIB_NAMESPACE, agcre_regfree)
+#define agcre_regerror		AGCRE_NAMESPACE(LIB_NAMESPACE, agcre_regerror)
+#define agcre_regnsub		AGCRE_NAMESPACE(LIB_NAMESPACE, agcre_regnsub)
+#define agcre_regasub		AGCRE_NAMESPACE(LIB_NAMESPACE, agcre_regasub)
+#endif
+
 typedef int64_t		 agcre_regoff_t;
 
 /* a match structure */
@@ -111,37 +127,6 @@ typedef struct agcre_regex_t {
 	void		*re_g;		/* internals */
 } agcre_regex_t;
 
-#ifndef USE_VISIBILITY
-#  if defined(__GNUC__)
-#    if __GNUC__ >= 4
-#    define USE_VISIBILITY	1
-#    else
-#    define USE_VISIBILITY	0
-#    endif
-#  else
-#    define USE_VISIBILITY	0
-#  endif
-#endif
-
-#if USE_VISIBILITY
-#  define DLL_PUBLIC __attribute__ ((visibility ("default")))
-#  define DLL_LOCAL  __attribute__ ((visibility ("hidden")))
-#else
-#  define DLL_PUBLIC
-#  define DLL_LOCAL
-#endif
-
-/* by default, don't hide external symbols */
-#ifndef HIDE_AGCRE
-#define HIDE_AGCRE	0
-#endif
-
-#if HIDE_AGCRE
-#define AGCRE_EXPORT	DLL_LOCAL
-#else
-#define AGCRE_EXPORT	DLL_PUBLIC
-#endif
-
 #ifndef __BEGIN_DECLS
 #  if defined(__cplusplus)
 #  define __BEGIN_DECLS           extern "C" {
@@ -154,18 +139,18 @@ typedef struct agcre_regex_t {
 
 __BEGIN_DECLS
 
-AGCRE_EXPORT agcre_regex_t *agcre_new(void);
-AGCRE_EXPORT int agcre_regcomp(agcre_regex_t */*re*/, const void */*s*/, uint32_t /*flags*/);
-AGCRE_EXPORT int agcre_regexec(agcre_regex_t */*re*/, const void */*vs*/, size_t /*mc*/,
+agcre_regex_t *agcre_new(void);
+int agcre_regcomp(agcre_regex_t */*re*/, const void */*s*/, uint32_t /*flags*/);
+int agcre_regexec(agcre_regex_t */*re*/, const void */*vs*/, size_t /*mc*/,
 		agcre_regmatch_t */*m*/, uint32_t /*flags*/);
-AGCRE_EXPORT int agcre_rev_regexec(agcre_regex_t */*agcre*/, const void */*vs*/,
+int agcre_rev_regexec(agcre_regex_t */*agcre*/, const void */*vs*/,
 		size_t /*matchc*/, agcre_regmatch_t */*m*/, uint32_t /*flags*/);
-AGCRE_EXPORT void agcre_regfree(agcre_regex_t */*re*/);
-AGCRE_EXPORT size_t agcre_regerror(int /*errcode*/, const agcre_regex_t */*agcre*/,
+void agcre_regfree(agcre_regex_t */*re*/);
+size_t agcre_regerror(int /*errcode*/, const agcre_regex_t */*agcre*/,
 		char */*errbuf*/, size_t /*size*/);
-AGCRE_EXPORT ssize_t agcre_regnsub(char */*buf*/, size_t /*size*/, const char */*repl*/,
+ssize_t agcre_regnsub(char */*buf*/, size_t /*size*/, const char */*repl*/,
 		const agcre_regmatch_t */*rm*/, const char */*str*/);
-AGCRE_EXPORT ssize_t agcre_regasub(char **/*buf*/, const char */*repl*/,
+ssize_t agcre_regasub(char **/*buf*/, const char */*repl*/,
 		const agcre_regmatch_t */*rm*/, const char */*str*/);
 
 __END_DECLS

Index: othersrc/external/bsd/agcre/dist/tests/54.expected
diff -u othersrc/external/bsd/agcre/dist/tests/54.expected:1.3 othersrc/external/bsd/agcre/dist/tests/54.expected:1.4
--- othersrc/external/bsd/agcre/dist/tests/54.expected:1.3	Tue Oct  5 01:23:39 2021
+++ othersrc/external/bsd/agcre/dist/tests/54.expected	Fri Feb 24 19:01:11 2023
@@ -2,5 +2,5 @@
 /usr/include/dev/ic/nvmeio.h:192:	for (i = 0; i < __arraycount(identify->psd); i++)
 /usr/include/rump/rumpuser_port.h:260:#ifndef __arraycount
 /usr/include/rump/rumpuser_port.h:261:#define __arraycount(_ar_) (sizeof(_ar_)/sizeof(_ar_[0]))
-/usr/include/sys/bitops.h:324:	for (__i = 0; __i < __arraycount(__v->_b); __i++)		\
-/usr/include/sys/cdefs.h:636:#define	__arraycount(__x)	(sizeof(__x) / sizeof(__x[0]))
+/usr/include/sys/bitops.h:324:	for (__i = 0; __i < __arraycount((__v)->_b); __i++)		\
+/usr/include/sys/cdefs.h:644:#define	__arraycount(__x)	(sizeof(__x) / sizeof(__x[0]))

Index: othersrc/external/bsd/agcre/dist/tests/62.expected
diff -u othersrc/external/bsd/agcre/dist/tests/62.expected:1.2 othersrc/external/bsd/agcre/dist/tests/62.expected:1.3
--- othersrc/external/bsd/agcre/dist/tests/62.expected:1.2	Tue Oct  5 01:23:39 2021
+++ othersrc/external/bsd/agcre/dist/tests/62.expected	Fri Feb 24 19:01:11 2023
@@ -1 +1 @@
-agcre 20211001
+agcre 20230224

Index: othersrc/external/bsd/agcre/lib/Makefile
diff -u othersrc/external/bsd/agcre/lib/Makefile:1.3 othersrc/external/bsd/agcre/lib/Makefile:1.4
--- othersrc/external/bsd/agcre/lib/Makefile:1.3	Tue Oct  5 22:17:15 2021
+++ othersrc/external/bsd/agcre/lib/Makefile	Fri Feb 24 19:01:11 2023
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile,v 1.3 2021/10/05 22:17:15 agc Exp $
+# $NetBSD: Makefile,v 1.4 2023/02/24 19:01:11 agc Exp $
 
 LIB=		agcre
 SRCS+=		agcre.c
@@ -14,6 +14,8 @@ WARNS=		5
 
 CPPFLAGS+=	-I${DIST}
 
+.sinclude "../namespace.mk"
+
 .ifndef PRODUCTION
 CPPFLAGS+=	-g -O0
 LDFLAGS+=	-g -O0

Added files:

Index: othersrc/external/bsd/agcre/namespace.mk
diff -u /dev/null othersrc/external/bsd/agcre/namespace.mk:1.1
--- /dev/null	Fri Feb 24 19:01:11 2023
+++ othersrc/external/bsd/agcre/namespace.mk	Fri Feb 24 19:01:10 2023
@@ -0,0 +1 @@
+CPPFLAGS+=	-DLIB_NAMESPACE="agcre_"

Reply via email to