summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Eggert <eggert@cs.ucla.edu>2021-08-17 10:30:08 -0700
committerPaul Eggert <eggert@cs.ucla.edu>2021-08-24 00:43:27 -0700
commit2b455da03fb9de9af75fecf5792844a1de108899 (patch)
tree217ef3434af61696d911ffefcf80fafee122743e
parent33b2d2eded9c9679853631ec94825247aae711ac (diff)
downloadgrep-2b455da03fb9de9af75fecf5792844a1de108899.tar.gz
grep: avoid some size_t casts
This helps move the code away from unsigned types. * src/grep.c (buf_has_encoding_errors, contains_encoding_error): * src/searchutils.c (mb_goback): Compare to MB_LEN_MAX, not to (size_t) -2. This is a bit safer anyway, as grep relies on MB_LEN_MAX limits elsewhere. * src/search.h (mb_clen): Compare to -2 before converting to size_t.
-rw-r--r--src/grep.c8
-rw-r--r--src/search.h4
-rw-r--r--src/searchutils.c8
3 files changed, 10 insertions, 10 deletions
diff --git a/src/grep.c b/src/grep.c
index b2a0566d..35693752 100644
--- a/src/grep.c
+++ b/src/grep.c
@@ -768,7 +768,7 @@ buf_has_encoding_errors (char *buf, size_t size)
for (char const *p = buf; (p = skip_easy_bytes (p)) < buf + size; p += clen)
{
clen = mbrlen (p, buf + size - p, &mbs);
- if ((size_t) -2 <= clen)
+ if (MB_LEN_MAX < clen)
return true;
}
@@ -2234,12 +2234,12 @@ static bool
contains_encoding_error (char const *pat, size_t patlen)
{
mbstate_t mbs = { 0 };
- size_t i, charlen;
+ size_t charlen;
- for (i = 0; i < patlen; i += charlen)
+ for (size_t i = 0; i < patlen; i += charlen)
{
charlen = mb_clen (pat + i, patlen - i, &mbs);
- if ((size_t) -2 <= charlen)
+ if (MB_LEN_MAX < charlen)
return true;
}
return false;
diff --git a/src/search.h b/src/search.h
index 4853583f..6a5814a9 100644
--- a/src/search.h
+++ b/src/search.h
@@ -78,8 +78,8 @@ extern void fgrep_to_grep_pattern (char **, size_t *);
SEARCH_INLINE size_t
mb_clen (char const *s, size_t n, mbstate_t *mbs)
{
- size_t len = localeinfo.sbclen[to_uchar (*s)];
- return len == (size_t) -2 ? mbrlen (s, n, mbs) : len;
+ signed char len = localeinfo.sbclen[to_uchar (*s)];
+ return len == -2 ? mbrlen (s, n, mbs) : len;
}
extern char const *input_filename (void);
diff --git a/src/searchutils.c b/src/searchutils.c
index 80585118..b63990a9 100644
--- a/src/searchutils.c
+++ b/src/searchutils.c
@@ -68,8 +68,8 @@ kwsinit (bool mb_trans)
When returning zero, set *MB_START to CUR. When returning a
positive value, set *MB_START to the next boundary after CUR,
- or to END if there is no such boundary, and set *MBCLEN to the
- length of the preceding character. */
+ or to END if there is no such boundary, and if MBCLEN is nonnull
+ set *MBCLEN to the length of the preceding character. */
ptrdiff_t
mb_goback (char const **mb_start, size_t *mbclen, char const *cur,
char const *end)
@@ -92,7 +92,7 @@ mb_goback (char const **mb_start, size_t *mbclen, char const *cur,
{
mbstate_t mbs = { 0 };
clen = mb_clen (cur - i, end - (cur - i), &mbs);
- if (i < clen && clen < (size_t) -2)
+ if (i < clen && clen <= MB_LEN_MAX)
{
p0 = cur - i;
p = p0 + clen;
@@ -107,7 +107,7 @@ mb_goback (char const **mb_start, size_t *mbclen, char const *cur,
{
clen = mb_clen (p, end - p, &mbs);
- if ((size_t) -2 <= clen)
+ if (MB_LEN_MAX < clen)
{
/* An invalid sequence, or a truncated multibyte character.
Treat it as a single byte character. */