wc: prefer signed integers
commit6b8b1f9e77a3fde7bfd3dd6dbcec2b057ae73215
authorPaul Eggert <eggert@cs.ucla.edu>
Sat, 23 Sep 2023 21:22:16 +0000 (23 14:22 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Sun, 24 Sep 2023 00:07:52 +0000 (23 17:07 -0700)
tree675cdee68614d88e87403b780d8eccb7db755ef0
parent8d41285fe494613a732f8060606d68ea3a8181d0
wc: prefer signed integers

Prefer signed to unsigned integers, to make it easier to catch
integer overflow errors.
* src/wc.c: Do not include safe-read.
(total_lines_overflow, total_words_overflow, total_chars_overflow)
(total_bytes_overflow): Now bool, not uintmax_t.  All uses changed.
(max_line_length): Now intmax_t, not uintmax_t.  All uses changed.
The total_... vars are still uintmax_t because overflow into them
is checked.
(page_size): Now idx_t, not size_t.
(wc_lines, wc, get_input_fstatus, compute_number_width, main):
Prefer signed to unsigned ints where either should do.
(wc_lines, wc): Use read rather than safe_read, since we don’t
need safe_read’s checks for huge buffers.
(wc): Redo call to mbrtoc32 to lessen the number of comparisons
against its returned value.  Do this partly by keeping a pointer
to the end of the buffer rather than a count.  Simplify
overflow-checking code.
(compute_number_width): Check for integer overflow.
Don’t assume size_t fits into unsigned long.
* src/wc.h (struct wc_lines): Prefer signed integers.
* src/wc_avx2.c: Do not include safe-read.h.
(wc_lines_avx2): Prefer signed integers.  Use read, not safe_read.
src/wc.c
src/wc.h
src/wc_avx2.c