util.c: BSD qsort_r
* util.c (ruby_qsort): use BSD-style qsort_r if available. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51857 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
5425099a9f
commit
a8994b167e
@ -1,3 +1,7 @@
|
|||||||
|
Tue Sep 15 12:44:32 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||||
|
|
||||||
|
* util.c (ruby_qsort): use BSD-style qsort_r if available.
|
||||||
|
|
||||||
Mon Sep 14 19:26:34 2015 Shugo Maeda <shugo@ruby-lang.org>
|
Mon Sep 14 19:26:34 2015 Shugo Maeda <shugo@ruby-lang.org>
|
||||||
|
|
||||||
* lib/net/ftp.rb (parse_mlsx_entry): parse pathnames including
|
* lib/net/ftp.rb (parse_mlsx_entry): parse pathnames including
|
||||||
|
@ -2314,6 +2314,9 @@ void qsort_r(void *base, size_t nmemb, size_t size,
|
|||||||
AS_CASE("$rb_cv_gnu_qsort_r:$rb_cv_bsd_qsort_r",
|
AS_CASE("$rb_cv_gnu_qsort_r:$rb_cv_bsd_qsort_r",
|
||||||
[yes:no], [
|
[yes:no], [
|
||||||
AC_DEFINE(HAVE_GNU_QSORT_R, 1)
|
AC_DEFINE(HAVE_GNU_QSORT_R, 1)
|
||||||
|
],
|
||||||
|
[no:yes], [
|
||||||
|
AC_DEFINE(HAVE_BSD_QSORT_R, 1)
|
||||||
])
|
])
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
24
util.c
24
util.c
@ -191,8 +191,30 @@ ruby_strtoul(const char *str, char **endptr, int base)
|
|||||||
# define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
|
# define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined HAVE_BSD_QSORT_R
|
||||||
|
typedef int (cmpfunc_t)(const void*, const void*, void*);
|
||||||
|
|
||||||
#ifndef HAVE_GNU_QSORT_R
|
struct bsd_qsort_r_args {
|
||||||
|
cmpfunc_t *cmp;
|
||||||
|
void *arg;
|
||||||
|
};
|
||||||
|
|
||||||
|
static int
|
||||||
|
cmp_bsd_qsort(void *d, const void *a, const void *b)
|
||||||
|
{
|
||||||
|
const struct bsd_qsort_r_args *args = d;
|
||||||
|
return (*args->cmp)(a, b, args->arg);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
ruby_qsort(void* base, const size_t nel, const size_t size, cmpfunc_t *cmp, void *d)
|
||||||
|
{
|
||||||
|
struct bsd_qsort_r_args args;
|
||||||
|
args.cmp = cmp;
|
||||||
|
args.arg = d;
|
||||||
|
qsort_r(base, nel, size, &args, cmp_bsd_qsort);
|
||||||
|
}
|
||||||
|
#elif !defined HAVE_GNU_QSORT_R
|
||||||
/* mm.c */
|
/* mm.c */
|
||||||
|
|
||||||
#define mmtype long
|
#define mmtype long
|
||||||
|
Loading…
x
Reference in New Issue
Block a user