X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=libctf%2Fctf-decls.h;h=51041c592f452f3be5f18199adb59c12bf5dd2fb;hb=5f23a08201ed01570b34f5cff99a95fc7b9e2fdb;hp=5e9ede48099de2c105d408609c6a0ba17a80b714;hpb=a0486bac41d6ce47f27795a5abbca5cc53ddba00;p=deliverable%2Fbinutils-gdb.git diff --git a/libctf/ctf-decls.h b/libctf/ctf-decls.h index 5e9ede4809..51041c592f 100644 --- a/libctf/ctf-decls.h +++ b/libctf/ctf-decls.h @@ -1,5 +1,5 @@ /* Declarations for missing functions. - Copyright (C) 2019 Free Software Foundation, Inc. + Copyright (C) 2019-2020 Free Software Foundation, Inc. This file is part of libctf. @@ -22,12 +22,50 @@ #include "config.h" -#if !HAVE_DECL_QSORT_R #include -void qsort_r (void *base, size_t nmemb, size_t size, +#include +#include "libiberty.h" + +#if HAVE_QSORT_R_ARG_LAST +static inline void +ctf_qsort_r (void *base, size_t nmemb, size_t size, + int (*compar)(const void *, const void *, void *), + void *arg) +{ + qsort_r (base, nmemb, size, compar, arg); +} +#elif HAVE_QSORT_R_COMPAR_LAST +struct ctf_qsort_arg +{ + int (*compar) (const void *, const void *, void *); + void *arg; +}; + +static int +ctf_qsort_compar_thunk (void *arg, const void *a, const void *b) +{ + struct ctf_qsort_arg *qsort_arg = (struct ctf_qsort_arg *) arg; + + return qsort_arg->compar (a, b, arg); +} + +static inline void +ctf_qsort_r (void *base, size_t nmemb, size_t size, + int (*compar)(const void *, const void *, void *), + void *arg) +{ + struct ctf_qsort_arg thunk = { compar, arg }; + qsort_r (base, nmemb, size, &thunk, ctf_qsort_compar_thunk); +} +#else +void ctf_qsort_r (void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *, void *), void *arg); -#endif /* !HAVE_DECL_QSORT_R */ +#endif + +#ifndef HAVE_O_CLOEXEC +# define O_CLOEXEC 0 +#endif #undef MAX #undef MIN