[v6,0/3] Add [v]aprintf(3)

Message ID cover.1779138878.git.alx@kernel.org (mailing list archive)
Headers
Series Add [v]aprintf(3) |

Message

Alejandro Colomar May 18, 2026, 9:20 p.m. UTC
  Hi!

This v6 is a rebase of v5 to current trunk.  No meaningful changes.
I've only fixed merge conflicts, which happened due to the addition of
other entries to abilist files, and the removal of support for s390-32.

Adhemerval mentioned Florian's concern about EOVERFLOW.  While this
implementation doesn't remove EOVERFLOW, the idea is that we will be
able to remove it in the future.  That will be more difficult, so it can
be done later, separately.  I don't see that as a blocker for this API.

I haven't tested, as I haven't changed anything meaningfully since v5
(and my computer is overloaded with other tests for a few weeks).  See
range-diff below, which shows the changes are trivial.


Have a lovely night!
Alex


Alejandro Colomar (3):
  Add [v]aprintf(3)
  manual/: Prefer aprintf(3) over asprintf(3)
  sysdeps/ieee754/ldbl-128ibm-compat/test-printf-chk-ldbl-compat.c: Fix
    typo

 debug/Makefile                                |  4 ++
 debug/Versions                                |  3 +
 debug/aprintf_chk.c                           | 51 ++++++++++++++++
 debug/vaprintf_chk.c                          | 39 ++++++++++++
 include/stdio.h                               |  8 +++
 libio/Makefile                                |  4 +-
 libio/Versions                                |  3 +
 libio/bits/stdio-ldbl.h                       |  5 ++
 libio/bits/stdio2-decl.h                      |  8 +++
 libio/bits/stdio2.h                           | 42 +++++++++++++
 libio/stdio.h                                 | 13 ++++
 libio/tst-aprintf.c                           | 57 ++++++++++++++++++
 libio/vaprintf.c                              | 39 ++++++++++++
 manual/examples/rprintf.c                     |  4 +-
 manual/stdio.texi                             | 30 +++++++++-
 manual/string.texi                            |  2 +-
 stdio-common/Makefile                         |  2 +
 stdio-common/Versions                         |  3 +
 stdio-common/aprintf.c                        | 40 +++++++++++++
 sysdeps/ieee754/ldbl-128ibm-compat/Makefile   |  8 ++-
 sysdeps/ieee754/ldbl-128ibm-compat/Versions   |  6 ++
 .../ldbl-128ibm-compat/ieee128-aprintf.c      | 36 +++++++++++
 .../ldbl-128ibm-compat/ieee128-aprintf_chk.c  | 40 +++++++++++++
 .../ldbl-128ibm-compat/ieee128-vaprintf.c     | 29 +++++++++
 .../ldbl-128ibm-compat/ieee128-vaprintf_chk.c | 31 ++++++++++
 .../test-printf-chk-ldbl-compat.c             | 33 ++++++++++-
 .../test-printf-ldbl-compat.c                 | 31 +++++++++-
 sysdeps/ieee754/ldbl-opt/Makefile             |  6 ++
 sysdeps/ieee754/ldbl-opt/Versions             | 10 ++++
 sysdeps/ieee754/ldbl-opt/nldbl-aprintf.c      | 17 ++++++
 sysdeps/ieee754/ldbl-opt/nldbl-aprintf_chk.c  | 15 +++++
 sysdeps/ieee754/ldbl-opt/nldbl-compat.c       | 59 +++++++++++++++++++
 sysdeps/ieee754/ldbl-opt/nldbl-compat.h       |  5 ++
 sysdeps/ieee754/ldbl-opt/nldbl-vaprintf.c     |  9 +++
 sysdeps/ieee754/ldbl-opt/nldbl-vaprintf_chk.c |  8 +++
 sysdeps/mach/hurd/i386/libc.abilist           |  5 ++
 sysdeps/mach/hurd/x86_64/libc.abilist         |  5 ++
 sysdeps/unix/sysv/linux/aarch64/libc.abilist  |  5 ++
 sysdeps/unix/sysv/linux/alpha/libc.abilist    |  5 ++
 sysdeps/unix/sysv/linux/arc/libc.abilist      |  5 ++
 sysdeps/unix/sysv/linux/arm/be/libc.abilist   |  5 ++
 sysdeps/unix/sysv/linux/arm/le/libc.abilist   |  5 ++
 sysdeps/unix/sysv/linux/csky/libc.abilist     |  5 ++
 sysdeps/unix/sysv/linux/hppa/libc.abilist     |  5 ++
 sysdeps/unix/sysv/linux/i386/libc.abilist     |  5 ++
 .../sysv/linux/loongarch/lp64/libc.abilist    |  5 ++
 .../sysv/linux/m68k/coldfire/libc.abilist     |  5 ++
 .../unix/sysv/linux/m68k/m680x0/libc.abilist  |  5 ++
 .../sysv/linux/microblaze/be/libc.abilist     |  5 ++
 .../sysv/linux/microblaze/le/libc.abilist     |  5 ++
 .../sysv/linux/mips/mips32/fpu/libc.abilist   |  5 ++
 .../sysv/linux/mips/mips32/nofpu/libc.abilist |  5 ++
 .../sysv/linux/mips/mips64/n32/libc.abilist   |  5 ++
 .../sysv/linux/mips/mips64/n64/libc.abilist   |  5 ++
 sysdeps/unix/sysv/linux/or1k/libc.abilist     |  5 ++
 .../linux/powerpc/powerpc32/fpu/libc.abilist  |  5 ++
 .../powerpc/powerpc32/nofpu/libc.abilist      |  5 ++
 .../linux/powerpc/powerpc64/be/libc.abilist   |  5 ++
 .../linux/powerpc/powerpc64/le/libc.abilist   |  5 ++
 .../unix/sysv/linux/riscv/rv32/libc.abilist   |  5 ++
 .../unix/sysv/linux/riscv/rv64/libc.abilist   |  5 ++
 sysdeps/unix/sysv/linux/s390/libc.abilist     |  5 ++
 sysdeps/unix/sysv/linux/sh/be/libc.abilist    |  5 ++
 sysdeps/unix/sysv/linux/sh/le/libc.abilist    |  5 ++
 .../sysv/linux/sparc/sparc32/libc.abilist     |  5 ++
 .../sysv/linux/sparc/sparc64/libc.abilist     |  5 ++
 .../unix/sysv/linux/x86_64/64/libc.abilist    |  5 ++
 .../unix/sysv/linux/x86_64/x32/libc.abilist   |  5 ++
 68 files changed, 853 insertions(+), 12 deletions(-)
 create mode 100644 debug/aprintf_chk.c
 create mode 100644 debug/vaprintf_chk.c
 create mode 100644 libio/tst-aprintf.c
 create mode 100644 libio/vaprintf.c
 create mode 100644 stdio-common/aprintf.c
 create mode 100644 sysdeps/ieee754/ldbl-128ibm-compat/ieee128-aprintf.c
 create mode 100644 sysdeps/ieee754/ldbl-128ibm-compat/ieee128-aprintf_chk.c
 create mode 100644 sysdeps/ieee754/ldbl-128ibm-compat/ieee128-vaprintf.c
 create mode 100644 sysdeps/ieee754/ldbl-128ibm-compat/ieee128-vaprintf_chk.c
 create mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-aprintf.c
 create mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-aprintf_chk.c
 create mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-vaprintf.c
 create mode 100644 sysdeps/ieee754/ldbl-opt/nldbl-vaprintf_chk.c

