From f9caea823350640fb03195c73c301f08ce932bd0 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Sat, 30 Aug 2014 15:59:39 -0700 Subject: Vector-sorting fixes. It's not safe to call qsort or qsort_r, since they have undefined behavior if the user-specified predicate is not a total order. Also, watch out for garbage-collection while sorting vectors. * admin/merge-gnulib (GNULIB_MODULES): Add vla. * configure.ac (qsort_r): Remove, as we no longer use qsort-like functions. * lib/gnulib.mk, m4/gnulib-comp.m4: Regenerate. * lib/vla.h, m4/vararrays.m4: New files, copied from gnulib. * lib/stdlib.in.h, m4/stdlib_h.m4: Sync from gnulib, incorporating: 2014-08-29 qsort_r: new module, for GNU-style qsort_r The previous two files' changes are boilerplate generated by admin/merge-gnulib, and should not affect Emacs. * src/fns.c: Include . (sort_vector_predicate) [!HAVE_QSORT_R]: Remove. (sort_vector_compare): Remove, replacing with .... (inorder, merge_vectors, sort_vector_inplace, sort_vector_copy): ... these new functions. (sort_vector): Rewrite to use the new functions. GCPRO locals, since the predicate can invoke the GC. Since it's in-place return void; caller changed. (merge): Use 'inorder', for clarity. Fixes: debbugs:18361 --- admin/merge-gnulib | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'admin/merge-gnulib') diff --git a/admin/merge-gnulib b/admin/merge-gnulib index a11b6e06d27..5b9b716bed2 100755 --- a/admin/merge-gnulib +++ b/admin/merge-gnulib @@ -39,7 +39,7 @@ GNULIB_MODULES=' strftime strtoimax strtoumax symlink sys_stat sys_time time timer-time timespec-add timespec-sub unsetenv update-copyright utimens - warnings + vla warnings ' GNULIB_TOOL_FLAGS=' -- cgit v1.2.1