xref: /dflybsd-src/contrib/binutils-2.34/libctf/ctf-decls.h (revision b52ef7118d1621abed722c5bbbd542210290ecef)
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