This is the mail archive of the
newlib@sourceware.org
mailing list for the newlib project.
How to implement qsort_r
- From: Yaakov Selkowitz <yselkowi at redhat dot com>
- To: newlib at sourceware dot org
- Date: Wed, 03 Dec 2014 20:53:37 -0600
- Subject: How to implement qsort_r
- Authentication-results: sourceware.org; auth=none
I would like to add qsort_r to newlib. However, there are two distinct
signatures for this function on different platforms.
The BSDs and OS X provide:
void qsort_r(void *base, size_t nmemb, size_t size, void *thunk, int
(*compar)(void *, const void *, const void *));
http://www.freebsd.org/cgi/man.cgi?format=html&query=qsort%283%29
Where glibc provides:
void qsort_r(void *base, size_t nmemb, size_t size, int (*compar)(const
void *, const void *, void *), void *arg);
http://man7.org/linux/man-pages/man3/qsort.3.html
(Personally, I think *neither* of these make sense; the BSD signature
with the glibc compar typedef would be more consistent in terms of
argument ordering, but nobody asked my opinion on the matter. :-)
In any case, the natural place for this is in newlib, but that means we
either have to choose one (namely glibc, since that is what more
software will be expecting) or handle this like we do strerror_r. Any
thoughts before I spend more time on this?
--
Yaakov Selkowitz
Associate Software Engineer, ARM
Red Hat, Inc.