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