diff options
| author | Paul Eggert | 2014-08-30 09:47:19 -0700 |
|---|---|---|
| committer | Paul Eggert | 2014-08-30 09:47:19 -0700 |
| commit | 88366fcf88e5bccc4d0bcff798beb3ef27aaa496 (patch) | |
| tree | d9ef8381d75ea4f014fd2f0517594a0c609439db /src | |
| parent | 4051f5379cea70610814c61cfa581d9b235ecc46 (diff) | |
| download | emacs-88366fcf88e5bccc4d0bcff798beb3ef27aaa496.tar.gz emacs-88366fcf88e5bccc4d0bcff798beb3ef27aaa496.zip | |
* sysdep.c (str_collate): Clear errno just before wcscoll(_l).
One can't hoist this out of the 'if', because intervening calls to
newlocale, twolower, etc. can change errno.
Diffstat (limited to 'src')
| -rw-r--r-- | src/ChangeLog | 6 | ||||
| -rw-r--r-- | src/sysdep.c | 4 |
2 files changed, 8 insertions, 2 deletions
diff --git a/src/ChangeLog b/src/ChangeLog index dece8255a05..b348932f0a9 100644 --- a/src/ChangeLog +++ b/src/ChangeLog | |||
| @@ -1,3 +1,9 @@ | |||
| 1 | 2014-08-30 Paul Eggert <eggert@cs.ucla.edu> | ||
| 2 | |||
| 3 | * sysdep.c (str_collate): Clear errno just before wcscoll(_l). | ||
| 4 | One can't hoist this out of the 'if', because intervening calls to | ||
| 5 | newlocale, twolower, etc. can change errno. | ||
| 6 | |||
| 1 | 2014-08-30 Eli Zaretskii <eliz@gnu.org> | 7 | 2014-08-30 Eli Zaretskii <eliz@gnu.org> |
| 2 | 8 | ||
| 3 | * sysdep.c (str_collate) [__STDC_ISO_10646__]: Improve the | 9 | * sysdep.c (str_collate) [__STDC_ISO_10646__]: Improve the |
diff --git a/src/sysdep.c b/src/sysdep.c index 8b62c8c4f62..34fd8b1044b 100644 --- a/src/sysdep.c +++ b/src/sysdep.c | |||
| @@ -3740,8 +3740,6 @@ str_collate (Lisp_Object s1, Lisp_Object s2, | |||
| 3740 | FETCH_STRING_CHAR_ADVANCE (*(p2+i-1), s2, i, i_byte); | 3740 | FETCH_STRING_CHAR_ADVANCE (*(p2+i-1), s2, i, i_byte); |
| 3741 | *(p2+len) = 0; | 3741 | *(p2+len) = 0; |
| 3742 | 3742 | ||
| 3743 | errno = 0; | ||
| 3744 | |||
| 3745 | if (STRINGP (locale)) | 3743 | if (STRINGP (locale)) |
| 3746 | { | 3744 | { |
| 3747 | locale_t loc = newlocale (LC_COLLATE_MASK | LC_CTYPE_MASK, | 3745 | locale_t loc = newlocale (LC_COLLATE_MASK | LC_CTYPE_MASK, |
| @@ -3757,6 +3755,7 @@ str_collate (Lisp_Object s1, Lisp_Object s2, | |||
| 3757 | *p = towlower_l (*p, loc); | 3755 | *p = towlower_l (*p, loc); |
| 3758 | } | 3756 | } |
| 3759 | 3757 | ||
| 3758 | errno = 0; | ||
| 3760 | res = wcscoll_l (p1, p2, loc); | 3759 | res = wcscoll_l (p1, p2, loc); |
| 3761 | err = errno; | 3760 | err = errno; |
| 3762 | freelocale (loc); | 3761 | freelocale (loc); |
| @@ -3771,6 +3770,7 @@ str_collate (Lisp_Object s1, Lisp_Object s2, | |||
| 3771 | *p = towlower (*p); | 3770 | *p = towlower (*p); |
| 3772 | } | 3771 | } |
| 3773 | 3772 | ||
| 3773 | errno = 0; | ||
| 3774 | res = wcscoll (p1, p2); | 3774 | res = wcscoll (p1, p2); |
| 3775 | err = errno; | 3775 | err = errno; |
| 3776 | } | 3776 | } |