summaryrefslogtreecommitdiff
path: root/src/regex.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/regex.c')
-rw-r--r--src/regex.c28
1 files changed, 12 insertions, 16 deletions
diff --git a/src/regex.c b/src/regex.c
index 84f0e9e..38e658b 100644
--- a/src/regex.c
+++ b/src/regex.c
@@ -54,21 +54,17 @@ void flex_regcomp(regex_t *preg, const char *regex, int cflags)
memset (preg, 0, sizeof (regex_t));
if ((err = regcomp (preg, regex, cflags)) != 0) {
- const int errbuf_sz = 200;
- char *errbuf, *rxerr;
+ const size_t errbuf_sz = 200;
+ char *errbuf;
+ int n;
errbuf = malloc(errbuf_sz * sizeof(char));
if (!errbuf)
flexfatal(_("Unable to allocate buffer to report regcomp"));
- rxerr = malloc(errbuf_sz * sizeof(char));
- if (!rxerr)
- flexfatal(_("Unable to allocate buffer for regerror"));
- regerror (err, preg, rxerr, errbuf_sz);
- snprintf (errbuf, errbuf_sz, "regcomp for \"%s\" failed: %s", regex, rxerr);
-
- flexfatal (errbuf);
- free(errbuf);
- free(rxerr);
+ n = snprintf(errbuf, errbuf_sz, "regcomp for \"%s\" failed: ", regex);
+ regerror(err, preg, errbuf+n, errbuf_sz-(size_t)n);
+
+ flexfatal (errbuf); /* never returns - no need to free(errbuf) */
}
}
@@ -80,11 +76,11 @@ void flex_regcomp(regex_t *preg, const char *regex, int cflags)
char *regmatch_dup (regmatch_t * m, const char *src)
{
char *str;
- int len;
+ size_t len;
- if (m == NULL || m->rm_so < 0)
+ if (m == NULL || m->rm_so < 0 || m->rm_eo < m->rm_so)
return NULL;
- len = m->rm_eo - m->rm_so;
+ len = (size_t) (m->rm_eo - m->rm_so);
str = malloc((len + 1) * sizeof(char));
if (!str)
flexfatal(_("Unable to allocate a copy of the match"));
@@ -107,7 +103,7 @@ char *regmatch_cpy (regmatch_t * m, char *dest, const char *src)
return dest;
}
- snprintf (dest, regmatch_len(m), "%s", src + m->rm_so);
+ snprintf (dest, (size_t) regmatch_len(m), "%s", src + m->rm_so);
return dest;
}
@@ -150,7 +146,7 @@ int regmatch_strtol (regmatch_t * m, const char *src, char **endptr,
else
s = regmatch_dup (m, src);
- n = strtol (s, endptr, base);
+ n = (int) strtol (s, endptr, base);
if (s != buf)
free (s);