On 29/09/2025 21:50, Collin Funk wrote:
Pádraig Brady <[email protected]> writes:

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() ?

Yep, that looks better. I disliked the names myself, but was not feeling
creative enough to think of anything better.

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.

Yep, I didn't run 'make syntax-check'. This patch was more of a RFC and
I was expecting it needed to be cleaned up.

I'm fine with making the mbbuf module LVPLv2+, but that would mean we
cannot use ioblksize.h since it is GPLv3+. We would have to re-license
that or use some other constant like BUFSIZ. What do you think?

Ideally then we'd move ioblksize module to gl/, and re-license as LGPLv2+I 
originated it in https://github.com/coreutils/coreutils/commit/55efc5f3e
so am happy to re-license.

Also, if moved to Gnulib I would remove the global variables and expect
pointers passed to the functions. I'm 50/50 on changing that right
now...
thanks,
Padraig.

Reply via email to