From: Paul Eggert Date: Sat, 30 Aug 2014 16:47:19 +0000 (-0700) Subject: * sysdep.c (str_collate): Clear errno just before wcscoll(_l). X-Git-Tag: emacs-25.0.90~2635^2~679^2~388 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=88366fcf88e5bccc4d0bcff798beb3ef27aaa496;p=emacs.git * 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. --- diff --git a/src/ChangeLog b/src/ChangeLog index dece8255a05..b348932f0a9 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,9 @@ +2014-08-30 Paul Eggert + + * 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. + 2014-08-30 Eli Zaretskii * 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, FETCH_STRING_CHAR_ADVANCE (*(p2+i-1), s2, i, i_byte); *(p2+len) = 0; - errno = 0; - if (STRINGP (locale)) { locale_t loc = newlocale (LC_COLLATE_MASK | LC_CTYPE_MASK, @@ -3757,6 +3755,7 @@ str_collate (Lisp_Object s1, Lisp_Object s2, *p = towlower_l (*p, loc); } + errno = 0; res = wcscoll_l (p1, p2, loc); err = errno; freelocale (loc); @@ -3771,6 +3770,7 @@ str_collate (Lisp_Object s1, Lisp_Object s2, *p = towlower (*p); } + errno = 0; res = wcscoll (p1, p2); err = errno; }