From 9ef039777b0f9bca6ab147360d3f7e8c686bbe2b Mon Sep 17 00:00:00 2001
From: Jeff Johnston <jjohnstn@redhat.com>
Date: Wed, 27 Oct 2010 19:06:10 +0000
Subject: [PATCH] 2010-10-27  Maurice Baijens  <maurice.baijens@ellips.nl>

        * libc/stdlib/strtol.c: Make sure signed characters are not
        sign-extended when converted to int and passed to ctype macros.
        * libc/stdlib/strtoul.c: Ditto.
        * libc/stdlib/strtoll_r.c: Ditto.
        * libc/stdlib/strtoull_r.c: Ditto.
---
 newlib/ChangeLog                | 8 ++++++++
 newlib/libc/stdlib/strtol.c     | 4 ++--
 newlib/libc/stdlib/strtoll_r.c  | 4 ++--
 newlib/libc/stdlib/strtoul.c    | 4 ++--
 newlib/libc/stdlib/strtoull_r.c | 4 ++--
 5 files changed, 16 insertions(+), 8 deletions(-)

diff --git a/newlib/ChangeLog b/newlib/ChangeLog
index 839c41572..2c10bacc4 100644
--- a/newlib/ChangeLog
+++ b/newlib/ChangeLog
@@ -1,3 +1,11 @@
+2010-10-27  Maurice Baijens  <maurice.baijens@ellips.nl>
+
+	* libc/stdlib/strtol.c: Make sure signed characters are not
+	sign-extended when converted to int and passed to ctype macros.
+	* libc/stdlib/strtoul.c: Ditto.
+	* libc/stdlib/strtoll_r.c: Ditto.
+	* libc/stdlib/strtoull_r.c: Ditto.
+
 2010-10-18  Marco Atzeri  <marco_atzeri@yahoo.it>
 
 	* libm/Makefile.am: added complex functions documentation
diff --git a/newlib/libc/stdlib/strtol.c b/newlib/libc/stdlib/strtol.c
index 4c07e6171..4fcce958f 100644
--- a/newlib/libc/stdlib/strtol.c
+++ b/newlib/libc/stdlib/strtol.c
@@ -137,7 +137,7 @@ _DEFUN (_strtol_r, (rptr, nptr, endptr, base),
 	char **endptr _AND
 	int base)
 {
-	register const char *s = nptr;
+	register const unsigned char *s = (const unsigned char *)nptr;
 	register unsigned long acc;
 	register int c;
 	register unsigned long cutoff;
@@ -208,7 +208,7 @@ _DEFUN (_strtol_r, (rptr, nptr, endptr, base),
 	} else if (neg)
 		acc = -acc;
 	if (endptr != 0)
-		*endptr = (char *) (any ? s - 1 : nptr);
+		*endptr = (char *) (any ? (char *)s - 1 : nptr);
 	return (acc);
 }
 
diff --git a/newlib/libc/stdlib/strtoll_r.c b/newlib/libc/stdlib/strtoll_r.c
index b814f68be..e88fbba3c 100644
--- a/newlib/libc/stdlib/strtoll_r.c
+++ b/newlib/libc/stdlib/strtoll_r.c
@@ -62,7 +62,7 @@ _DEFUN (_strtoll_r, (rptr, nptr, endptr, base),
 	char **endptr _AND
 	int base)
 {
-	register const char *s = nptr;
+	register const unsigned char *s = (const unsigned char *)nptr;
 	register unsigned long long acc;
 	register int c;
 	register unsigned long long cutoff;
@@ -133,7 +133,7 @@ _DEFUN (_strtoll_r, (rptr, nptr, endptr, base),
 	} else if (neg)
 		acc = -acc;
 	if (endptr != 0)
-		*endptr = (char *) (any ? s - 1 : nptr);
+		*endptr = (char *) (any ? (char *)s - 1 : nptr);
 	return (acc);
 }
 
diff --git a/newlib/libc/stdlib/strtoul.c b/newlib/libc/stdlib/strtoul.c
index a3ac09d8e..7fa3a82cf 100644
--- a/newlib/libc/stdlib/strtoul.c
+++ b/newlib/libc/stdlib/strtoul.c
@@ -138,7 +138,7 @@ _DEFUN (_strtoul_r, (rptr, nptr, endptr, base),
 	char **endptr _AND
 	int base)
 {
-	register const char *s = nptr;
+	register const unsigned char *s = (const unsigned char *)nptr;
 	register unsigned long acc;
 	register int c;
 	register unsigned long cutoff;
@@ -188,7 +188,7 @@ _DEFUN (_strtoul_r, (rptr, nptr, endptr, base),
 	} else if (neg)
 		acc = -acc;
 	if (endptr != 0)
-		*endptr = (char *) (any ? s - 1 : nptr);
+		*endptr = (char *) (any ? (char *)s - 1 : nptr);
 	return (acc);
 }
 
diff --git a/newlib/libc/stdlib/strtoull_r.c b/newlib/libc/stdlib/strtoull_r.c
index d8a86b3f4..da7f7f51a 100644
--- a/newlib/libc/stdlib/strtoull_r.c
+++ b/newlib/libc/stdlib/strtoull_r.c
@@ -63,7 +63,7 @@ _DEFUN (_strtoull_r, (rptr, nptr, endptr, base),
 	char **endptr _AND
 	int base)
 {
-	register const char *s = nptr;
+	register const unsigned char *s = (const unsigned char *)nptr;
 	register unsigned long long acc;
 	register int c;
 	register unsigned long long cutoff;
@@ -113,7 +113,7 @@ _DEFUN (_strtoull_r, (rptr, nptr, endptr, base),
 	} else if (neg)
 		acc = -acc;
 	if (endptr != 0)
-		*endptr = (char *) (any ? s - 1 : nptr);
+		*endptr = (char *) (any ? (char *)s - 1 : nptr);
 	return (acc);
 }