HomeFreeBSD

Alter the prototype of qsort_r(3) to match POSIX, which adopted the

Description

Alter the prototype of qsort_r(3) to match POSIX, which adopted the
glibc-based interface.

Unfortunately, the glibc maintainers, despite knowing the existence
of the FreeBSD qsort_r(3) interface in 2004 and refused to add the
same interface to glibc based on grounds of the lack of standardization
and portability concerns, has decided it was a good idea to introduce
their own qsort_r(3) interface in 2007 as a GNU extension with a
slightly different and incompatible interface.

With the adoption of their interface as POSIX standard, let's switch
to the same prototype, there is no need to remain incompatible.

C++ and C applications written for the historical FreeBSD interface
get source level compatibility when building in C++ mode, or when
building with a C compiler with C11 generics support, provided that
the caller passes a fifth parameter of qsort_r() that exactly matches
the historical FreeBSD comparator function pointer type and does not
redefine the historical qsort_r(3) prototype in their source code.

Symbol versioning is used to keep old binaries working.

MFC: never
Relnotes: yes
Reviewed by: cem, imp, hps, pauamma
Differential revision: https://reviews.freebsd.org/D17083

Details

Provenance
edAuthored on Sep 30 2022, 10:26 PM
delphijCommitted on Sep 30 2022, 10:26 PM
Reviewer
cem
Differential Revision
D17083: Alter the prototype of qsort_r(3) to match POSIX, which adopted the glibc-based interface.
Parents
rG69d79ceb2c01: tests/unix_passfd: add test case against 636420bde36
Branches
Unknown
Tags
Unknown