Bump to 1.14.1
[platform/upstream/augeas.git] / lib / qsort_r.c
1 /* Reentrant sort function.
2
3    Copyright 2014-2016 Free Software Foundation, Inc.
4
5    This program is free software; you can redistribute it and/or modify
6    it under the terms of the GNU General Public License as published by
7    the Free Software Foundation; either version 2, or (at your option)
8    any later version.
9
10    This program is distributed in the hope that it will be useful,
11    but WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13    GNU General Public License for more details.
14
15    You should have received a copy of the GNU General Public License along
16    with this program; if not, see <http://www.gnu.org/licenses/>.  */
17
18 /* Written by Paul Eggert.  */
19
20 #include <config.h>
21
22 #include <stdlib.h>
23
24 /* This file is compiled only when the system has a qsort_r that needs
25    to be replaced because it has the BSD signature rather than the GNU
26    signature.  */
27
28 struct thunk
29 {
30   int (*cmp) (void const *, void const *, void *);
31   void *arg;
32 };
33
34 static int
35 thunk_cmp (void *thunk, void const *a, void const *b)
36 {
37   struct thunk *th = thunk;
38   return th->cmp (a, b, th->arg);
39 }
40
41 void
42 qsort_r (void *base, size_t nmemb, size_t size,
43          int (*cmp) (void const *, void const *, void *),
44          void *arg)
45 {
46 # undef qsort_r
47   struct thunk thunk;
48   thunk.cmp = cmp;
49   thunk.arg = arg;
50   qsort_r (base, nmemb, size, &thunk, thunk_cmp);
51 }