Range-diff against v5:
1:  4c17f2c5 ! 1:  2cbdf65b Add [v]aprintf(3)
    @@ sysdeps/mach/hurd/i386/libc.abilist: GLIBC_2.43 tss_delete F
      GLIBC_2.43 umaxabs F
     +GLIBC_2.44 __aprintf F
     +GLIBC_2.44 __aprintf_chk F
    + GLIBC_2.44 __mq_open_2 F
     +GLIBC_2.44 __vaprintf_chk F
    + GLIBC_2.44 aio_cancel F
    + GLIBC_2.44 aio_cancel64 F
    + GLIBC_2.44 aio_error F
    +@@ sysdeps/mach/hurd/i386/libc.abilist: GLIBC_2.44 aio_suspend F
    + GLIBC_2.44 aio_suspend64 F
    + GLIBC_2.44 aio_write F
    + GLIBC_2.44 aio_write64 F
     +GLIBC_2.44 aprintf F
    + GLIBC_2.44 gai_cancel F
    + GLIBC_2.44 gai_error F
    + GLIBC_2.44 gai_suspend F
    +@@ sysdeps/mach/hurd/i386/libc.abilist: GLIBC_2.44 timer_delete F
    + GLIBC_2.44 timer_getoverrun F
    + GLIBC_2.44 timer_gettime F
    + GLIBC_2.44 timer_settime F
     +GLIBC_2.44 vaprintf F
      GLIBC_2.5 __readlinkat_chk F
      GLIBC_2.5 inet6_opt_append F
    @@ sysdeps/mach/hurd/x86_64/libc.abilist: GLIBC_2.43 tss_delete F
      GLIBC_2.43 umaxabs F
     +GLIBC_2.44 __aprintf F
     +GLIBC_2.44 __aprintf_chk F
    + GLIBC_2.44 __mq_open_2 F
     +GLIBC_2.44 __vaprintf_chk F
    + GLIBC_2.44 aio_cancel F
    + GLIBC_2.44 aio_cancel64 F
    + GLIBC_2.44 aio_error F
    +@@ sysdeps/mach/hurd/x86_64/libc.abilist: GLIBC_2.44 aio_suspend F
    + GLIBC_2.44 aio_suspend64 F
    + GLIBC_2.44 aio_write F
    + GLIBC_2.44 aio_write64 F
     +GLIBC_2.44 aprintf F
    + GLIBC_2.44 gai_cancel F
    + GLIBC_2.44 gai_error F
    + GLIBC_2.44 gai_suspend F
    +@@ sysdeps/mach/hurd/x86_64/libc.abilist: GLIBC_2.44 timer_delete F
    + GLIBC_2.44 timer_getoverrun F
    + GLIBC_2.44 timer_gettime F
    + GLIBC_2.44 timer_settime F
     +GLIBC_2.44 vaprintf F
      HURD_CTHREADS_0.3 __mutex_init F
      HURD_CTHREADS_0.3 __mutex_lock F
    @@ sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist: GLIBC_2.43 memset_explicit F
     +GLIBC_2.44 aprintf F
     +GLIBC_2.44 vaprintf F
     
    - ## sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist ##
    -@@ sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist: GLIBC_2.43 memset_explicit F
    - GLIBC_2.43 mseal F
    - GLIBC_2.43 openat2 F
    - GLIBC_2.43 umaxabs F
    -+GLIBC_2.44 __aprintf F
    -+GLIBC_2.44 __aprintf_chk F
    -+GLIBC_2.44 __vaprintf_chk F
    -+GLIBC_2.44 aprintf F
    -+GLIBC_2.44 vaprintf F
    - GLIBC_2.5 __readlinkat_chk F
    - GLIBC_2.5 inet6_opt_append F
    - GLIBC_2.5 inet6_opt_find F
    -
    - ## sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist ##
    -@@ sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist: GLIBC_2.43 memset_explicit F
    + ## sysdeps/unix/sysv/linux/s390/libc.abilist ##
    +@@ sysdeps/unix/sysv/linux/s390/libc.abilist: GLIBC_2.43 memset_explicit F
      GLIBC_2.43 mseal F
      GLIBC_2.43 openat2 F
      GLIBC_2.43 umaxabs F
2:  7ad30709 = 2:  ad7ab456 manual/: Prefer aprintf(3) over asprintf(3)
3:  22c4ae3f = 3:  2f43411a sysdeps/ieee754/ldbl-128ibm-compat/test-printf-chk-ldbl-compat.c: Fix typo

base-commit: 9da7ad6d74700811c9b4c82b5f5eb555e39241a7