Loading...
stdlib/FreeBSD/qsort.3.patch /dev/null Libc-583
--- /dev/null
+++ Libc/Libc-583/stdlib/FreeBSD/qsort.3.patch
@@ -0,0 +1,243 @@
+--- qsort.3.orig	2009-05-12 11:21:33.000000000 -0700
++++ qsort.3	2009-05-20 15:00:21.000000000 -0700
+@@ -40,41 +40,78 @@
+ .Dt QSORT 3
+ .Os
+ .Sh NAME
+-.Nm qsort , qsort_r , heapsort , mergesort
++.Nm heapsort ,
++#ifdef UNIFDEF_BLOCKS
++.Nm heapsort_b ,
++#endif
++.Nm mergesort ,
++#ifdef UNIFDEF_BLOCKS
++.Nm mergesort_b ,
++#endif
++.Nm qsort ,
++#ifdef UNIFDEF_BLOCKS
++.Nm qsort_b ,
++#endif
++.Nm qsort_r
+ .Nd sort functions
+-.Sh LIBRARY
+-.Lb libc
+ .Sh SYNOPSIS
+ .In stdlib.h
+-.Ft void
+-.Fo qsort
++.Ft int
++.Fo heapsort
+ .Fa "void *base"
+-.Fa "size_t nmemb"
+-.Fa "size_t size"
++.Fa "size_t nel"
++.Fa "size_t width"
+ .Fa "int \*[lp]*compar\*[rp]\*[lp]const void *, const void *\*[rp]"
+ .Fc
+-.Ft void
+-.Fo qsort_r
++#ifdef UNIFDEF_BLOCKS
++.Ft int
++.Fo heapsort_b
+ .Fa "void *base"
+-.Fa "size_t nmemb"
+-.Fa "size_t size"
+-.Fa "void *thunk"
+-.Fa "int \*[lp]*compar\*[rp]\*[lp]void *, const void *, const void *\*[rp]"
++.Fa "size_t nel"
++.Fa "size_t width"
++.Fa "int \*[lp]^compar\*[rp]\*[lp]const void *, const void *\*[rp]"
+ .Fc
++#endif
+ .Ft int
+-.Fo heapsort
++.Fo mergesort
+ .Fa "void *base"
+-.Fa "size_t nmemb"
+-.Fa "size_t size"
++.Fa "size_t nel"
++.Fa "size_t width"
+ .Fa "int \*[lp]*compar\*[rp]\*[lp]const void *, const void *\*[rp]"
+ .Fc
++#ifdef UNIFDEF_BLOCKS
+ .Ft int
+-.Fo mergesort
++.Fo mergesort_b
+ .Fa "void *base"
+-.Fa "size_t nmemb"
+-.Fa "size_t size"
++.Fa "size_t nel"
++.Fa "size_t width"
++.Fa "int \*[lp]^compar\*[rp]\*[lp]const void *, const void *\*[rp]"
++.Fc
++#endif
++.Ft void
++.Fo qsort
++.Fa "void *base"
++.Fa "size_t nel"
++.Fa "size_t width"
+ .Fa "int \*[lp]*compar\*[rp]\*[lp]const void *, const void *\*[rp]"
+ .Fc
++#ifdef UNIFDEF_BLOCKS
++.Ft void
++.Fo qsort_b
++.Fa "void *base"
++.Fa "size_t nel"
++.Fa "size_t width"
++.Fa "int \*[lp]^compar\*[rp]\*[lp]const void *, const void *\*[rp]"
++.Fc
++#endif
++.Ft void
++.Fo qsort_r
++.Fa "void *base"
++.Fa "size_t nel"
++.Fa "size_t width"
++.Fa "void *thunk"
++.Fa "int \*[lp]*compar\*[rp]\*[lp]void *, const void *, const void *\*[rp]"
++.Fc
+ .Sh DESCRIPTION
+ The
+ .Fn qsort
+@@ -84,7 +121,7 @@
+ function is a modified selection sort.
+ The
+ .Fn mergesort
+-function is a modified merge sort with exponential search
++function is a modified merge sort with exponential search,
+ intended for sorting data with pre-existing order.
+ .Pp
+ The
+@@ -92,19 +129,19 @@
+ and
+ .Fn heapsort
+ functions sort an array of
+-.Fa nmemb
++.Fa nel
+ objects, the initial member of which is pointed to by
+ .Fa base .
+ The size of each object is specified by
+-.Fa size .
++.Fa width .
+ The
+ .Fn mergesort
+ function
+ behaves similarly, but
+ .Em requires
+ that
+-.Fa size
+-be greater than
++.Fa width
++be greater than or equal to
+ .Dq "sizeof(void *) / 2" .
+ .Pp
+ The contents of the array
+@@ -139,7 +176,7 @@
+ .Fn heapsort
+ are
+ .Em not
+-stable, that is, if two members compare as equal, their order in
++stable; that is, if two members compare as equal, their order in
+ the sorted array is undefined.
+ The
+ .Fn mergesort
+@@ -183,8 +220,8 @@
+ The function
+ .Fn mergesort
+ requires additional memory of size
+-.Fa nmemb *
+-.Fa size
++.Fa nel *
++.Fa width
+ bytes; it should be used only when space is not at a premium.
+ The
+ .Fn mergesort
+@@ -195,42 +232,83 @@
+ Normally,
+ .Fn qsort
+ is faster than
+-.Fn mergesort
+-is faster than
++.Fn mergesort ,
++which is faster than
+ .Fn heapsort .
+ Memory availability and pre-existing order in the data can make this
+ untrue.
++#ifdef UNIFDEF_BLOCKS
++.Pp
++The
++.Fn heapsort_b ,
++.Fn mergesort_b ,
++and
++.Fn qsort_b
++routines are like the corresponding routines without the _b suffix, expect
++that the
++.Fa compar
++callback is a block pointer instead of a function pointer.
++#endif
+ .Sh RETURN VALUES
+ The
++#ifdef UNIFDEF_BLOCKS
++.Fn qsort ,
++.Fn qsort_b
++#else
+ .Fn qsort
++#endif
+ and
+ .Fn qsort_r
+ functions
+ return no value.
+ .Pp
+-.Rv -std heapsort mergesort
++#ifdef UNIFDEF_BLOCKS
++.ds HEAPSORT_B heapsort_b
++.ds MERGESORT_B mergesort_b
++#endif
++.Rv -std heapsort \*[HEAPSORT_B] mergesort \*[MERGESORT_B]
+ .Sh ERRORS
+ The
++#ifdef UNIFDEF_BLOCKS
++.Fn heapsort ,
++.Fn heapsort_b ,
++.Fn mergesort
++and
++.Fn mergesort_b
++#else
+ .Fn heapsort
+ and
+ .Fn mergesort
++#endif
+ functions succeed unless:
+ .Bl -tag -width Er
+ .It Bq Er EINVAL
+ The
+-.Fa size
++.Fa width
+ argument is zero, or,
+ the
+-.Fa size
++.Fa width
+ argument to
+ .Fn mergesort
++#ifdef UNIFDEF_BLOCKS
++or
++.Fn mergesort_b
++#endif
+ is less than
+ .Dq "sizeof(void *) / 2" .
+ .It Bq Er ENOMEM
+ The
++#ifdef UNIFDEF_BLOCKS
++.Fn heapsort ,
++.Fn heapsort_b ,
++.Fn mergesort
++and
++.Fn mergesort_b
++#else
+ .Fn heapsort
+-or
++and
+ .Fn mergesort
++#endif
+ functions
+ were unable to allocate memory.
+ .El