1*fae548d3Szrj /* Declarations for missing functions.
2*fae548d3Szrj Copyright (C) 2019-2020 Free Software Foundation, Inc.
3*fae548d3Szrj
4*fae548d3Szrj This file is part of libctf.
5*fae548d3Szrj
6*fae548d3Szrj libctf is free software; you can redistribute it and/or modify it under
7*fae548d3Szrj the terms of the GNU General Public License as published by the Free
8*fae548d3Szrj Software Foundation; either version 3, or (at your option) any later
9*fae548d3Szrj version.
10*fae548d3Szrj
11*fae548d3Szrj This program is distributed in the hope that it will be useful, but
12*fae548d3Szrj WITHOUT ANY WARRANTY; without even the implied warranty of
13*fae548d3Szrj MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
14*fae548d3Szrj See the GNU General Public License for more details.
15*fae548d3Szrj
16*fae548d3Szrj You should have received a copy of the GNU General Public License
17*fae548d3Szrj along with this program; see the file COPYING. If not see
18*fae548d3Szrj <http://www.gnu.org/licenses/>. */
19*fae548d3Szrj
20*fae548d3Szrj #ifndef _CTF_DECLS_H
21*fae548d3Szrj #define _CTF_DECLS_H
22*fae548d3Szrj
23*fae548d3Szrj #include "config.h"
24*fae548d3Szrj
25*fae548d3Szrj #include <stddef.h>
26*fae548d3Szrj #include <stdlib.h>
27*fae548d3Szrj #include "libiberty.h"
28*fae548d3Szrj
29*fae548d3Szrj #if HAVE_QSORT_R_ARG_LAST
30*fae548d3Szrj static inline void
ctf_qsort_r(void * base,size_t nmemb,size_t size,int (* compar)(const void *,const void *,void *),void * arg)31*fae548d3Szrj ctf_qsort_r (void *base, size_t nmemb, size_t size,
32*fae548d3Szrj int (*compar)(const void *, const void *, void *),
33*fae548d3Szrj void *arg)
34*fae548d3Szrj {
35*fae548d3Szrj qsort_r (base, nmemb, size, compar, arg);
36*fae548d3Szrj }
37*fae548d3Szrj #elif HAVE_QSORT_R_COMPAR_LAST
38*fae548d3Szrj struct ctf_qsort_arg
39*fae548d3Szrj {
40*fae548d3Szrj int (*compar) (const void *, const void *, void *);
41*fae548d3Szrj void *arg;
42*fae548d3Szrj };
43*fae548d3Szrj
44*fae548d3Szrj static int
ctf_qsort_compar_thunk(void * arg,const void * a,const void * b)45*fae548d3Szrj ctf_qsort_compar_thunk (void *arg, const void *a, const void *b)
46*fae548d3Szrj {
47*fae548d3Szrj struct ctf_qsort_arg *qsort_arg = (struct ctf_qsort_arg *) arg;
48*fae548d3Szrj
49*fae548d3Szrj return qsort_arg->compar (a, b, arg);
50*fae548d3Szrj }
51*fae548d3Szrj
52*fae548d3Szrj static inline void
ctf_qsort_r(void * base,size_t nmemb,size_t size,int (* compar)(const void *,const void *,void *),void * arg)53*fae548d3Szrj ctf_qsort_r (void *base, size_t nmemb, size_t size,
54*fae548d3Szrj int (*compar)(const void *, const void *, void *),
55*fae548d3Szrj void *arg)
56*fae548d3Szrj {
57*fae548d3Szrj struct ctf_qsort_arg thunk = { compar, arg };
58*fae548d3Szrj qsort_r (base, nmemb, size, &thunk, ctf_qsort_compar_thunk);
59*fae548d3Szrj }
60*fae548d3Szrj #else
61*fae548d3Szrj void ctf_qsort_r (void *base, size_t nmemb, size_t size,
62*fae548d3Szrj int (*compar)(const void *, const void *, void *),
63*fae548d3Szrj void *arg);
64*fae548d3Szrj #endif
65*fae548d3Szrj
66*fae548d3Szrj #ifndef HAVE_O_CLOEXEC
67*fae548d3Szrj # define O_CLOEXEC 0
68*fae548d3Szrj #endif
69*fae548d3Szrj
70*fae548d3Szrj #undef MAX
71*fae548d3Szrj #undef MIN
72*fae548d3Szrj #define MAX(a, b) ((a) > (b) ? (a) : (b))
73*fae548d3Szrj #define MIN(a, b) ((a) < (b) ? (a) : (b))
74*fae548d3Szrj
75*fae548d3Szrj #endif /* _CTF_DECLS_H */
76