diff options
Diffstat (limited to 'src/regex.c')
-rw-r--r-- | src/regex.c | 28 |
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); |