diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index cb3f92bfaaf35f77e842165074fe24e836efd2b7..56bca718d7ba092ce3c8f58bc7bc3586f8cd4dd6 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,3 +1,8 @@
+2002-01-30  Loren Rittle <ljrittle@acm.org>
+
+	* config/locale/c_locale_generic.cc: Check errno for ERANGE
+	instead of non-zero to aid portability.
+
 2002-01-30  Peter Schmid  <schmid@snake.iap.physik.tu-darmstadt.de>
 
 	* docs/html/22_locale/messages.html: Fix example code.
diff --git a/libstdc++-v3/config/locale/c_locale_generic.cc b/libstdc++-v3/config/locale/c_locale_generic.cc
index 4a8770e5fe5c7ba04ffb093735aa8228c3ac17e4..0d601aeb21455a95720ae2b021624d1391dfa691 100644
--- a/libstdc++-v3/config/locale/c_locale_generic.cc
+++ b/libstdc++-v3/config/locale/c_locale_generic.cc
@@ -48,7 +48,7 @@ namespace std
 	char* __sanity;
 	errno = 0;
 	long __l = strtol(__s, &__sanity, __base);
-	if (__sanity != __s && *__sanity == '\0' && errno == 0)
+	if (__sanity != __s && *__sanity == '\0' && errno != ERANGE)
 	  __v = __l;
 	else
 	  __err |= ios_base::failbit;
@@ -65,7 +65,7 @@ namespace std
 	  char* __sanity;
 	  errno = 0;
 	  unsigned long __ul = strtoul(__s, &__sanity, __base);
-          if (__sanity != __s && *__sanity == '\0' && errno == 0)
+          if (__sanity != __s && *__sanity == '\0' && errno != ERANGE)
 	    __v = __ul;
 	  else
 	    __err |= ios_base::failbit;
@@ -83,7 +83,7 @@ namespace std
 	  char* __sanity;
 	  errno = 0;
 	  long long __ll = strtoll(__s, &__sanity, __base);
-          if (__sanity != __s && *__sanity == '\0' && errno == 0)
+          if (__sanity != __s && *__sanity == '\0' && errno != ERANGE)
 	    __v = __ll;
 	  else
 	    __err |= ios_base::failbit;
@@ -100,7 +100,7 @@ namespace std
 	  char* __sanity;
 	  errno = 0;
 	  unsigned long long __ull = strtoull(__s, &__sanity, __base);
-          if (__sanity != __s && *__sanity == '\0' && errno == 0)
+          if (__sanity != __s && *__sanity == '\0' && errno != ERANGE)
 	    __v = __ull;
 	  else
 	    __err |= ios_base::failbit;
@@ -124,7 +124,7 @@ namespace std
 #else
 	  float __f = static_cast<float>(strtod(__s, &__sanity));
 #endif
-          if (__sanity != __s && *__sanity == '\0' && errno == 0)
+          if (__sanity != __s && *__sanity == '\0' && errno != ERANGE)
 	    __v = __f;
 	  else
 	    __err |= ios_base::failbit;
@@ -144,7 +144,7 @@ namespace std
 	  char* __sanity;
 	  errno = 0;
 	  double __d = strtod(__s, &__sanity);
-          if (__sanity != __s && *__sanity == '\0' && errno == 0)
+          if (__sanity != __s && *__sanity == '\0' && errno != ERANGE)
 	    __v = __d;
 	  else
 	    __err |= ios_base::failbit;
@@ -165,7 +165,7 @@ namespace std
 	  char* __sanity;
 	  errno = 0;
 	  long double __ld = strtold(__s, &__sanity);
-          if (__sanity != __s && *__sanity == '\0' && errno == 0)
+          if (__sanity != __s && *__sanity == '\0' && errno != ERANGE)
 	    __v = __ld;
 #else
 	  typedef char_traits<char>::int_type int_type;