Re: groff 1.24.0.rc1 available for evaluation

Collin Funk <[email protected]>
Newsgroups gmane.comp.printing.groff.general
Message-ID <[email protected]>
Ingo Schwarze <[email protected]> writes:

>     prevent gnulib from crashing while trying to replace printf(3)
>     
>     As expected, the newer gnulib used in groff-1.24 has become even
>     more aggressive disparaging our printf(3) implementation for multiple
>     bad reasons.  Getting it to build at all has become significantly
>     harder.  Notably, the pointless quibbles about errno.h and strerror(0)
>     appear to make gnulib want to replace the entire printf(3)
>     implementation, unless i'm totally misinterpreting what is going
>     on in the build - which might be the case because both the gnulib
>     code and the ./configure code are utterly unreadable: the former
>     because of its totally excessive use of #if directives, the latter
>     because it has no indentation whatsoever that could help reading
>     it.  So i'm not completely sure this is the minimal fix, though it
>     does look like every single one of the seven tweaks is really
>     required.
>     
>     With this fix, the build progresses slightly further.
>     Now grodvi builds; it's now grops that explodes.

On OpenBSD printf is replaced by Gnulib for the following reasons [1]:

1. It does not support C23 size specifiers (w8, w16, w32, w64, wf8,
wf16, wf32, wf64).

2. It's %a directive improperly rounds. Here is a test program:

    $ cat main.c 
    #include <stdio.h>
    int
    main (void)
    {
      static char buf[100];
      sprintf (buf, "%.0a", 1.51);
      printf ("%s\n", buf);
      return 0;
    }

When run on GNU/Linux amd64:

    $ cc main.c
    $ ./a.out 
    0x2p+0

When run on OpenBSD 7.8 amd64:

    $ cc main.c
    $ ./a.out                                                                                                                                   
    0x1p+0

3. It does not support the %b directive required by C23.

4. Upon exhausting memory, OpenBSD's printf returns 0 instead of -1
despite correctly setting errno to ENOMEM.

Collin

[1] https://www.gnu.org/software/gnulib/manual/html_node/printf.html
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.