From 7421589fc82419836e701e0cd95b1cdf0df37319 Mon Sep 17 00:00:00 2001
From: Paul Eggert <eggert@cs.ucla.edu>
Date: Fri, 29 Aug 2014 13:16:40 -0700
Subject: [PATCH] * sysdep.c (str_collate): Do not look at errno after
 towlower_l.

errno's value is not specified after towlower_l.  Instead, assume
that towlower_l returns its argument on failure, which is portable
in practice.
---
 src/ChangeLog |  7 +++++++
 src/sysdep.c  | 12 ++----------
 2 files changed, 9 insertions(+), 10 deletions(-)

diff --git a/src/ChangeLog b/src/ChangeLog
index 181a43d058f..81381168c0c 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,10 @@
+2014-08-29  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* sysdep.c (str_collate): Do not look at errno after towlower_l.
+	errno's value is not specified after towlower_l.  Instead, assume
+	that towlower_l returns its argument on failure, which is portable
+	in practice.
+
 2014-08-29  Eli Zaretskii  <eliz@gnu.org>
 
 	* fns.c (Fstring_collate_lessp, Fstring_collate_equalp): Doc fix.
diff --git a/src/sysdep.c b/src/sysdep.c
index 52a72385f46..d36f5b29b08 100644
--- a/src/sysdep.c
+++ b/src/sysdep.c
@@ -3746,24 +3746,16 @@ str_collate (Lisp_Object s1, Lisp_Object s2,
 				SSDATA (locale), 0);
       if (!loc)
 	error ("Wrong locale: %s", strerror (errno));
-      errno = 0;
 
       if (! NILP (ignore_case))
 	for (int i = 1; i < 3; i++)
 	  {
 	    wchar_t *p = (i == 1) ? p1 : p2;
 	    for (; *p; p++)
-	      {
-		*p = towlower_l (*p, loc);
-		if (errno)
-		  break;
-	      }
-	    if (errno)
-	      break;
+	      *p = towlower_l (*p, loc);
 	  }
 
-      if (! errno)
-	res = wcscoll_l (p1, p2, loc);
+      res = wcscoll_l (p1, p2, loc);
       err = errno;
       freelocale (loc);
     }
-- 
2.39.5