From 8072fb773c4a41289414c70dcc720dba05659b66 Mon Sep 17 00:00:00 2001
From: Eric Blake <ebb9@byu.net>
Date: Sat, 26 Sep 2009 21:32:14 -0600
Subject: [PATCH] argp: fix test failure

* lib/argp-help.c (hol_entry_cmp): Don't use _tolower on values
that are not upper-case.  Pass correct range to tolower.

Signed-off-by: Eric Blake <ebb9@byu.net>
---
 ChangeLog       |  6 ++++++
 lib/argp-help.c | 12 +++++-------
 2 files changed, 11 insertions(+), 7 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index f7ef1d65d3..86710cee71 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2009-09-28  Eric Blake  <ebb9@byu.net>
+
+	argp: fix test failure
+	* lib/argp-help.c (hol_entry_cmp): Don't use _tolower on values
+	that are not upper-case.  Pass correct range to tolower.
+
 2009-09-27  Jim Meyering  <meyering@redhat.com>
 
 	test-yesno: work around sparc-dash here-document infelicity
diff --git a/lib/argp-help.c b/lib/argp-help.c
index a9843c0aa3..150a0ad28f 100644
--- a/lib/argp-help.c
+++ b/lib/argp-help.c
@@ -1,5 +1,5 @@
 /* Hierarchial argument parsing help output
-   Copyright (C) 1995-2005, 2007 Free Software Foundation, Inc.
+   Copyright (C) 1995-2005, 2007, 2009 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Written by Miles Bader <miles@gnu.ai.mit.edu>.
 
@@ -797,13 +797,11 @@ hol_entry_cmp (const struct hol_entry *entry1,
 	   first, but as they're not displayed, it doesn't matter where
 	   they are.  */
 	{
-	  char first1 = short1 ? short1 : long1 ? *long1 : 0;
-	  char first2 = short2 ? short2 : long2 ? *long2 : 0;
-#ifdef _tolower
-	  int lower_cmp = _tolower (first1) - _tolower (first2);
-#else
+	  unsigned char first1 = short1 ? short1 : long1 ? *long1 : 0;
+	  unsigned char first2 = short2 ? short2 : long2 ? *long2 : 0;
+	  /* Use tolower, not _tolower, since only the former is
+	     guaranteed to work on something already lower case.  */
 	  int lower_cmp = tolower (first1) - tolower (first2);
-#endif
 	  /* Compare ignoring case, except when the options are both the
 	     same letter, in which case lower-case always comes first.  */
 	  return lower_cmp ? lower_cmp :
-- 
2.30.2