On 29/09/2025 04:39, Collin Funk wrote:
This patch moves some logic from 'fold' into a local Gnulib module that can be used by other programs.The module is used in a similar manner to getc (). Here is a trivial example of it's use: #include "mbbuf.h" mcel_t g; while ((g = mbbuf_next_char (istream)).ch != MBBUF_EOF) fwrite (mbbuf_prev_char (g), 1, g.len, stdout); This module should make it pretty easy to port programs who use getc () and putc (). And it will make sure that invalid multi-byte characters are treated consistently across programs. Performance is the same as coreutils-9.8 since the logic isn't really changed. Thoughts?
Excellent idea. Given we've catered for various cases in fold(1), reusing that logic makes a lot of sense. mbbuf_get_char() + mbbuf_char_offset() may be preferable to mbbuf_next_char() + mbbuf_prev_char() ? I'd change "first character in the previously read character" to "first _byte_ in the previously read character". The module Depends should add: c99, mcel. This gl module uses "ioblksize.h" which by right should thus made into a gl module so that gl modules are self contained / easy to move to gnulib. We can do that after anyway. There are a couple of minor `make syntax-check` issues. I'd change the license to the same as mcel (LGPLv2+) in case it's ever moved to gnulib. thanks! Padraig
