POSIX specifies that if the pattern contains a subexpression then
the first matched subexpression should be returned if it exists.
This fixes things like the following:
./expr 3 : '\(.*\)'
Before: 3
After: 3
---
expr.c | 13 ++---
1 file changed, 2 insertions(+), 11 deletions(-)
diff --git a/expr.c b/expr.c
index ae32b9f..3afb94b 100644
--- a/expr.c
+++ b/expr.c
@@ -59,11 +59,9 @@ match(struct val *vstr, struct val *vregx, struct val *ret)
{
regex_t re;
regmatch_t matches[2];
- long long d;
size_t anchlen;
char *s, *p, *anchreg;
char *str = vstr->str, *regx = vregx->str;
- const char *errstr;
/* anchored regex */
anchlen = strlen(regx) + 1 + 1;
@@ -83,15 +81,8 @@ match(struct val *vstr, struct val *vregx, struct val *ret)
s = str + matches[1].rm_so;
p = str + matches[1].rm_eo;
*p = '\0';
-
- d = strtonum(s, LLONG_MIN, LLONG_MAX, );
- if (!errstr) {
- ret->num = d;
- return;
- } else {
- ret->str = enstrdup(3, s);
- return;
- }
+ ret->str = enstrdup(3, s);
+ return;
} else {
regfree();
str += matches[0].rm_so;
--
2.41.0