From 9160ceb67ff5317753ff71c623b037126862a32f Mon Sep 17 00:00:00 2001 From: rlar Date: Sun, 28 Feb 2016 21:12:45 +0100 Subject: cast to get rid of warnings --- src/regex.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'src/regex.c') diff --git a/src/regex.c b/src/regex.c index 84f0e9e..b44d958 100644 --- a/src/regex.c +++ b/src/regex.c @@ -54,7 +54,7 @@ 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; + const size_t errbuf_sz = 200; char *errbuf, *rxerr; errbuf = malloc(errbuf_sz * sizeof(char)); @@ -80,11 +80,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) 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 +107,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 +150,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); -- cgit v1.2.3 From bdc999cbc1b2e5e45af661849175dce5fe1c4036 Mon Sep 17 00:00:00 2001 From: rlar Date: Tue, 1 Mar 2016 18:22:25 +0100 Subject: improve readability --- src/regex.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/regex.c') diff --git a/src/regex.c b/src/regex.c index b44d958..2eacacc 100644 --- a/src/regex.c +++ b/src/regex.c @@ -82,7 +82,7 @@ char *regmatch_dup (regmatch_t * m, const char *src) char *str; 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 = (size_t) (m->rm_eo - m->rm_so); str = malloc((len + 1) * sizeof(char)); -- cgit v1.2.3 From e2d569053ae5359d1d87adf6f72d823a4308ef00 Mon Sep 17 00:00:00 2001 From: Explorer09 Date: Fri, 3 Feb 2017 20:53:24 +0800 Subject: scanner: fix regcomp's error reporting, double malloc. Fix unneeded double malloc - let regerror(). Write its message after our "regcomp for (regex) failed: " string. Also, errbuf cannot be free()'d because of flexfatal containing a longjmp. --- src/regex.c | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) (limited to 'src/regex.c') diff --git a/src/regex.c b/src/regex.c index 2eacacc..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 size_t 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) */ } } -- cgit v1.2.3