On 2024-04-21 14:36, Bruno Haible wrote:

But direct use of off_t has two problems:
   - off_t is not defined by ISO C; thus it's an odd return type for things
     like zsprintf.

I was thinking that zsprintf should return ptrdiff_t and zprintf would return off_t. off_t is defined by POSIX <stdio.h>, so it's reasonable for zprintf to use it.


   - off_t changes depending on whether gl_LARGEFILE is in use or not;
     thus it's a bad idea to use it in the API of any shared library or
     (more generally) any independently-built component.

That ship sailed long ago, I'm afraid. That is, any API depending on I/O sizes must deal with this problem anyway, so there's nothing new here. (Also, the problem will go away soon enough anyway, as 32-bit off_t systems will likely die out by 2038 due to time_t issues of all things....)


I would prefer to solve this dilemma by defining a new type, say 'zoff_t',
that is required to be
   - at least as wide as off_t, and
   - at least as wide as ptrditt_t.

That should also work. Not sure whether it's better than using off_t for I/O and ptrdiff_t for main memory, though. Both approaches have pros and cons. An advantage of the off_t/ptrdiff_t approach is that it does not introduce a new type with all the confusion that would bring (there's a reason regoff_t has been so unpopular - even glibc doesn't implement it properly if memory serves...).

Reply via email to