aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDmitry Antipov2014-08-29 20:21:30 +0400
committerDmitry Antipov2014-08-29 20:21:30 +0400
commit42d819e9de99996f09c124244dc577bf264ac350 (patch)
tree579e6d6222e178ad99162a9370d1bb5d15dc845d /src
parent69149b6cc38977bc2584541f745334d1e5b0f3dc (diff)
downloademacs-42d819e9de99996f09c124244dc577bf264ac350.tar.gz
emacs-42d819e9de99996f09c124244dc577bf264ac350.zip
Fix last change to support Darwin/OSX (Bug#18354).
* sysdep.c (sort_vector_compare) [DARWIN_OS || __FreeBSD__]: Conditionally define to match system's qsort_r signature. (sort_vector) [DARWIN_OS || __FreeBSD__]: Likewise in call to qsort_r.
Diffstat (limited to 'src')
-rw-r--r--src/ChangeLog5
-rw-r--r--src/fns.c23
2 files changed, 23 insertions, 5 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index c24ca69536f..2a78c4b4fa9 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -9,6 +9,11 @@
9 * lisp.h (enum Lisp_Save_Type): New member SAVE_TYPE_INT_OBJ. 9 * lisp.h (enum Lisp_Save_Type): New member SAVE_TYPE_INT_OBJ.
10 (make_save_int_obj): Add prototype. 10 (make_save_int_obj): Add prototype.
11 11
12 Fix last change to support Darwin/OSX (Bug#18354).
13 * sysdep.c (sort_vector_compare) [DARWIN_OS || __FreeBSD__]:
14 Conditionally define to match system's qsort_r signature.
15 (sort_vector) [DARWIN_OS || __FreeBSD__]: Likewise in call to qsort_r.
16
122014-08-28 Ken Brown <kbrown@cornell.edu> 172014-08-28 Ken Brown <kbrown@cornell.edu>
13 18
14 Add support for HYBRID_MALLOC, allowing the use of gmalloc before 19 Add support for HYBRID_MALLOC, allowing the use of gmalloc before
diff --git a/src/fns.c b/src/fns.c
index a454341fce6..2b1fb86419d 100644
--- a/src/fns.c
+++ b/src/fns.c
@@ -1876,7 +1876,8 @@ sort_list (Lisp_Object list, Lisp_Object predicate)
1876 return merge (front, back, predicate); 1876 return merge (front, back, predicate);
1877} 1877}
1878 1878
1879/* Using GNU qsort_r, we can pass this as a parameter. */ 1879/* Using GNU qsort_r, we can pass this as a parameter. This also
1880 exists on FreeBSD and Darwin/OSX, but with a different signature. */
1880#ifndef HAVE_QSORT_R 1881#ifndef HAVE_QSORT_R
1881static Lisp_Object sort_vector_predicate; 1882static Lisp_Object sort_vector_predicate;
1882#endif 1883#endif
@@ -1885,16 +1886,22 @@ static Lisp_Object sort_vector_predicate;
1885 1886
1886static int 1887static int
1887#ifdef HAVE_QSORT_R 1888#ifdef HAVE_QSORT_R
1889#if defined (DARWIN_OS) || defined (__FreeBSD__)
1890sort_vector_compare (void *arg, const void *p, const void *q)
1891#elif defined (GNU_LINUX)
1888sort_vector_compare (const void *p, const void *q, void *arg) 1892sort_vector_compare (const void *p, const void *q, void *arg)
1889#else 1893#else /* neither darwin/bsd nor gnu/linux */
1894#error "check how qsort_r comparison function works on your platform"
1895#endif /* DARWIN_OS || __FreeBSD__ */
1896#else /* not HAVE_QSORT_R */
1890sort_vector_compare (const void *p, const void *q) 1897sort_vector_compare (const void *p, const void *q)
1891#endif /* HAVE_QSORT_R */ 1898#endif /* HAVE_QSORT_R */
1892{ 1899{
1893 bool more, less; 1900 bool more, less;
1894 Lisp_Object op, oq, vp, vq; 1901 Lisp_Object op, oq, vp, vq;
1895#ifdef HAVE_QSORT_R 1902#ifdef HAVE_QSORT_R
1896 Lisp_Object sort_vector_predicate = *(Lisp_Object *) arg; 1903 Lisp_Object sort_vector_predicate = *(Lisp_Object *) arg;
1897#endif 1904#endif
1898 1905
1899 op = *(Lisp_Object *) p; 1906 op = *(Lisp_Object *) p;
1900 oq = *(Lisp_Object *) q; 1907 oq = *(Lisp_Object *) q;
@@ -1928,8 +1935,14 @@ sort_vector (Lisp_Object vector, Lisp_Object predicate)
1928 1935
1929 /* Setup predicate and sort. */ 1936 /* Setup predicate and sort. */
1930#ifdef HAVE_QSORT_R 1937#ifdef HAVE_QSORT_R
1938#if defined (DARWIN_OS) || defined (__FreeBSD__)
1939 qsort_r (v, len, word_size, (void *) &predicate, sort_vector_compare);
1940#elif defined (GNU_LINUX)
1931 qsort_r (v, len, word_size, sort_vector_compare, (void *) &predicate); 1941 qsort_r (v, len, word_size, sort_vector_compare, (void *) &predicate);
1932#else 1942#else /* neither darwin/bsd nor gnu/linux */
1943#error "check how qsort_r works on your platform"
1944#endif /* DARWIN_OS || __FreeBSD__ */
1945#else /* not HAVE_QSORT_R */
1933 sort_vector_predicate = predicate; 1946 sort_vector_predicate = predicate;
1934 qsort (v, len, word_size, sort_vector_compare); 1947 qsort (v, len, word_size, sort_vector_compare);
1935#endif /* HAVE_QSORT_R */ 1948#endif /* HAVE_QSORT_R */