diff options
| author | Paul Eggert | 2014-08-30 15:59:39 -0700 |
|---|---|---|
| committer | Paul Eggert | 2014-08-30 15:59:39 -0700 |
| commit | f9caea823350640fb03195c73c301f08ce932bd0 (patch) | |
| tree | be0e02155cf2f218c61379dde8ac98f100553392 /src/ChangeLog | |
| parent | 88366fcf88e5bccc4d0bcff798beb3ef27aaa496 (diff) | |
| download | emacs-f9caea823350640fb03195c73c301f08ce932bd0.tar.gz emacs-f9caea823350640fb03195c73c301f08ce932bd0.zip | |
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 <vla.h>.
(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
Diffstat (limited to 'src/ChangeLog')
| -rw-r--r-- | src/ChangeLog | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/ChangeLog b/src/ChangeLog index b348932f0a9..00ec5dcf3d6 100644 --- a/src/ChangeLog +++ b/src/ChangeLog | |||
| @@ -1,5 +1,19 @@ | |||
| 1 | 2014-08-30 Paul Eggert <eggert@cs.ucla.edu> | 1 | 2014-08-30 Paul Eggert <eggert@cs.ucla.edu> |
| 2 | 2 | ||
| 3 | Vector-sorting fixes (Bug#18361). | ||
| 4 | It's not safe to call qsort or qsort_r, since they have undefined | ||
| 5 | behavior if the user-specified predicate is not a total order. | ||
| 6 | Also, watch out for garbage-collection while sorting vectors. | ||
| 7 | * fns.c: Include <vla.h>. | ||
| 8 | (sort_vector_predicate) [!HAVE_QSORT_R]: Remove. | ||
| 9 | (sort_vector_compare): Remove, replacing with .... | ||
| 10 | (inorder, merge_vectors, sort_vector_inplace, sort_vector_copy): | ||
| 11 | ... these new functions. | ||
| 12 | (sort_vector): Rewrite to use the new functions. | ||
| 13 | GCPRO locals, since the predicate can invoke the GC. | ||
| 14 | Since it's in-place return void; caller changed. | ||
| 15 | (merge): Use 'inorder', for clarity. | ||
| 16 | |||
| 3 | * sysdep.c (str_collate): Clear errno just before wcscoll(_l). | 17 | * sysdep.c (str_collate): Clear errno just before wcscoll(_l). |
| 4 | One can't hoist this out of the 'if', because intervening calls to | 18 | One can't hoist this out of the 'if', because intervening calls to |
| 5 | newlocale, twolower, etc. can change errno. | 19 | newlocale, twolower, etc. can change errno. |