Loading...
stdlib/FreeBSD/qsort.3.patch Libc-498 Libc-763.13
--- Libc/Libc-498/stdlib/FreeBSD/qsort.3.patch
+++ Libc/Libc-763.13/stdlib/FreeBSD/qsort.3.patch
@@ -1,70 +1,104 @@
---- _SB/Libc/stdlib/FreeBSD/qsort.3	2004-11-25 11:38:42.000000000 -0800
-+++ _SB/Libc/stdlib/FreeBSD/qsort.3.edit	2006-06-28 16:55:53.000000000 -0700
-@@ -40,41 +40,44 @@
+--- qsort.3.orig	2010-10-07 21:23:04.000000000 -0700
++++ qsort.3	2010-10-07 21:24:45.000000000 -0700
+@@ -36,41 +36,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 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 nel"
 +.Fa "size_t width"
-+.Fa "int \*[lp]*compar\*[rp]\*[lp]const void *, const void *\*[rp]"
++.Fa "int \*[lp]^compar\*[rp]\*[lp]const void *, const void *\*[rp]"
 +.Fc
-+.Ft int
-+.Fo mergesort
++#endif
++.Ft void
++.Fo qsort
+ .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 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]"
++.Fa "int \*[lp]^compar\*[rp]\*[lp]const void *, const void *\*[rp]"
 +.Fc
- .Ft void
- .Fo qsort
- .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
- .Fa "void *base"
--.Fa "size_t nmemb"
--.Fa "size_t size"
-+.Fa "size_t nel"
-+.Fa "size_t width"
- .Fa "void *thunk"
- .Fa "int \*[lp]*compar\*[rp]\*[lp]void *, const void *, const void *\*[rp]"
- .Fc
--.Ft int
--.Fo heapsort
--.Fa "void *base"
--.Fa "size_t nmemb"
--.Fa "size_t size"
--.Fa "int \*[lp]*compar\*[rp]\*[lp]const void *, const void *\*[rp]"
--.Fc
--.Ft int
--.Fo mergesort
--.Fa "void *base"
--.Fa "size_t nmemb"
--.Fa "size_t size"
--.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 +87,7 @@
+@@ -80,7 +117,7 @@
  function is a modified selection sort.
  The
  .Fn mergesort
@@ -73,7 +107,7 @@
  intended for sorting data with pre-existing order.
  .Pp
  The
-@@ -92,18 +95,18 @@
+@@ -88,19 +125,19 @@
  and
  .Fn heapsort
  functions sort an array of
@@ -91,11 +125,13 @@
  .Em requires
  that
 -.Fa size
-+.Fa width
- be greater than
+-be greater than
++.Fa width
++be greater than or equal to
  .Dq "sizeof(void *) / 2" .
  .Pp
-@@ -139,7 +142,7 @@
+ The contents of the array
+@@ -135,7 +172,7 @@
  .Fn heapsort
  are
  .Em not
@@ -104,7 +140,7 @@
  the sorted array is undefined.
  The
  .Fn mergesort
-@@ -183,8 +186,8 @@
+@@ -179,8 +216,8 @@
  The function
  .Fn mergesort
  requires additional memory of size
@@ -115,18 +151,65 @@
  bytes; it should be used only when space is not at a premium.
  The
  .Fn mergesort
-@@ -195,8 +198,8 @@
- Normally,
+@@ -192,19 +229,40 @@
  .Fn qsort
  is faster than
--.Fn mergesort
+ .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.
-@@ -218,10 +221,10 @@
++#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 COMPATIBILITY
+ Previous versions of
+ .Fn qsort
+@@ -213,26 +271,46 @@
+ This is no longer true.
+ .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
@@ -138,4 +221,25 @@
 +.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 ,
++or
++.Fn mergesort_b
++#else
+ .Fn heapsort
+ or
+ .Fn mergesort
++#endif
+ functions
+ were unable to allocate memory.
+ .El