[PATCH/RFA] Extended wctomb/mbtowc conversion and more stuff

Corinna Vinschen vinschen@redhat.com
Sun Mar 22 17:06:00 GMT 2009


On Mar 22 17:30, Corinna Vinschen wrote:
> Ok,
> 
> this is the new patch about the extended wctomb_r/mbtowc_r stuff.
> [...]
> Again, the patch is split in two.  The first one containing all changes
> except those in ctype, the second one containg the ctype changes.

This is part two of the patch, just the ctype stuff.


Corinna


Index: libc/ctype/iswalpha.c
===================================================================
RCS file: /cvs/src/src/newlib/libc/ctype/iswalpha.c,v
retrieving revision 1.5
diff -u -p -r1.5 iswalpha.c
--- libc/ctype/iswalpha.c	3 Mar 2009 09:28:44 -0000	1.5
+++ libc/ctype/iswalpha.c	22 Mar 2009 16:25:06 -0000
@@ -70,270 +70,253 @@ int
 _DEFUN(iswalpha,(c), wint_t c)
 {
 #ifdef _MB_CAPABLE
-  int unicode = 0;
+  unsigned const char *table;
+  unsigned char *ptr;
+  unsigned char ctmp;
+  int size;
+  wint_t x;
 
   if (!strcmp (__locale_charset (), "JIS"))
-    {
-      c = __jp2uc (c, JP_JIS);
-      unicode = 1;
-    }
+    c = __jp2uc (c, JP_JIS);
   else if (!strcmp (__locale_charset (), "SJIS"))
-    {
-      c = __jp2uc (c, JP_SJIS);
-      unicode = 1;
-    }
+    c = __jp2uc (c, JP_SJIS);
   else if (!strcmp (__locale_charset (), "EUCJP"))
+    c = __jp2uc (c, JP_EUCJP);
+
+  x = (c >> 8);
+  /* for some large sections, all characters are alphabetic so handle them here */
+  if ((x >= 0x34 && x <= 0x4c) ||
+      (x >= 0x4e && x <= 0x9e) ||
+      (x >= 0xac && x <= 0xd6) ||
+      (x >= 0x200 && x <= 0x2a5))
+    return 1;
+  
+  switch (x)
     {
-      c = __jp2uc (c, JP_EUCJP);
-      unicode = 1;
-    }
-  else if (!strcmp (__locale_charset (), "UTF-8"))
-    {
-      unicode = 1;
+    case 0x00:
+      table = u0;
+      size = sizeof(u0);
+      break;
+    case 0x01:
+    case 0x15:
+    case 0xa0:
+    case 0xa1:
+    case 0xa2:
+    case 0xa3:
+    case 0xf9:
+    case 0xfc:
+    case 0x2f8:
+    case 0x2f9:
+      return 1;
+    case 0x02:
+      table = u2;
+      size = sizeof(u2);
+      break;
+    case 0x03:
+      table = u3;
+      size = sizeof(u3);
+      break;
+    case 0x04:
+      table = u4;
+      size = sizeof(u4);
+      break;
+    case 0x05:
+      table = u5;
+      size = sizeof(u5);
+      break;
+    case 0x06:
+      table = u6;
+      size = sizeof(u6);
+      break;
+    case 0x07:
+      table = u7;
+      size = sizeof(u7);
+      break;
+    case 0x09:
+      table = u9;
+      size = sizeof(u9);
+      break;
+    case 0x0a:
+      table = ua;
+      size = sizeof(ua);
+      break;
+    case 0x0b:
+      table = ub;
+      size = sizeof(ub);
+      break;
+    case 0x0c:
+      table = uc;
+      size = sizeof(uc);
+      break;
+    case 0x0d:
+      table = ud;
+      size = sizeof(ud);
+      break;
+    case 0x0e:
+      table = ue;
+      size = sizeof(ue);
+      break;
+    case 0x0f:
+      table = uf;
+      size = sizeof(uf);
+      break;
+    case 0x10:
+      table = u10;
+      size = sizeof(u10);
+      break;
+    case 0x11:
+      table = u11;
+      size = sizeof(u11);
+      break;
+    case 0x12:
+      table = u12;
+      size = sizeof(u12);
+      break;
+    case 0x13:
+      table = u13;
+      size = sizeof(u13);
+      break;
+    case 0x14:
+      table = u14;
+      size = sizeof(u14);
+      break;
+    case 0x16:
+      table = u16;
+      size = sizeof(u16);
+      break;
+    case 0x17:
+      table = u17;
+      size = sizeof(u17);
+      break;
+    case 0x18:
+      table = u18;
+      size = sizeof(u18);
+      break;
+    case 0x1e:
+      table = u1e;
+      size = sizeof(u1e);
+      break;
+    case 0x1f:
+      table = u1f;
+      size = sizeof(u1f);
+      break;
+    case 0x20:
+      table = u20;
+      size = sizeof(u20);
+      break;
+    case 0x21:
+      table = u21;
+      size = sizeof(u21);
+      break;
+    case 0x24:
+      table = u24;
+      size = sizeof(u24);
+      break;
+    case 0x30:
+      table = u30;
+      size = sizeof(u30);
+      break;
+    case 0x31:
+      table = u31;
+      size = sizeof(u31);
+      break;
+    case 0x4d:
+      table = u4d;
+      size = sizeof(u4d);
+      break;
+    case 0x9f:
+      table = u9f;
+      size = sizeof(u9f);
+      break;
+    case 0xa4:
+      table = ua4;
+      size = sizeof(ua4);
+      break;
+    case 0xd7:
+      table = ud7;
+      size = sizeof(ud7);
+      break;
+    case 0xfa:
+      table = ufa;
+      size = sizeof(ufa);
+      break;
+    case 0xfb:
+      table = ufb;
+      size = sizeof(ufb);
+      break;
+    case 0xfd:
+      table = ufd;
+      size = sizeof(ufd);
+      break;
+    case 0xfe:
+      table = ufe;
+      size = sizeof(ufe);
+      break;
+    case 0xff:
+      table = uff;
+      size = sizeof(uff);
+      break;
+    case 0x103:
+      table = u103;
+      size = sizeof(u103);
+      break;
+    case 0x104:
+      table = u104;
+      size = sizeof(u104);
+      break;
+    case 0x1d4:
+      table = u1d4;
+      size = sizeof(u1d4);
+      break;
+    case 0x1d5:
+      table = u1d5;
+      size = sizeof(u1d5);
+      break;
+    case 0x1d6:
+      table = u1d6;
+      size = sizeof(u1d6);
+      break;
+    case 0x1d7:
+      table = u1d7;
+      size = sizeof(u1d7);
+      break;
+    case 0x2a6:
+      table = u2a6;
+      size = sizeof(u2a6);
+      break;
+    case 0x2fa:
+      table = u2fa;
+      size = sizeof(u2fa);
+      break;
+    default:
+      return 0;
     }
-
-  if (unicode)
+  /* we have narrowed down to a section of 256 characters to check */
+  /* now check if c matches the alphabetic wide-chars within that section */
+  ptr = (unsigned char *)table;
+  ctmp = (unsigned char)c;
+  while (ptr < table + size)
     {
-      unsigned const char *table;
-      unsigned char *ptr;
-      unsigned char ctmp;
-      int size;
-      wint_t x = (c >> 8);
-      
-      /* for some large sections, all characters are alphabetic so handle them here */
-      if ((x >= 0x34 && x <= 0x4c) ||
-	  (x >= 0x4e && x <= 0x9e) ||
-	  (x >= 0xac && x <= 0xd6) ||
-	  (x >= 0x200 && x <= 0x2a5))
+      if (ctmp == *ptr)
 	return 1;
-      
-      switch (x)
-	{
-	case 0x00:
-	  table = u0;
-	  size = sizeof(u0);
-	  break;
-	case 0x01:
-	case 0x15:
-	case 0xa0:
-	case 0xa1:
-	case 0xa2:
-	case 0xa3:
-	case 0xf9:
-	case 0xfc:
-	case 0x2f8:
-	case 0x2f9:
-	  return 1;
-	case 0x02:
-	  table = u2;
-	  size = sizeof(u2);
-	  break;
-	case 0x03:
-	  table = u3;
-	  size = sizeof(u3);
-	  break;
-	case 0x04:
-	  table = u4;
-	  size = sizeof(u4);
-	  break;
-	case 0x05:
-	  table = u5;
-	  size = sizeof(u5);
-	  break;
-	case 0x06:
-	  table = u6;
-	  size = sizeof(u6);
-	  break;
-	case 0x07:
-	  table = u7;
-	  size = sizeof(u7);
-	  break;
-	case 0x09:
-	  table = u9;
-	  size = sizeof(u9);
-	  break;
-	case 0x0a:
-	  table = ua;
-	  size = sizeof(ua);
-	  break;
-	case 0x0b:
-	  table = ub;
-	  size = sizeof(ub);
-	  break;
-	case 0x0c:
-	  table = uc;
-	  size = sizeof(uc);
-	  break;
-	case 0x0d:
-	  table = ud;
-	  size = sizeof(ud);
-	  break;
-	case 0x0e:
-	  table = ue;
-	  size = sizeof(ue);
-	  break;
-	case 0x0f:
-	  table = uf;
-	  size = sizeof(uf);
-	  break;
-	case 0x10:
-	  table = u10;
-	  size = sizeof(u10);
-	  break;
-	case 0x11:
-	  table = u11;
-	  size = sizeof(u11);
-	  break;
-	case 0x12:
-	  table = u12;
-	  size = sizeof(u12);
-	  break;
-	case 0x13:
-	  table = u13;
-	  size = sizeof(u13);
-	  break;
-	case 0x14:
-	  table = u14;
-	  size = sizeof(u14);
-	  break;
-	case 0x16:
-	  table = u16;
-	  size = sizeof(u16);
-	  break;
-	case 0x17:
-	  table = u17;
-	  size = sizeof(u17);
-	  break;
-	case 0x18:
-	  table = u18;
-	  size = sizeof(u18);
-	  break;
-	case 0x1e:
-	  table = u1e;
-	  size = sizeof(u1e);
-	  break;
-	case 0x1f:
-	  table = u1f;
-	  size = sizeof(u1f);
-	  break;
-	case 0x20:
-	  table = u20;
-	  size = sizeof(u20);
-	  break;
-	case 0x21:
-	  table = u21;
-	  size = sizeof(u21);
-	  break;
-	case 0x24:
-	  table = u24;
-	  size = sizeof(u24);
-	  break;
-	case 0x30:
-	  table = u30;
-	  size = sizeof(u30);
-	  break;
-	case 0x31:
-	  table = u31;
-	  size = sizeof(u31);
-	  break;
-	case 0x4d:
-	  table = u4d;
-	  size = sizeof(u4d);
-	  break;
-	case 0x9f:
-	  table = u9f;
-	  size = sizeof(u9f);
-	  break;
-	case 0xa4:
-	  table = ua4;
-	  size = sizeof(ua4);
-	  break;
-	case 0xd7:
-	  table = ud7;
-	  size = sizeof(ud7);
-	  break;
-	case 0xfa:
-	  table = ufa;
-	  size = sizeof(ufa);
-	  break;
-	case 0xfb:
-	  table = ufb;
-	  size = sizeof(ufb);
-	  break;
-	case 0xfd:
-	  table = ufd;
-	  size = sizeof(ufd);
-	  break;
-	case 0xfe:
-	  table = ufe;
-	  size = sizeof(ufe);
-	  break;
-	case 0xff:
-	  table = uff;
-	  size = sizeof(uff);
-	  break;
-	case 0x103:
-	  table = u103;
-	  size = sizeof(u103);
-	  break;
-	case 0x104:
-	  table = u104;
-	  size = sizeof(u104);
-	  break;
-	case 0x1d4:
-	  table = u1d4;
-	  size = sizeof(u1d4);
-	  break;
-	case 0x1d5:
-	  table = u1d5;
-	  size = sizeof(u1d5);
-	  break;
-	case 0x1d6:
-	  table = u1d6;
-	  size = sizeof(u1d6);
-	  break;
-	case 0x1d7:
-	  table = u1d7;
-	  size = sizeof(u1d7);
-	  break;
-	case 0x2a6:
-	  table = u2a6;
-	  size = sizeof(u2a6);
-	  break;
-	case 0x2fa:
-	  table = u2fa;
-	  size = sizeof(u2fa);
-	  break;
-	default:
-	  return 0;
-	}
-      /* we have narrowed down to a section of 256 characters to check */
-      /* now check if c matches the alphabetic wide-chars within that section */
-      ptr = (unsigned char *)table;
-      ctmp = (unsigned char)c;
-      while (ptr < table + size)
+      if (ctmp < *ptr)
+	return 0;
+      /* otherwise c > *ptr */
+      /* look for 0x0 as next element which indicates a range */
+      ++ptr;
+      if (*ptr == 0x0)
 	{
-	  if (ctmp == *ptr)
+	  /* we have a range..see if c falls within range */
+	  ++ptr;
+	  if (ctmp <= *ptr)
 	    return 1;
-	  if (ctmp < *ptr)
-	    return 0;
-	  /* otherwise c > *ptr */
-	  /* look for 0x0 as next element which indicates a range */
 	  ++ptr;
-	  if (*ptr == 0x0)
-	    {
-	      /* we have a range..see if c falls within range */
-	      ++ptr;
-	      if (ctmp <= *ptr)
-		return 1;
-	      ++ptr;
-	    }
 	}
-      /* not in table */
-      return 0;
     }
-#endif /* _MB_CAPABLE */
-
+  /* not in table */
+  return 0;
+#else
   return (c < (wint_t)0x100 ? isalpha (c) : 0);
+#endif /* _MB_CAPABLE */
 }
 
Index: libc/ctype/iswblank.c
===================================================================
RCS file: /cvs/src/src/newlib/libc/ctype/iswblank.c,v
retrieving revision 1.5
diff -u -p -r1.5 iswblank.c
--- libc/ctype/iswblank.c	3 Mar 2009 09:28:45 -0000	1.5
+++ libc/ctype/iswblank.c	22 Mar 2009 16:25:06 -0000
@@ -66,37 +66,18 @@ int
 _DEFUN(iswblank,(c), wint_t c)
 {
 #ifdef _MB_CAPABLE
-  int unicode = 0;
-
   if (!strcmp (__locale_charset (), "JIS"))
-    {
-      c = __jp2uc (c, JP_JIS);
-      unicode = 1;
-    }
+    c = __jp2uc (c, JP_JIS);
   else if (!strcmp (__locale_charset (), "SJIS"))
-    {
-      c = __jp2uc (c, JP_SJIS);
-      unicode = 1;
-    }
+    c = __jp2uc (c, JP_SJIS);
   else if (!strcmp (__locale_charset (), "EUCJP"))
-    {
-      c = __jp2uc (c, JP_EUCJP);
-      unicode = 1;
-    }
-  else if (!strcmp (__locale_charset (), "UTF-8"))
-    {
-      unicode = 1;
-    }
-
-  if (unicode)
-    {
-      return (c == 0x0009 || c == 0x0020 || c == 0x1680 ||
-              (c >= 0x2000 && c <= 0x2006) ||
-              (c >= 0x2008 && c <= 0x200b) ||
-              c == 0x205f || c == 0x3000);
-    }
-#endif /* _MB_CAPABLE */
-
+    c = __jp2uc (c, JP_EUCJP);
+  return (c == 0x0009 || c == 0x0020 || c == 0x1680 ||
+	  (c >= 0x2000 && c <= 0x2006) ||
+	  (c >= 0x2008 && c <= 0x200b) ||
+	  c == 0x205f || c == 0x3000);
+#else
   return (c < 0x100 ? isblank (c) : 0);
+#endif /* _MB_CAPABLE */
 }
 
Index: libc/ctype/iswcntrl.c
===================================================================
RCS file: /cvs/src/src/newlib/libc/ctype/iswcntrl.c,v
retrieving revision 1.5
diff -u -p -r1.5 iswcntrl.c
--- libc/ctype/iswcntrl.c	3 Mar 2009 09:28:45 -0000	1.5
+++ libc/ctype/iswcntrl.c	22 Mar 2009 16:25:06 -0000
@@ -66,36 +66,17 @@ int
 _DEFUN(iswcntrl,(c), wint_t c)
 {
 #ifdef _MB_CAPABLE
-  int unicode = 0;
-
   if (!strcmp (__locale_charset (), "JIS"))
-    {
-      c = __jp2uc (c, JP_JIS);
-      unicode = 1;
-    }
+    c = __jp2uc (c, JP_JIS);
   else if (!strcmp (__locale_charset (), "SJIS"))
-    {
-      c = __jp2uc (c, JP_SJIS);
-      unicode = 1;
-    }
+    c = __jp2uc (c, JP_SJIS);
   else if (!strcmp (__locale_charset (), "EUCJP"))
-    {
-      c = __jp2uc (c, JP_EUCJP);
-      unicode = 1;
-    }
-  else if (!strcmp (__locale_charset (), "UTF-8"))
-    {
-      unicode = 1;
-    }
-
-  if (unicode)
-    {
-      return ((c >= 0x0000 && c <= 0x001f) || 
-              (c >= 0x007f && c <= 0x009f) ||
-              c == 0x2028 || c == 0x2029);
-    }
-#endif /* _MB_CAPABLE */
-
+    c = __jp2uc (c, JP_EUCJP);
+  return ((c >= 0x0000 && c <= 0x001f) || 
+	  (c >= 0x007f && c <= 0x009f) ||
+	  c == 0x2028 || c == 0x2029);
+#else
   return (c < 0x100 ? iscntrl (c) : 0);
+#endif /* _MB_CAPABLE */
 }
 
Index: libc/ctype/iswprint.c
===================================================================
RCS file: /cvs/src/src/newlib/libc/ctype/iswprint.c,v
retrieving revision 1.5
diff -u -p -r1.5 iswprint.c
--- libc/ctype/iswprint.c	3 Mar 2009 09:28:45 -0000	1.5
+++ libc/ctype/iswprint.c	22 Mar 2009 16:25:06 -0000
@@ -70,325 +70,308 @@ int
 _DEFUN(iswprint,(c), wint_t c)
 {
 #ifdef _MB_CAPABLE
-  int unicode = 0;
-
+  unsigned const char *table;
+  unsigned char *ptr;
+  unsigned char ctmp;
+  int size;
+  wint_t x;
+  
   if (!strcmp (__locale_charset (), "JIS"))
-    {
-      c = __jp2uc (c, JP_JIS);
-      unicode = 1;
-    }
+    c = __jp2uc (c, JP_JIS);
   else if (!strcmp (__locale_charset (), "SJIS"))
-    {
-      c = __jp2uc (c, JP_SJIS);
-      unicode = 1;
-    }
+    c = __jp2uc (c, JP_SJIS);
   else if (!strcmp (__locale_charset (), "EUCJP"))
+    c = __jp2uc (c, JP_EUCJP);
+
+  x = (c >> 8);
+  /* for some large sections, all characters are printuation so handle them here */
+  if ((x >= 0x34 && x <= 0x4c) ||
+      (x >= 0x4e && x <= 0x9e) ||
+      (x >= 0xac && x <= 0xd6) ||
+      (x >= 0xe0 && x <= 0xf9) ||
+      (x >= 0x200 && x <= 0x2a5) ||
+      (x >= 0xf00 && x <= 0xffe) ||
+      (x >= 0x1000 && x <= 0x10fe))
+    return 1;
+  
+  switch (x)
     {
-      c = __jp2uc (c, JP_EUCJP);
-      unicode = 1;
+    case 0x01:
+    case 0x15:
+    case 0x22:
+    case 0x25:
+    case 0x28:
+    case 0x29:
+    case 0x2a:
+    case 0xa0:
+    case 0xa1:
+    case 0xa2:
+    case 0xa3:
+    case 0xfc:
+    case 0x2f8:
+    case 0x2f9:
+      return 1;
+    case 0x00:
+      table = u0;
+      size = sizeof(u0);
+      break;
+    case 0x02:
+      table = u2;
+      size = sizeof(u2);
+      break;
+    case 0x03:
+      table = u3;
+      size = sizeof(u3);
+      break;
+    case 0x04:
+      table = u4;
+      size = sizeof(u4);
+      break;
+    case 0x05:
+      table = u5;
+      size = sizeof(u5);
+      break;
+    case 0x06:
+      table = u6;
+      size = sizeof(u6);
+      break;
+    case 0x07:
+      table = u7;
+      size = sizeof(u7);
+      break;
+    case 0x09:
+      table = u9;
+      size = sizeof(u9);
+      break;
+    case 0x0a:
+      table = ua;
+      size = sizeof(ua);
+      break;
+    case 0x0b:
+      table = ub;
+      size = sizeof(ub);
+      break;
+    case 0x0c:
+      table = uc;
+      size = sizeof(uc);
+      break;
+    case 0x0d:
+      table = ud;
+      size = sizeof(ud);
+      break;
+    case 0x0e:
+      table = ue;
+      size = sizeof(ue);
+      break;
+    case 0x0f:
+      table = uf;
+      size = sizeof(uf);
+      break;
+    case 0x10:
+      table = u10;
+      size = sizeof(u10);
+      break;
+    case 0x11:
+      table = u11;
+      size = sizeof(u11);
+      break;
+    case 0x12:
+      table = u12;
+      size = sizeof(u12);
+      break;
+    case 0x13:
+      table = u13;
+      size = sizeof(u13);
+      break;
+    case 0x14:
+      table = u14;
+      size = sizeof(u14);
+      break;
+    case 0x16:
+      table = u16;
+      size = sizeof(u16);
+      break;
+    case 0x17:
+      table = u17;
+      size = sizeof(u17);
+      break;
+    case 0x18:
+      table = u18;
+      size = sizeof(u18);
+      break;
+    case 0x1e:
+      table = u1e;
+      size = sizeof(u1e);
+      break;
+    case 0x1f:
+      table = u1f;
+      size = sizeof(u1f);
+      break;
+    case 0x20:
+      table = u20;
+      size = sizeof(u20);
+      break;
+    case 0x21:
+      table = u21;
+      size = sizeof(u21);
+      break;
+    case 0x23:
+      table = u23;
+      size = sizeof(u23);
+      break;
+    case 0x24:
+      table = u24;
+      size = sizeof(u24);
+      break;
+    case 0x26:
+      table = u26;
+      size = sizeof(u26);
+      break;
+    case 0x27:
+      table = u27;
+      size = sizeof(u27);
+      break;
+    case 0x2e:
+      table = u2e;
+      size = sizeof(u2e);
+      break;
+    case 0x2f:
+      table = u2f;
+      size = sizeof(u2f);
+      break;
+    case 0x30:
+      table = u30;
+      size = sizeof(u30);
+      break;
+    case 0x31:
+      table = u31;
+      size = sizeof(u31);
+      break;
+    case 0x32:
+      table = u32;
+      size = sizeof(u32);
+      break;
+    case 0x33:
+      table = u33;
+      size = sizeof(u33);
+      break;
+    case 0x4d:
+      table = u4d;
+      size = sizeof(u4d);
+      break;
+    case 0x9f:
+      table = u9f;
+      size = sizeof(u9f);
+      break;
+    case 0xa4:
+      table = ua4;
+      size = sizeof(ua4);
+      break;
+    case 0xd7:
+      table = ud7;
+      size = sizeof(ud7);
+      break;
+    case 0xfa:
+      table = ufa;
+      size = sizeof(ufa);
+      break;
+    case 0xfb:
+      table = ufb;
+      size = sizeof(ufb);
+      break;
+    case 0xfd:
+      table = ufd;
+      size = sizeof(ufd);
+      break;
+    case 0xfe:
+      table = ufe;
+      size = sizeof(ufe);
+      break;
+    case 0xff:
+      table = uff;
+      size = sizeof(uff);
+      break;
+    case 0x103:
+      table = u103;
+      size = sizeof(u103);
+      break;
+    case 0x104:
+      table = u104;
+      size = sizeof(u104);
+      break;
+    case 0x1d0:
+      table = u1d0;
+      size = sizeof(u1d0);
+      break;
+    case 0x1d1:
+      table = u1d1;
+      size = sizeof(u1d1);
+      break;
+    case 0x1d4:
+      table = u1d4;
+      size = sizeof(u1d4);
+      break;
+    case 0x1d5:
+      table = u1d5;
+      size = sizeof(u1d5);
+      break;
+    case 0x1d6:
+      table = u1d6;
+      size = sizeof(u1d6);
+      break;
+    case 0x1d7:
+      table = u1d7;
+      size = sizeof(u1d7);
+      break;
+    case 0x2a6:
+      table = u2a6;
+      size = sizeof(u2a6);
+      break;
+    case 0x2fa:
+      table = u2fa;
+      size = sizeof(u2fa);
+      break;
+    case 0xe00:
+      table = ue00;
+      size = sizeof(ue00);
+      break;
+    case 0xfff:
+      table = ufff;
+      size = sizeof(ufff);
+      break;
+    case 0x10ff:
+      table = u10ff;
+      size = sizeof(u10ff);
+      break;
+    default:
+      return 0;
     }
-  else if (!strcmp (__locale_charset (), "UTF-8"))
+  /* we have narrowed down to a section of 256 characters to check */
+  /* now check if c matches the printuation wide-chars within that section */
+  ptr = (unsigned char *)table;
+  ctmp = (unsigned char)c;
+  while (ptr < table + size)
     {
-      unicode = 1;
-    }
-
-  if (unicode)
-    {
-      unsigned const char *table;
-      unsigned char *ptr;
-      unsigned char ctmp;
-      int size;
-      wint_t x = (c >> 8);
-      
-      /* for some large sections, all characters are printuation so handle them here */
-      if ((x >= 0x34 && x <= 0x4c) ||
-	  (x >= 0x4e && x <= 0x9e) ||
-	  (x >= 0xac && x <= 0xd6) ||
-	  (x >= 0xe0 && x <= 0xf9) ||
-	  (x >= 0x200 && x <= 0x2a5) ||
-	  (x >= 0xf00 && x <= 0xffe) ||
-	  (x >= 0x1000 && x <= 0x10fe))
+      if (ctmp == *ptr)
 	return 1;
-      
-      switch (x)
-	{
-	case 0x01:
-	case 0x15:
-	case 0x22:
-	case 0x25:
-	case 0x28:
-	case 0x29:
-	case 0x2a:
-	case 0xa0:
-	case 0xa1:
-	case 0xa2:
-	case 0xa3:
-	case 0xfc:
-	case 0x2f8:
-	case 0x2f9:
-	  return 1;
-	case 0x00:
-	  table = u0;
-	  size = sizeof(u0);
-	  break;
-	case 0x02:
-	  table = u2;
-	  size = sizeof(u2);
-	  break;
-	case 0x03:
-	  table = u3;
-	  size = sizeof(u3);
-	  break;
-	case 0x04:
-	  table = u4;
-	  size = sizeof(u4);
-	  break;
-	case 0x05:
-	  table = u5;
-	  size = sizeof(u5);
-	  break;
-	case 0x06:
-	  table = u6;
-	  size = sizeof(u6);
-	  break;
-	case 0x07:
-	  table = u7;
-	  size = sizeof(u7);
-	  break;
-	case 0x09:
-	  table = u9;
-	  size = sizeof(u9);
-	  break;
-	case 0x0a:
-	  table = ua;
-	  size = sizeof(ua);
-	  break;
-	case 0x0b:
-	  table = ub;
-	  size = sizeof(ub);
-	  break;
-	case 0x0c:
-	  table = uc;
-	  size = sizeof(uc);
-	  break;
-	case 0x0d:
-	  table = ud;
-	  size = sizeof(ud);
-	  break;
-	case 0x0e:
-	  table = ue;
-	  size = sizeof(ue);
-	  break;
-	case 0x0f:
-	  table = uf;
-	  size = sizeof(uf);
-	  break;
-	case 0x10:
-	  table = u10;
-	  size = sizeof(u10);
-	  break;
-	case 0x11:
-	  table = u11;
-	  size = sizeof(u11);
-	  break;
-	case 0x12:
-	  table = u12;
-	  size = sizeof(u12);
-	  break;
-	case 0x13:
-	  table = u13;
-	  size = sizeof(u13);
-	  break;
-	case 0x14:
-	  table = u14;
-	  size = sizeof(u14);
-	  break;
-	case 0x16:
-	  table = u16;
-	  size = sizeof(u16);
-	  break;
-	case 0x17:
-	  table = u17;
-	  size = sizeof(u17);
-	  break;
-	case 0x18:
-	  table = u18;
-	  size = sizeof(u18);
-	  break;
-	case 0x1e:
-	  table = u1e;
-	  size = sizeof(u1e);
-	  break;
-	case 0x1f:
-	  table = u1f;
-	  size = sizeof(u1f);
-	  break;
-	case 0x20:
-	  table = u20;
-	  size = sizeof(u20);
-	  break;
-	case 0x21:
-	  table = u21;
-	  size = sizeof(u21);
-	  break;
-	case 0x23:
-	  table = u23;
-	  size = sizeof(u23);
-	  break;
-	case 0x24:
-	  table = u24;
-	  size = sizeof(u24);
-	  break;
-	case 0x26:
-	  table = u26;
-	  size = sizeof(u26);
-	  break;
-	case 0x27:
-	  table = u27;
-	  size = sizeof(u27);
-	  break;
-	case 0x2e:
-	  table = u2e;
-	  size = sizeof(u2e);
-	  break;
-	case 0x2f:
-	  table = u2f;
-	  size = sizeof(u2f);
-	  break;
-	case 0x30:
-	  table = u30;
-	  size = sizeof(u30);
-	  break;
-	case 0x31:
-	  table = u31;
-	  size = sizeof(u31);
-	  break;
-	case 0x32:
-	  table = u32;
-	  size = sizeof(u32);
-	  break;
-	case 0x33:
-	  table = u33;
-	  size = sizeof(u33);
-	  break;
-	case 0x4d:
-	  table = u4d;
-	  size = sizeof(u4d);
-	  break;
-	case 0x9f:
-	  table = u9f;
-	  size = sizeof(u9f);
-	  break;
-	case 0xa4:
-	  table = ua4;
-	  size = sizeof(ua4);
-	  break;
-	case 0xd7:
-	  table = ud7;
-	  size = sizeof(ud7);
-	  break;
-	case 0xfa:
-	  table = ufa;
-	  size = sizeof(ufa);
-	  break;
-	case 0xfb:
-	  table = ufb;
-	  size = sizeof(ufb);
-	  break;
-	case 0xfd:
-	  table = ufd;
-	  size = sizeof(ufd);
-	  break;
-	case 0xfe:
-	  table = ufe;
-	  size = sizeof(ufe);
-	  break;
-	case 0xff:
-	  table = uff;
-	  size = sizeof(uff);
-	  break;
-	case 0x103:
-	  table = u103;
-	  size = sizeof(u103);
-	  break;
-	case 0x104:
-	  table = u104;
-	  size = sizeof(u104);
-	  break;
-	case 0x1d0:
-	  table = u1d0;
-	  size = sizeof(u1d0);
-	  break;
-	case 0x1d1:
-	  table = u1d1;
-	  size = sizeof(u1d1);
-	  break;
-	case 0x1d4:
-	  table = u1d4;
-	  size = sizeof(u1d4);
-	  break;
-	case 0x1d5:
-	  table = u1d5;
-	  size = sizeof(u1d5);
-	  break;
-	case 0x1d6:
-	  table = u1d6;
-	  size = sizeof(u1d6);
-	  break;
-	case 0x1d7:
-	  table = u1d7;
-	  size = sizeof(u1d7);
-	  break;
-	case 0x2a6:
-	  table = u2a6;
-	  size = sizeof(u2a6);
-	  break;
-	case 0x2fa:
-	  table = u2fa;
-	  size = sizeof(u2fa);
-	  break;
-	case 0xe00:
-	  table = ue00;
-	  size = sizeof(ue00);
-	  break;
-	case 0xfff:
-	  table = ufff;
-	  size = sizeof(ufff);
-	  break;
-	case 0x10ff:
-	  table = u10ff;
-	  size = sizeof(u10ff);
-	  break;
-	default:
-	  return 0;
-	}
-      /* we have narrowed down to a section of 256 characters to check */
-      /* now check if c matches the printuation wide-chars within that section */
-      ptr = (unsigned char *)table;
-      ctmp = (unsigned char)c;
-      while (ptr < table + size)
+      if (ctmp < *ptr)
+	return 0;
+      /* otherwise c > *ptr */
+      /* look for 0x0 as next element which indicates a range */
+      ++ptr;
+      if (*ptr == 0x0)
 	{
-	  if (ctmp == *ptr)
+	  /* we have a range..see if c falls within range */
+	  ++ptr;
+	  if (ctmp <= *ptr)
 	    return 1;
-	  if (ctmp < *ptr)
-	    return 0;
-	  /* otherwise c > *ptr */
-	  /* look for 0x0 as next element which indicates a range */
 	  ++ptr;
-	  if (*ptr == 0x0)
-	    {
-	      /* we have a range..see if c falls within range */
-	      ++ptr;
-	      if (ctmp <= *ptr)
-		return 1;
-	      ++ptr;
-	    }
 	}
-      /* not in table */
-      return 0;
     }
-#endif /* _MB_CAPABLE */
-
+  /* not in table */
+  return 0;
+#else
   return (c < (wint_t)0x100 ? isprint (c) : 0);
+#endif /* _MB_CAPABLE */
 }
 
Index: libc/ctype/iswpunct.c
===================================================================
RCS file: /cvs/src/src/newlib/libc/ctype/iswpunct.c,v
retrieving revision 1.5
diff -u -p -r1.5 iswpunct.c
--- libc/ctype/iswpunct.c	3 Mar 2009 09:28:45 -0000	1.5
+++ libc/ctype/iswpunct.c	22 Mar 2009 16:25:06 -0000
@@ -70,260 +70,243 @@ int
 _DEFUN(iswpunct,(c), wint_t c)
 {
 #ifdef _MB_CAPABLE
-  int unicode = 0;
+  unsigned const char *table;
+  unsigned char *ptr;
+  unsigned char ctmp;
+  int size;
+  wint_t x;
 
   if (!strcmp (__locale_charset (), "JIS"))
-    {
-      c = __jp2uc (c, JP_JIS);
-      unicode = 1;
-    }
+    c = __jp2uc (c, JP_JIS);
   else if (!strcmp (__locale_charset (), "SJIS"))
-    {
-      c = __jp2uc (c, JP_SJIS);
-      unicode = 1;
-    }
+    c = __jp2uc (c, JP_SJIS);
   else if (!strcmp (__locale_charset (), "EUCJP"))
+    c = __jp2uc (c, JP_EUCJP);
+
+  x = (c >> 8);
+  /* for some large sections, all characters are punctuation so handle them here */
+  if ((x >= 0xe0 && x <= 0xf8) ||
+      (x >= 0xf00 && x <= 0xffe) ||
+      (x >= 0x1000 && x <= 0x10fe))
+    return 1;
+  
+  switch (x)
     {
-      c = __jp2uc (c, JP_EUCJP);
-      unicode = 1;
-    }
-  else if (!strcmp (__locale_charset (), "UTF-8"))
-    {
-      unicode = 1;
+    case 0x22:
+    case 0x25:
+    case 0x28:
+    case 0x29:
+    case 0x2a:
+      return 1;
+    case 0x00:
+      table = u0;
+      size = sizeof(u0);
+      break;
+    case 0x02:
+      table = u2;
+      size = sizeof(u2);
+      break;
+    case 0x03:
+      table = u3;
+      size = sizeof(u3);
+      break;
+    case 0x04:
+      table = u4;
+      size = sizeof(u4);
+      break;
+    case 0x05:
+      table = u5;
+      size = sizeof(u5);
+      break;
+    case 0x06:
+      table = u6;
+      size = sizeof(u6);
+      break;
+    case 0x07:
+      table = u7;
+      size = sizeof(u7);
+      break;
+    case 0x09:
+      table = u9;
+      size = sizeof(u9);
+      break;
+    case 0x0a:
+      table = ua;
+      size = sizeof(ua);
+      break;
+    case 0x0b:
+      table = ub;
+      size = sizeof(ub);
+      break;
+    case 0x0c:
+      table = uc;
+      size = sizeof(uc);
+      break;
+    case 0x0d:
+      table = ud;
+      size = sizeof(ud);
+      break;
+    case 0x0e:
+      table = ue;
+      size = sizeof(ue);
+      break;
+    case 0x0f:
+      table = uf;
+      size = sizeof(uf);
+      break;
+    case 0x10:
+      table = u10;
+      size = sizeof(u10);
+      break;
+    case 0x13:
+      table = u13;
+      size = sizeof(u13);
+      break;
+    case 0x16:
+      table = u16;
+      size = sizeof(u16);
+      break;
+    case 0x17:
+      table = u17;
+      size = sizeof(u17);
+      break;
+    case 0x18:
+      table = u18;
+      size = sizeof(u18);
+      break;
+    case 0x1f:
+      table = u1f;
+      size = sizeof(u1f);
+      break;
+    case 0x20:
+      table = u20;
+      size = sizeof(u20);
+      break;
+    case 0x21:
+      table = u21;
+      size = sizeof(u21);
+      break;
+    case 0x23:
+      table = u23;
+      size = sizeof(u23);
+      break;
+    case 0x24:
+      table = u24;
+      size = sizeof(u24);
+      break;
+    case 0x26:
+      table = u26;
+      size = sizeof(u26);
+      break;
+    case 0x27:
+      table = u27;
+      size = sizeof(u27);
+      break;
+    case 0x2e:
+      table = u2e;
+      size = sizeof(u2e);
+      break;
+    case 0x2f:
+      table = u2f;
+      size = sizeof(u2f);
+      break;
+    case 0x30:
+      table = u30;
+      size = sizeof(u30);
+      break;
+    case 0x31:
+      table = u31;
+      size = sizeof(u31);
+      break;
+    case 0x32:
+      table = u32;
+      size = sizeof(u32);
+      break;
+    case 0x33:
+      table = u33;
+      size = sizeof(u33);
+      break;
+    case 0xa4:
+      table = ua4;
+      size = sizeof(ua4);
+      break;
+    case 0xfb:
+      table = ufb;
+      size = sizeof(ufb);
+      break;
+    case 0xfd:
+      table = ufd;
+      size = sizeof(ufd);
+      break;
+    case 0xfe:
+      table = ufe;
+      size = sizeof(ufe);
+      break;
+    case 0xff:
+      table = uff;
+      size = sizeof(uff);
+      break;
+    case 0x103:
+      table = u103;
+      size = sizeof(u103);
+      break;
+    case 0x1d0:
+      table = u1d0;
+      size = sizeof(u1d0);
+      break;
+    case 0x1d1:
+      table = u1d1;
+      size = sizeof(u1d1);
+      break;
+    case 0x1d6:
+      table = u1d6;
+      size = sizeof(u1d6);
+      break;
+    case 0x1d7:
+      table = u1d7;
+      size = sizeof(u1d7);
+      break;
+    case 0xe00:
+      table = ue00;
+      size = sizeof(ue00);
+      break;
+    case 0xfff:
+      table = ufff;
+      size = sizeof(ufff);
+      break;
+    case 0x10ff:
+      table = u10ff;
+      size = sizeof(u10ff);
+      break;
+    default:
+      return 0;
     }
-
-  if (unicode)
+  /* we have narrowed down to a section of 256 characters to check */
+  /* now check if c matches the punctuation wide-chars within that section */
+  ptr = (unsigned char *)table;
+  ctmp = (unsigned char)c;
+  while (ptr < table + size)
     {
-      unsigned const char *table;
-      unsigned char *ptr;
-      unsigned char ctmp;
-      int size;
-      wint_t x = (c >> 8);
-      
-      /* for some large sections, all characters are punctuation so handle them here */
-      if ((x >= 0xe0 && x <= 0xf8) ||
-	  (x >= 0xf00 && x <= 0xffe) ||
-	  (x >= 0x1000 && x <= 0x10fe))
+      if (ctmp == *ptr)
 	return 1;
-      
-      switch (x)
-	{
-	case 0x22:
-	case 0x25:
-	case 0x28:
-	case 0x29:
-	case 0x2a:
-	  return 1;
-	case 0x00:
-	  table = u0;
-	  size = sizeof(u0);
-	  break;
-	case 0x02:
-	  table = u2;
-	  size = sizeof(u2);
-	  break;
-	case 0x03:
-	  table = u3;
-	  size = sizeof(u3);
-	  break;
-	case 0x04:
-	  table = u4;
-	  size = sizeof(u4);
-	  break;
-	case 0x05:
-	  table = u5;
-	  size = sizeof(u5);
-	  break;
-	case 0x06:
-	  table = u6;
-	  size = sizeof(u6);
-	  break;
-	case 0x07:
-	  table = u7;
-	  size = sizeof(u7);
-	  break;
-	case 0x09:
-	  table = u9;
-	  size = sizeof(u9);
-	  break;
-	case 0x0a:
-	  table = ua;
-	  size = sizeof(ua);
-	  break;
-	case 0x0b:
-	  table = ub;
-	  size = sizeof(ub);
-	  break;
-	case 0x0c:
-	  table = uc;
-	  size = sizeof(uc);
-	  break;
-	case 0x0d:
-	  table = ud;
-	  size = sizeof(ud);
-	  break;
-	case 0x0e:
-	  table = ue;
-	  size = sizeof(ue);
-	  break;
-	case 0x0f:
-	  table = uf;
-	  size = sizeof(uf);
-	  break;
-	case 0x10:
-	  table = u10;
-	  size = sizeof(u10);
-	  break;
-	case 0x13:
-	  table = u13;
-	  size = sizeof(u13);
-	  break;
-	case 0x16:
-	  table = u16;
-	  size = sizeof(u16);
-	  break;
-	case 0x17:
-	  table = u17;
-	  size = sizeof(u17);
-	  break;
-	case 0x18:
-	  table = u18;
-	  size = sizeof(u18);
-	  break;
-	case 0x1f:
-	  table = u1f;
-	  size = sizeof(u1f);
-	  break;
-	case 0x20:
-	  table = u20;
-	  size = sizeof(u20);
-	  break;
-	case 0x21:
-	  table = u21;
-	  size = sizeof(u21);
-	  break;
-	case 0x23:
-	  table = u23;
-	  size = sizeof(u23);
-	  break;
-	case 0x24:
-	  table = u24;
-	  size = sizeof(u24);
-	  break;
-	case 0x26:
-	  table = u26;
-	  size = sizeof(u26);
-	  break;
-	case 0x27:
-	  table = u27;
-	  size = sizeof(u27);
-	  break;
-	case 0x2e:
-	  table = u2e;
-	  size = sizeof(u2e);
-	  break;
-	case 0x2f:
-	  table = u2f;
-	  size = sizeof(u2f);
-	  break;
-	case 0x30:
-	  table = u30;
-	  size = sizeof(u30);
-	  break;
-	case 0x31:
-	  table = u31;
-	  size = sizeof(u31);
-	  break;
-	case 0x32:
-	  table = u32;
-	  size = sizeof(u32);
-	  break;
-	case 0x33:
-	  table = u33;
-	  size = sizeof(u33);
-	  break;
-	case 0xa4:
-	  table = ua4;
-	  size = sizeof(ua4);
-	  break;
-	case 0xfb:
-	  table = ufb;
-	  size = sizeof(ufb);
-	  break;
-	case 0xfd:
-	  table = ufd;
-	  size = sizeof(ufd);
-	  break;
-	case 0xfe:
-	  table = ufe;
-	  size = sizeof(ufe);
-	  break;
-	case 0xff:
-	  table = uff;
-	  size = sizeof(uff);
-	  break;
-	case 0x103:
-	  table = u103;
-	  size = sizeof(u103);
-	  break;
-	case 0x1d0:
-	  table = u1d0;
-	  size = sizeof(u1d0);
-	  break;
-	case 0x1d1:
-	  table = u1d1;
-	  size = sizeof(u1d1);
-	  break;
-	case 0x1d6:
-	  table = u1d6;
-	  size = sizeof(u1d6);
-	  break;
-	case 0x1d7:
-	  table = u1d7;
-	  size = sizeof(u1d7);
-	  break;
-	case 0xe00:
-	  table = ue00;
-	  size = sizeof(ue00);
-	  break;
-	case 0xfff:
-	  table = ufff;
-	  size = sizeof(ufff);
-	  break;
-	case 0x10ff:
-	  table = u10ff;
-	  size = sizeof(u10ff);
-	  break;
-	default:
-	  return 0;
-	}
-      /* we have narrowed down to a section of 256 characters to check */
-      /* now check if c matches the punctuation wide-chars within that section */
-      ptr = (unsigned char *)table;
-      ctmp = (unsigned char)c;
-      while (ptr < table + size)
+      if (ctmp < *ptr)
+	return 0;
+      /* otherwise c > *ptr */
+      /* look for 0x0 as next element which indicates a range */
+      ++ptr;
+      if (*ptr == 0x0)
 	{
-	  if (ctmp == *ptr)
+	  /* we have a range..see if c falls within range */
+	  ++ptr;
+	  if (ctmp <= *ptr)
 	    return 1;
-	  if (ctmp < *ptr)
-	    return 0;
-	  /* otherwise c > *ptr */
-	  /* look for 0x0 as next element which indicates a range */
 	  ++ptr;
-	  if (*ptr == 0x0)
-	    {
-	      /* we have a range..see if c falls within range */
-	      ++ptr;
-	      if (ctmp <= *ptr)
-		return 1;
-	      ++ptr;
-	    }
 	}
-      /* not in table */
-      return 0;
     }
-#endif /* _MB_CAPABLE */
-
+  /* not in table */
+  return 0;
+#else
   return (c < (wint_t)0x100 ? ispunct (c) : 0);
+#endif /* _MB_CAPABLE */
 }
 
Index: libc/ctype/iswspace.c
===================================================================
RCS file: /cvs/src/src/newlib/libc/ctype/iswspace.c,v
retrieving revision 1.5
diff -u -p -r1.5 iswspace.c
--- libc/ctype/iswspace.c	3 Mar 2009 09:28:45 -0000	1.5
+++ libc/ctype/iswspace.c	22 Mar 2009 16:25:06 -0000
@@ -66,38 +66,19 @@ int
 _DEFUN(iswspace,(c), wint_t c)
 {
 #ifdef _MB_CAPABLE
-  int unicode = 0;
-
   if (!strcmp (__locale_charset (), "JIS"))
-    {
-      c = __jp2uc (c, JP_JIS);
-      unicode = 1;
-    }
+    c = __jp2uc (c, JP_JIS);
   else if (!strcmp (__locale_charset (), "SJIS"))
-    {
-      c = __jp2uc (c, JP_SJIS);
-      unicode = 1;
-    }
+    c = __jp2uc (c, JP_SJIS);
   else if (!strcmp (__locale_charset (), "EUCJP"))
-    {
-      c = __jp2uc (c, JP_EUCJP);
-      unicode = 1;
-    }
-  else if (!strcmp (__locale_charset (), "UTF-8"))
-    {
-      unicode = 1;
-    }
-
-  if (unicode)
-    {
-      return ((c >= 0x0009 && c <= 0x000d) || c == 0x0020 || c == 0x1680 ||
-              (c >= 0x2000 && c <= 0x2006) ||
-              (c >= 0x2008 && c <= 0x200b) ||
-              c == 0x2028 || c == 0x2029 ||
-              c == 0x205f || c == 0x3000);
-    }
-#endif /* _MB_CAPABLE */
-
+    c = __jp2uc (c, JP_EUCJP);
+  return ((c >= 0x0009 && c <= 0x000d) || c == 0x0020 || c == 0x1680 ||
+	  (c >= 0x2000 && c <= 0x2006) ||
+	  (c >= 0x2008 && c <= 0x200b) ||
+	  c == 0x2028 || c == 0x2029 ||
+	  c == 0x205f || c == 0x3000);
+#else
   return (c < 0x100 ? isspace (c) : 0);
+#endif /* _MB_CAPABLE */
 }
 
Index: libc/ctype/jp2uc.c
===================================================================
RCS file: /cvs/src/src/newlib/libc/ctype/jp2uc.c,v
retrieving revision 1.3
diff -u -p -r1.3 jp2uc.c
--- libc/ctype/jp2uc.c	23 Apr 2004 21:44:21 -0000	1.3
+++ libc/ctype/jp2uc.c	22 Mar 2009 16:25:06 -0000
@@ -41,6 +41,11 @@
 wint_t
 _DEFUN (__jp2uc, (c, type), wint_t c _AND int type)
 {
+/* Under Cygwin, the incoming wide character is already given in UTF due
+   to the requirements of the underlying OS. */
+#ifdef  __CYGWIN__
+  return c;
+#else
   int index, adj;
   unsigned char byte1, byte2;
   wint_t ret;
@@ -140,6 +145,7 @@ _DEFUN (__jp2uc, (c, type), wint_t c _AN
     }
 
   return WEOF; 
+#endif
 }
 
 #endif /* _MB_CAPABLE */
Index: libc/ctype/towlower.c
===================================================================
RCS file: /cvs/src/src/newlib/libc/ctype/towlower.c,v
retrieving revision 1.5
diff -u -p -r1.5 towlower.c
--- libc/ctype/towlower.c	3 Mar 2009 09:28:45 -0000	1.5
+++ libc/ctype/towlower.c	22 Mar 2009 16:25:06 -0000
@@ -70,405 +70,388 @@ wint_t
 _DEFUN(towlower,(c), wint_t c)
 {
 #ifdef _MB_CAPABLE
-  int unicode = 0;
-
   if (!strcmp (__locale_charset (), "JIS"))
-    {
-      c = __jp2uc (c, JP_JIS);
-      unicode = 1;
-    }
+    c = __jp2uc (c, JP_JIS);
   else if (!strcmp (__locale_charset (), "SJIS"))
-    {
-      c = __jp2uc (c, JP_SJIS);
-      unicode = 1;
-    }
+    c = __jp2uc (c, JP_SJIS);
   else if (!strcmp (__locale_charset (), "EUCJP"))
+    c = __jp2uc (c, JP_EUCJP);
+
+  if (c < 0x100)
     {
-      c = __jp2uc (c, JP_EUCJP);
-      unicode = 1;
-    }
-  else if (!strcmp (__locale_charset (), "UTF-8"))
-    {
-      unicode = 1;
-    }
+      if ((c >= 0x0041 && c <= 0x005a) ||
+	  (c >= 0x00c0 && c <= 0x00de))
+	return (c + 0x20);
 
-  if (unicode)
+      if (c == 0x00b5)
+	return 0x03bc;
+      
+      return c;
+    }
+  else if (c < 0x300)
     {
-      if (c < 0x100)
+      if ((c >= 0x0100 && c <= 0x012e) ||
+	  (c >= 0x0132 && c <= 0x0136) ||
+	  (c >= 0x014a && c <= 0x0176) ||
+	  (c >= 0x01de && c <= 0x01ee) ||
+	  (c >= 0x01f8 && c <= 0x021e) ||
+	  (c >= 0x0222 && c <= 0x0232))
 	{
-	  if ((c >= 0x0041 && c <= 0x005a) ||
-	      (c >= 0x00c0 && c <= 0x00de))
-	    return (c + 0x20);
+	  if (!(c & 0x01))
+	    return (c + 1);
+	  return c;
+	}
 
-	  if (c == 0x00b5)
-	    return 0x03bc;
-	  
+      if ((c >= 0x0139 && c <= 0x0147) ||
+	  (c >= 0x01cd && c <= 0x91db))
+	{
+	  if (c & 0x01)
+	    return (c + 1);
 	  return c;
 	}
-      else if (c < 0x300)
+      
+      if (c >= 0x178 && c <= 0x01f7)
 	{
-	  if ((c >= 0x0100 && c <= 0x012e) ||
-	      (c >= 0x0132 && c <= 0x0136) ||
-	      (c >= 0x014a && c <= 0x0176) ||
-	      (c >= 0x01de && c <= 0x01ee) ||
-	      (c >= 0x01f8 && c <= 0x021e) ||
-	      (c >= 0x0222 && c <= 0x0232))
+	  wint_t k;
+	  switch (c)
 	    {
-	      if (!(c & 0x01))
-		return (c + 1);
-	      return c;
+	    case 0x0178:
+	      k = 0x00ff;
+	      break;
+	    case 0x0179:
+	    case 0x017b:
+	    case 0x017d:
+	    case 0x0182:
+	    case 0x0184:
+	    case 0x0187:
+	    case 0x018b:
+	    case 0x0191:
+	    case 0x0198:
+	    case 0x01a0:
+	    case 0x01a2:
+	    case 0x01a4:
+	    case 0x01a7:
+	    case 0x01ac:
+	    case 0x01af:
+	    case 0x01b3:
+	    case 0x01b5:
+	    case 0x01b8:
+	    case 0x01bc:
+	    case 0x01c5:
+	    case 0x01c8:
+	    case 0x01cb:
+	    case 0x01cd:
+	    case 0x01cf:
+	    case 0x01d1:
+	    case 0x01d3:
+	    case 0x01d5:
+	    case 0x01d7:
+	    case 0x01d9:
+	    case 0x01db:
+	    case 0x01f2:
+	    case 0x01f4:
+	      k = c + 1;
+	      break;
+	    case 0x017f:
+	      k = 0x0073;
+	      break;
+	    case 0x0181:
+	      k = 0x0253;
+	      break;
+	    case 0x0186:
+	      k = 0x0254;
+	      break;
+	    case 0x0189:
+	      k = 0x0256;
+	      break;
+	    case 0x018a:
+	      k = 0x0257;
+	      break;
+	    case 0x018e:
+	      k = 0x01dd;
+	      break;
+	    case 0x018f:
+	      k = 0x0259;
+	      break;
+	    case 0x0190:
+	      k = 0x025b;
+	      break;
+	    case 0x0193:
+	      k = 0x0260;
+	      break;
+	    case 0x0194:
+	      k = 0x0263;
+	      break;
+	    case 0x0196:
+	      k = 0x0269;
+	      break;
+	    case 0x0197:
+	      k = 0x0268;
+	      break;
+	    case 0x019c:
+	      k = 0x026f;
+	      break;
+	    case 0x019d:
+	      k = 0x0272;
+	      break;
+	    case 0x019f:
+	      k = 0x0275;
+	      break;
+	    case 0x01a6:
+	      k = 0x0280;
+	      break;
+	    case 0x01a9:
+	      k = 0x0283;
+	      break;
+	    case 0x01ae:
+	      k = 0x0288;
+	      break;
+	    case 0x01b1:
+	      k = 0x028a;
+	      break;
+	    case 0x01b2:
+	      k = 0x028b;
+	      break;
+	    case 0x01b7:
+	      k = 0x0292;
+	      break;
+	    case 0x01c4:
+	    case 0x01c7:
+	    case 0x01ca:
+	    case 0x01f1:
+	      k = c + 2;
+	      break;
+	    case 0x01f6:
+	      k = 0x0195;
+	      break;
+	    case 0x01f7:
+	      k = 0x01bf;
+	      break;
+	    default:
+	      k = 0;
 	    }
+	  if (k != 0)
+	    return k;
+	}
 
-	  if ((c >= 0x0139 && c <= 0x0147) ||
-	      (c >= 0x01cd && c <= 0x91db))
-	    {
-	      if (c & 0x01)
-		return (c + 1);
-	      return c;
-	    }
-	  
-	  if (c >= 0x178 && c <= 0x01f7)
+      if (c == 0x0220)
+	return 0x019e;
+    }
+  else if (c < 0x0400)
+    {
+      if (c >= 0x0391 && c <= 0x03ab && c != 0x03a2)
+	return (c + 0x20);
+      if (c >= 0x03d8 && c <= 0x03ee && !(c & 0x01))
+	return (c + 1);
+      if (c >= 0x0386 && c <= 0x03f5)
+	{
+	  wint_t k;
+	  switch (c)
 	    {
-	      wint_t k;
-	      switch (c)
-		{
-		case 0x0178:
-		  k = 0x00ff;
-		  break;
-		case 0x0179:
-		case 0x017b:
-		case 0x017d:
-		case 0x0182:
-		case 0x0184:
-		case 0x0187:
-		case 0x018b:
-		case 0x0191:
-		case 0x0198:
-		case 0x01a0:
-		case 0x01a2:
-		case 0x01a4:
-		case 0x01a7:
-		case 0x01ac:
-		case 0x01af:
-		case 0x01b3:
-		case 0x01b5:
-		case 0x01b8:
-		case 0x01bc:
-		case 0x01c5:
-		case 0x01c8:
-		case 0x01cb:
-		case 0x01cd:
-		case 0x01cf:
-		case 0x01d1:
-		case 0x01d3:
-		case 0x01d5:
-		case 0x01d7:
-		case 0x01d9:
-		case 0x01db:
-		case 0x01f2:
-		case 0x01f4:
-		  k = c + 1;
-		  break;
-		case 0x017f:
-		  k = 0x0073;
-		  break;
-		case 0x0181:
-		  k = 0x0253;
-		  break;
-		case 0x0186:
-		  k = 0x0254;
-		  break;
-		case 0x0189:
-		  k = 0x0256;
-		  break;
-		case 0x018a:
-		  k = 0x0257;
-		  break;
-		case 0x018e:
-		  k = 0x01dd;
-		  break;
-		case 0x018f:
-		  k = 0x0259;
-		  break;
-		case 0x0190:
-		  k = 0x025b;
-		  break;
-		case 0x0193:
-		  k = 0x0260;
-		  break;
-		case 0x0194:
-		  k = 0x0263;
-		  break;
-		case 0x0196:
-		  k = 0x0269;
-		  break;
-		case 0x0197:
-		  k = 0x0268;
-		  break;
-		case 0x019c:
-		  k = 0x026f;
-		  break;
-		case 0x019d:
-		  k = 0x0272;
-		  break;
-		case 0x019f:
-		  k = 0x0275;
-		  break;
-		case 0x01a6:
-		  k = 0x0280;
-		  break;
-		case 0x01a9:
-		  k = 0x0283;
-		  break;
-		case 0x01ae:
-		  k = 0x0288;
-		  break;
-		case 0x01b1:
-		  k = 0x028a;
-		  break;
-		case 0x01b2:
-		  k = 0x028b;
-		  break;
-		case 0x01b7:
-		  k = 0x0292;
-		  break;
-		case 0x01c4:
-		case 0x01c7:
-		case 0x01ca:
-		case 0x01f1:
-		  k = c + 2;
-		  break;
-		case 0x01f6:
-		  k = 0x0195;
-		  break;
-		case 0x01f7:
-		  k = 0x01bf;
-		  break;
-		default:
-		  k = 0;
-		}
-	      if (k != 0)
-		return k;
+	    case 0x0386:
+	      k = 0x03ac;
+	      break;
+	    case 0x0388:
+	      k = 0x03ad;
+	      break;
+	    case 0x0389:
+	      k = 0x03ae;
+	      break;
+	    case 0x038a:
+	      k = 0x03af;
+	      break;
+	    case 0x038c:
+	      k = 0x03cc;
+	      break;
+	    case 0x038e:
+	      k = 0x03cd;
+	      break;
+	    case 0x038f:
+	      k = 0x038f;
+	      break;
+	    case 0x03c2:
+	      k = 0x03c3;
+	      break;
+	    case 0x03d0:
+	      k = 0x03b2;
+	      break;
+	    case 0x03d1:
+	      k = 0x03b8;
+	      break;
+	    case 0x03d5:
+	      k = 0x03c6;
+	      break;
+	    case 0x03d6:
+	      k = 0x03c0;
+	      break;
+	    case 0x03f0:
+	      k = 0x03ba;
+	      break;
+	    case 0x03f1:
+	      k = 0x03c1;
+	      break;
+	    case 0x03f2:
+	      k = 0x03c3;
+	      break;
+	    case 0x03f4:
+	      k = 0x03b8;
+	      break;
+	    case 0x03f5:
+	      k = 0x03b5;
+	      break;
+	    default:
+	      k = 0;
 	    }
-
-	  if (c == 0x0220)
-	    return 0x019e;
+	  if (k != 0)
+	    return k;
 	}
-      else if (c < 0x0400)
+
+      if (c == 0x0345)
+	return 0x03b9;
+    }
+  else if (c < 0x500)
+    {
+      if (c >= 0x0400 && c <= 0x040f)
+	return (c + 0x50);
+      
+      if (c >= 0x0410 && c <= 0x042f)
+	return (c + 0x20);
+      
+      if ((c >= 0x0460 && c <= 0x0480) ||
+	  (c >= 0x048a && c <= 0x04be) ||
+	  (c >= 0x04d0 && c <= 0x04f4) ||
+	  (c == 0x04f8))
 	{
-	  if (c >= 0x0391 && c <= 0x03ab && c != 0x03a2)
-	    return (c + 0x20);
-	  if (c >= 0x03d8 && c <= 0x03ee && !(c & 0x01))
+	  if (!(c & 0x01))
 	    return (c + 1);
-	  if (c >= 0x0386 && c <= 0x03f5)
-	    {
-	      wint_t k;
-	      switch (c)
-		{
-		case 0x0386:
-		  k = 0x03ac;
-		  break;
-		case 0x0388:
-		  k = 0x03ad;
-		  break;
-		case 0x0389:
-		  k = 0x03ae;
-		  break;
-		case 0x038a:
-		  k = 0x03af;
-		  break;
-		case 0x038c:
-		  k = 0x03cc;
-		  break;
-		case 0x038e:
-		  k = 0x03cd;
-		  break;
-		case 0x038f:
-		  k = 0x038f;
-		  break;
-		case 0x03c2:
-		  k = 0x03c3;
-		  break;
-		case 0x03d0:
-		  k = 0x03b2;
-		  break;
-		case 0x03d1:
-		  k = 0x03b8;
-		  break;
-		case 0x03d5:
-		  k = 0x03c6;
-		  break;
-		case 0x03d6:
-		  k = 0x03c0;
-		  break;
-		case 0x03f0:
-		  k = 0x03ba;
-		  break;
-		case 0x03f1:
-		  k = 0x03c1;
-		  break;
-		case 0x03f2:
-		  k = 0x03c3;
-		  break;
-		case 0x03f4:
-		  k = 0x03b8;
-		  break;
-		case 0x03f5:
-		  k = 0x03b5;
-		  break;
-		default:
-		  k = 0;
-		}
-	      if (k != 0)
-		return k;
-	    }
-
-	  if (c == 0x0345)
-	    return 0x03b9;
+	  return c;
 	}
-      else if (c < 0x500)
+      
+      if (c >= 0x04c1 && c <= 0x04cd)
 	{
-	  if (c >= 0x0400 && c <= 0x040f)
-	    return (c + 0x50);
-	  
-	  if (c >= 0x0410 && c <= 0x042f)
-	    return (c + 0x20);
-	  
-	  if ((c >= 0x0460 && c <= 0x0480) ||
-	      (c >= 0x048a && c <= 0x04be) ||
-	      (c >= 0x04d0 && c <= 0x04f4) ||
-	      (c == 0x04f8))
-	    {
-	      if (!(c & 0x01))
-		return (c + 1);
-	      return c;
-	    }
-	  
-	  if (c >= 0x04c1 && c <= 0x04cd)
-	    {
-	      if (c & 0x01)
-		return (c + 1);
-	      return c;
-	    }
+	  if (c & 0x01)
+	    return (c + 1);
+	  return c;
 	}
-      else if (c < 0x1f00)
+    }
+  else if (c < 0x1f00)
+    {
+      if ((c >= 0x0500 && c <= 0x050e) ||
+	  (c >= 0x1e00 && c <= 0x1e94) ||
+	  (c >= 0x1ea0 && c <= 0x1ef8))
 	{
-	  if ((c >= 0x0500 && c <= 0x050e) ||
-	      (c >= 0x1e00 && c <= 0x1e94) ||
-	      (c >= 0x1ea0 && c <= 0x1ef8))
-	    {
-	      if (!(c & 0x01))
-		return (c + 1);
-	      return c;
-	    }
-	  
-	  if (c >= 0x0531 && c <= 0x0556)
-	    return (c + 0x30);
-
-	  if (c == 0x1e9b)
-	    return 0x1e61;
+	  if (!(c & 0x01))
+	    return (c + 1);
+	  return c;
 	}
-      else if (c < 0x2000)
+      
+      if (c >= 0x0531 && c <= 0x0556)
+	return (c + 0x30);
+
+      if (c == 0x1e9b)
+	return 0x1e61;
+    }
+  else if (c < 0x2000)
+    {
+      if ((c >= 0x1f08 && c <= 0x1f0f) ||
+	  (c >= 0x1f18 && c <= 0x1f1d) ||
+	  (c >= 0x1f28 && c <= 0x1f2f) ||
+	  (c >= 0x1f38 && c <= 0x1f3f) ||
+	  (c >= 0x1f48 && c <= 0x1f4d) ||
+	  (c >= 0x1f68 && c <= 0x1f6f) ||
+	  (c >= 0x1f88 && c <= 0x1f8f) ||
+	  (c >= 0x1f98 && c <= 0x1f9f) ||
+	  (c >= 0x1fa8 && c <= 0x1faf))
+	return (c - 0x08);
+
+      if (c >= 0x1f59 && c <= 0x1f5f)
 	{
-	  if ((c >= 0x1f08 && c <= 0x1f0f) ||
-	      (c >= 0x1f18 && c <= 0x1f1d) ||
-	      (c >= 0x1f28 && c <= 0x1f2f) ||
-	      (c >= 0x1f38 && c <= 0x1f3f) ||
-	      (c >= 0x1f48 && c <= 0x1f4d) ||
-	      (c >= 0x1f68 && c <= 0x1f6f) ||
-	      (c >= 0x1f88 && c <= 0x1f8f) ||
-	      (c >= 0x1f98 && c <= 0x1f9f) ||
-	      (c >= 0x1fa8 && c <= 0x1faf))
+	  if (c & 0x01)
 	    return (c - 0x08);
-
-	  if (c >= 0x1f59 && c <= 0x1f5f)
-	    {
-	      if (c & 0x01)
-		return (c - 0x08);
-	      return c;
-	    }
-	
-	  if (c >= 0x1fb8 && c <= 0x1ffc)
+	  return c;
+	}
+    
+      if (c >= 0x1fb8 && c <= 0x1ffc)
+	{
+	  wint_t k;
+	  switch (c)
 	    {
-	      wint_t k;
-	      switch (c)
-		{
-		case 0x1fb8:
-		case 0x1fb9:
-		case 0x1fd8:
-		case 0x1fd9:
-		case 0x1fe8:
-		case 0x1fe9:
-		  k = c - 0x08;
-		  break;
-		case 0x1fba:
-		case 0x1fbb:
-		  k = c - 0x4a;
-		  break;
-		case 0x1fbc:
-		  k = 0x1fb3;
-		  break;
-		case 0x1fbe:
-		  k = 0x03b9;
-		  break;
-		case 0x1fc8:
-		case 0x1fc9:
-		case 0x1fca:
-		case 0x1fcb:
-		  k = c - 0x56;
-		  break;
-		case 0x1fcc:
-		  k = 0x1fc3;
-		  break;
-		case 0x1fda:
-		case 0x1fdb:
-		  k = c - 0x64;
-		  break;
-		case 0x1fea:
-		case 0x1feb:
-		  k = c - 0x70;
-		  break;
-		case 0x1fec:
-		  k = 0x1fe5;
-		  break;
-		case 0x1ffa:
-		case 0x1ffb:
-		  k = c - 0x7e;
-		  break;
-		case 0x1ffc:
-		  k = 0x1ff3;
-		  break;
-		default:
-		  k = 0;
-		}
-	      if (k != 0)
-		return k;
+	    case 0x1fb8:
+	    case 0x1fb9:
+	    case 0x1fd8:
+	    case 0x1fd9:
+	    case 0x1fe8:
+	    case 0x1fe9:
+	      k = c - 0x08;
+	      break;
+	    case 0x1fba:
+	    case 0x1fbb:
+	      k = c - 0x4a;
+	      break;
+	    case 0x1fbc:
+	      k = 0x1fb3;
+	      break;
+	    case 0x1fbe:
+	      k = 0x03b9;
+	      break;
+	    case 0x1fc8:
+	    case 0x1fc9:
+	    case 0x1fca:
+	    case 0x1fcb:
+	      k = c - 0x56;
+	      break;
+	    case 0x1fcc:
+	      k = 0x1fc3;
+	      break;
+	    case 0x1fda:
+	    case 0x1fdb:
+	      k = c - 0x64;
+	      break;
+	    case 0x1fea:
+	    case 0x1feb:
+	      k = c - 0x70;
+	      break;
+	    case 0x1fec:
+	      k = 0x1fe5;
+	      break;
+	    case 0x1ffa:
+	    case 0x1ffb:
+	      k = c - 0x7e;
+	      break;
+	    case 0x1ffc:
+	      k = 0x1ff3;
+	      break;
+	    default:
+	      k = 0;
 	    }
+	  if (k != 0)
+	    return k;
 	}
-      else 
-	{
-	  if (c >= 0x2160 && c <= 0x216f)
-	    return (c + 0x10);
-	  
-	  if (c >= 0x24b6 && c <= 0x24cf)
-	    return (c + 0x1a);
-	  
-	  if (c >= 0xff21 && c <= 0xff3a)
-	    return (c + 0x20);
-	  
-	  if (c >= 0x10400 && c <= 0x10425)
-	    return (c + 0x28);
+    }
+  else 
+    {
+      if (c >= 0x2160 && c <= 0x216f)
+	return (c + 0x10);
+      
+      if (c >= 0x24b6 && c <= 0x24cf)
+	return (c + 0x1a);
+      
+      if (c >= 0xff21 && c <= 0xff3a)
+	return (c + 0x20);
+      
+      if (c >= 0x10400 && c <= 0x10425)
+	return (c + 0x28);
 
-	  if (c == 0x2126)
-	    return 0x03c9;
-	  if (c == 0x212a)
-	    return 0x006b;
-	  if (c == 0x212b)
-	    return 0x00e5;
-	}
-    }     
-#endif /* _MB_CAPABLE */
-  
+      if (c == 0x2126)
+	return 0x03c9;
+      if (c == 0x212a)
+	return 0x006b;
+      if (c == 0x212b)
+	return 0x00e5;
+    }
+  return c;
+#else
   return (c < 0x00ff ? (wint_t)(tolower ((int)c)) : c);
+#endif /* _MB_CAPABLE */
 }
 
Index: libc/ctype/towupper.c
===================================================================
RCS file: /cvs/src/src/newlib/libc/ctype/towupper.c,v
retrieving revision 1.5
diff -u -p -r1.5 towupper.c
--- libc/ctype/towupper.c	3 Mar 2009 09:28:45 -0000	1.5
+++ libc/ctype/towupper.c	22 Mar 2009 16:25:07 -0000
@@ -70,432 +70,415 @@ wint_t
 _DEFUN(towupper,(c), wint_t c)
 {
 #ifdef _MB_CAPABLE
-  int unicode = 0;
-
   if (!strcmp (__locale_charset (), "JIS"))
-    {
-      c = __jp2uc (c, JP_JIS);
-      unicode = 1;
-    }
+    c = __jp2uc (c, JP_JIS);
   else if (!strcmp (__locale_charset (), "SJIS"))
-    {
-      c = __jp2uc (c, JP_SJIS);
-      unicode = 1;
-    }
+    c = __jp2uc (c, JP_SJIS);
   else if (!strcmp (__locale_charset (), "EUCJP"))
+    c = __jp2uc (c, JP_EUCJP);
+
+  if (c < 0x100)
     {
-      c = __jp2uc (c, JP_EUCJP);
-      unicode = 1;
-    }
-  else if (!strcmp (__locale_charset (), "UTF-8"))
-    {
-      unicode = 1;
+      if (c == 0x00b5)
+	return 0x039c;
+      
+      if ((c >= 0x00e0 && c <= 0x00fe) ||
+	  (c >= 0x0061 && c <= 0x007a))
+	return (c - 0x20);
+      
+      if (c == 0xff)
+	return 0x0178;
+      
+      return c;
     }
-
-  if (unicode)
+  else if (c < 0x300)
     {
-      if (c < 0x100)
+      if ((c >= 0x0101 && c <= 0x012f) ||
+	  (c >= 0x0133 && c <= 0x0137) ||
+	  (c >= 0x014b && c <= 0x0177) ||
+	  (c >= 0x01df && c <= 0x01ef) ||
+	  (c >= 0x01f9 && c <= 0x021f) ||
+	  (c >= 0x0223 && c <= 0x0233))
 	{
-	  if (c == 0x00b5)
-	    return 0x039c;
-	  
-	  if ((c >= 0x00e0 && c <= 0x00fe) ||
-	      (c >= 0x0061 && c <= 0x007a))
-	    return (c - 0x20);
-	  
-	  if (c == 0xff)
-	    return 0x0178;
-	  
+	  if (c & 0x01)
+	    return (c - 1);
 	  return c;
 	}
-      else if (c < 0x300)
-	{
-	  if ((c >= 0x0101 && c <= 0x012f) ||
-	      (c >= 0x0133 && c <= 0x0137) ||
-	      (c >= 0x014b && c <= 0x0177) ||
-	      (c >= 0x01df && c <= 0x01ef) ||
-	      (c >= 0x01f9 && c <= 0x021f) ||
-	      (c >= 0x0223 && c <= 0x0233))
-	    {
-	      if (c & 0x01)
-		return (c - 1);
-	      return c;
-	    }
 
-	  if ((c >= 0x013a && c <= 0x0148) ||
-	      (c >= 0x01ce && c <= 0x1dc))
-	    {
-	      if (!(c & 0x01))
-		return (c - 1);
-	      return c;
-	    }
-	  
-	  if (c == 0x0131)
-	    return 0x0049;
-	  
-	  if (c == 0x017a || c == 0x017c || c == 0x017e)
+      if ((c >= 0x013a && c <= 0x0148) ||
+	  (c >= 0x01ce && c <= 0x1dc))
+	{
+	  if (!(c & 0x01))
 	    return (c - 1);
-	  
-	  if (c >= 0x017f && c <= 0x0292)
-	    {
-	      wint_t k;
-	      switch (c)
-		{
-		case 0x017f:
-		  k = 0x0053;
-		  break;
-		case 0x0183:
-		  k = 0x0182;
-		  break;
-		case 0x0185:
-		  k = 0x0184;
-		  break;
-		case 0x0188:
-		  k = 0x0187;
-		  break;
-		case 0x018c:
-		  k = 0x018b;
-		  break;
-		case 0x0192:
-		  k = 0x0191;
-		  break;
-		case 0x0195:
-		  k = 0x01f6;
-		  break;
-		case 0x0199:
-		  k = 0x0198;
-		  break;
-		case 0x019e:
-		  k = 0x0220;
-		  break;
-		case 0x01a1:
-		case 0x01a3:
-		case 0x01a5:
-		case 0x01a8:
-		case 0x01ad:
-		case 0x01b0:
-		case 0x01b4:
-		case 0x01b6:
-		case 0x01b9:
-		case 0x01bd:
-		case 0x01c5:
-		case 0x01c8:
-		case 0x01cb:
-		case 0x01f2:
-		case 0x01f5:
-		  k = c - 1;
-		  break;
-		case 0x01bf:
-		  k = 0x01f7;
-		  break;
-		case 0x01c6:
-		case 0x01c9:
-		case 0x01cc:
-		  k = c - 2;
-		  break;
-		case 0x01dd:
-		  k = 0x018e;
-		  break;
-		case 0x01f3:
-		  k = 0x01f1;
-		  break;
-		case 0x0253:
-		  k = 0x0181;
-		  break;
-		case 0x0254:
-		  k = 0x0186;
-		  break;
-		case 0x0256:
-		  k = 0x0189;
-		  break;
-		case 0x0257:
-		  k = 0x018a;
-		  break;
-		case 0x0259:
-		  k = 0x018f;
-		  break;
-		case 0x025b:
-		  k = 0x0190;
-		  break;
-		case 0x0260:
-		  k = 0x0193;
-		  break;
-		case 0x0263:
-		  k = 0x0194;
-		  break;
-		case 0x0268:
-		  k = 0x0197;
-		  break;
-		case 0x0269:
-		  k = 0x0196;
-		  break;
-		case 0x026f:
-		  k = 0x019c;
-		  break;
-		case 0x0272:
-		  k = 0x019d;
-		  break;
-		case 0x0275:
-		  k = 0x019f;
-		  break;
-		case 0x0280:
-		  k = 0x01a6;
-		  break;
-		case 0x0283:
-		  k = 0x01a9;
-		  break;
-		case 0x0288:
-		  k = 0x01ae;
-		  break;
-		case 0x028a:
-		  k = 0x01b1;
-		  break;
-		case 0x028b:
-		  k = 0x01b2;
-		  break;
-		case 0x0292:
-		  k = 0x01b7;
-		  break;
-		default:
-		  k = 0;
-		}
-	      if (k != 0)
-		return k;
-	    }
+	  return c;
 	}
-      else if (c < 0x0400)
+      
+      if (c == 0x0131)
+	return 0x0049;
+      
+      if (c == 0x017a || c == 0x017c || c == 0x017e)
+	return (c - 1);
+      
+      if (c >= 0x017f && c <= 0x0292)
 	{
-	  if (c == 0x03ac)
-	    return 0x0386;
-	  
-	  if ((c & 0xfff0) == 0x03a0 && c >= 0x03ad)
-	    return (c - 0x15);
-	  
-	  if (c >= 0x03b1 && c <= 0x03cb && c != 0x03c2)
-	    return (c - 0x20);
-	  
-	  if (c == 0x03c2)
-	    return 0x03a3;
-	  
-	  if (c >= 0x03cc && c <= 0x03f5)
+	  wint_t k;
+	  switch (c)
 	    {
-	      wint_t k;
-	      switch (c)
-		{
-		case 0x03cc:
-		  k = 0x038c;
-		  break;
-		case 0x03cd:
-		case 0x03ce:
-		  k = c - 0x3f;
-		  break;
-		case 0x03d0:
-		  k = 0x0392;
-		  break;
-		case 0x03d1:
-		  k = 0x0398;
-		  break;
-		case 0x03d5:
-		  k = 0x03a6;
-		  break;
-		case 0x03d6:
-		  k = 0x03a0;
-		  break;
-		case 0x03d9:
-		case 0x03db:
-		case 0x03dd:
-		case 0x03df:
-		case 0x03e1:
-		case 0x03e3:
-		case 0x03e5:
-		case 0x03e7:
-		case 0x03e9:
-		case 0x03eb:
-		case 0x03ed:
-		case 0x03ef:
-		  k = c - 1;
-		  break;
-		case 0x03f0:
-		  k = 0x039a;
-		  break;
-		case 0x03f1:
-		  k = 0x03a1;
-		  break;
-		case 0x03f2:
-		  k = 0x03a3;
-		  break;
-		case 0x03f5:
-		  k = 0x0395;
-		  break;
-		default:
-		  k = 0;
-		}
-	      if (k != 0)
-		return k;
+	    case 0x017f:
+	      k = 0x0053;
+	      break;
+	    case 0x0183:
+	      k = 0x0182;
+	      break;
+	    case 0x0185:
+	      k = 0x0184;
+	      break;
+	    case 0x0188:
+	      k = 0x0187;
+	      break;
+	    case 0x018c:
+	      k = 0x018b;
+	      break;
+	    case 0x0192:
+	      k = 0x0191;
+	      break;
+	    case 0x0195:
+	      k = 0x01f6;
+	      break;
+	    case 0x0199:
+	      k = 0x0198;
+	      break;
+	    case 0x019e:
+	      k = 0x0220;
+	      break;
+	    case 0x01a1:
+	    case 0x01a3:
+	    case 0x01a5:
+	    case 0x01a8:
+	    case 0x01ad:
+	    case 0x01b0:
+	    case 0x01b4:
+	    case 0x01b6:
+	    case 0x01b9:
+	    case 0x01bd:
+	    case 0x01c5:
+	    case 0x01c8:
+	    case 0x01cb:
+	    case 0x01f2:
+	    case 0x01f5:
+	      k = c - 1;
+	      break;
+	    case 0x01bf:
+	      k = 0x01f7;
+	      break;
+	    case 0x01c6:
+	    case 0x01c9:
+	    case 0x01cc:
+	      k = c - 2;
+	      break;
+	    case 0x01dd:
+	      k = 0x018e;
+	      break;
+	    case 0x01f3:
+	      k = 0x01f1;
+	      break;
+	    case 0x0253:
+	      k = 0x0181;
+	      break;
+	    case 0x0254:
+	      k = 0x0186;
+	      break;
+	    case 0x0256:
+	      k = 0x0189;
+	      break;
+	    case 0x0257:
+	      k = 0x018a;
+	      break;
+	    case 0x0259:
+	      k = 0x018f;
+	      break;
+	    case 0x025b:
+	      k = 0x0190;
+	      break;
+	    case 0x0260:
+	      k = 0x0193;
+	      break;
+	    case 0x0263:
+	      k = 0x0194;
+	      break;
+	    case 0x0268:
+	      k = 0x0197;
+	      break;
+	    case 0x0269:
+	      k = 0x0196;
+	      break;
+	    case 0x026f:
+	      k = 0x019c;
+	      break;
+	    case 0x0272:
+	      k = 0x019d;
+	      break;
+	    case 0x0275:
+	      k = 0x019f;
+	      break;
+	    case 0x0280:
+	      k = 0x01a6;
+	      break;
+	    case 0x0283:
+	      k = 0x01a9;
+	      break;
+	    case 0x0288:
+	      k = 0x01ae;
+	      break;
+	    case 0x028a:
+	      k = 0x01b1;
+	      break;
+	    case 0x028b:
+	      k = 0x01b2;
+	      break;
+	    case 0x0292:
+	      k = 0x01b7;
+	      break;
+	    default:
+	      k = 0;
 	    }
+	  if (k != 0)
+	    return k;
 	}
-      else if (c < 0x500)
+    }
+  else if (c < 0x0400)
+    {
+      if (c == 0x03ac)
+	return 0x0386;
+      
+      if ((c & 0xfff0) == 0x03a0 && c >= 0x03ad)
+	return (c - 0x15);
+      
+      if (c >= 0x03b1 && c <= 0x03cb && c != 0x03c2)
+	return (c - 0x20);
+      
+      if (c == 0x03c2)
+	return 0x03a3;
+      
+      if (c >= 0x03cc && c <= 0x03f5)
 	{
-	  if (c >= 0x0450 && c <= 0x045f)
-	    return (c - 0x50);
-	  
-	  if (c >= 0x0430 && c <= 0x044f)
-	    return (c - 0x20);
-	  
-	  if ((c >= 0x0461 && c <= 0x0481) ||
-	      (c >= 0x048b && c <= 0x04bf) ||
-	      (c >= 0x04d1 && c <= 0x04f5))
-	    {
-	      if (c & 0x01)
-		return (c - 1);
-	      return c;
-	    }
-	  
-	  if (c >= 0x04c2 && c <= 0x04ce)
+	  wint_t k;
+	  switch (c)
 	    {
-	      if (!(c & 0x01))
-		return (c - 1);
-	      return c;
+	    case 0x03cc:
+	      k = 0x038c;
+	      break;
+	    case 0x03cd:
+	    case 0x03ce:
+	      k = c - 0x3f;
+	      break;
+	    case 0x03d0:
+	      k = 0x0392;
+	      break;
+	    case 0x03d1:
+	      k = 0x0398;
+	      break;
+	    case 0x03d5:
+	      k = 0x03a6;
+	      break;
+	    case 0x03d6:
+	      k = 0x03a0;
+	      break;
+	    case 0x03d9:
+	    case 0x03db:
+	    case 0x03dd:
+	    case 0x03df:
+	    case 0x03e1:
+	    case 0x03e3:
+	    case 0x03e5:
+	    case 0x03e7:
+	    case 0x03e9:
+	    case 0x03eb:
+	    case 0x03ed:
+	    case 0x03ef:
+	      k = c - 1;
+	      break;
+	    case 0x03f0:
+	      k = 0x039a;
+	      break;
+	    case 0x03f1:
+	      k = 0x03a1;
+	      break;
+	    case 0x03f2:
+	      k = 0x03a3;
+	      break;
+	    case 0x03f5:
+	      k = 0x0395;
+	      break;
+	    default:
+	      k = 0;
 	    }
-	  
-	  if (c == 0x04f9)
-	    return 0x04f8;
+	  if (k != 0)
+	    return k;
 	}
-      else if (c < 0x1f00)
+    }
+  else if (c < 0x500)
+    {
+      if (c >= 0x0450 && c <= 0x045f)
+	return (c - 0x50);
+      
+      if (c >= 0x0430 && c <= 0x044f)
+	return (c - 0x20);
+      
+      if ((c >= 0x0461 && c <= 0x0481) ||
+	  (c >= 0x048b && c <= 0x04bf) ||
+	  (c >= 0x04d1 && c <= 0x04f5))
 	{
-	  if ((c >= 0x0501 && c <= 0x050f) ||
-	      (c >= 0x1e01 && c <= 0x1e95) ||
-	      (c >= 0x1ea1 && c <= 0x1ef9))
-	    {
-	      if (c & 0x01)
-		return (c - 1);
-	      return c;
-	    }
-	  
-	  if (c >= 0x0561 && c <= 0x0586)
-	    return (c - 0x30);
-
-	  if (c == 0x1e9b)
-	    return 0x1e60;
+	  if (c & 0x01)
+	    return (c - 1);
+	  return c;
 	}
-      else if (c < 0x2000)
+      
+      if (c >= 0x04c2 && c <= 0x04ce)
 	{
-	  
-	  if ((c >= 0x1f00 && c <= 0x1f07) ||
-	      (c >= 0x1f10 && c <= 0x1f15) ||
-	      (c >= 0x1f20 && c <= 0x1f27) ||
-	      (c >= 0x1f30 && c <= 0x1f37) ||
-	      (c >= 0x1f40 && c <= 0x1f45) ||
-	      (c >= 0x1f60 && c <= 0x1f67) ||
-	      (c >= 0x1f80 && c <= 0x1f87) ||
-	      (c >= 0x1f90 && c <= 0x1f97) ||
-	      (c >= 0x1fa0 && c <= 0x1fa7))
-	    return (c + 0x08);
- 
-	  if (c >= 0x1f51 && c <= 0x1f57 && (c & 0x01))
-	    return (c + 0x08);
-	  
-	  if (c >= 0x1f70 && c <= 0x1ff3)
-	    {
-	      wint_t k;
-	      switch (c)
-		{
-		case 0x1fb0:
-		  k = 0x1fb8;
-		  break;
-		case 0x1fb1:
-		  k = 0x1fb9;
-		  break;
-		case 0x1f70:
-		  k = 0x1fba;
-		  break;
-		case 0x1f71:
-		  k = 0x1fbb;
-		  break;
-		case 0x1fb3:
-		  k = 0x1fbc;
-		  break;
-		case 0x1fbe:
-		  k = 0x0399;
-		  break;
-		case 0x1f72:
-		  k = 0x1fc8;
-		  break;
-		case 0x1f73:
-		  k = 0x1fc9;
-		  break;
-		case 0x1f74:
-		  k = 0x1fca;
-		  break;
-		case 0x1f75:
-		  k = 0x1fcb;
-		  break;
-		case 0x1fd0:
-		  k = 0x1fd8;
-		  break;
-		case 0x1fd1:
-		  k = 0x1fd9;
-		  break;
-		case 0x1f76:
-		  k = 0x1fda;
-		  break;
-		case 0x1f77:
-		  k = 0x1fdb;
-		  break;
-		case 0x1fe0:
-		  k = 0x1fe8;
-		  break;
-		case 0x1fe1:
-		  k = 0x1fe9;
-		  break;
-		case 0x1f7a:
-		  k = 0x1fea;
-		  break;
-		case 0x1f7b:
-		  k = 0x1feb;
-		  break;
-		case 0x1fe5:
-		  k = 0x1fec;
-		  break;
-		case 0x1f78:
-		  k = 0x1ff8;
-		  break;
-		case 0x1f79:
-		  k = 0x1ff9;
-		  break;
-		case 0x1f7c:
-		  k = 0x1ffa;
-		  break;
-		case 0x1f7d:
-		  k = 0x1ffb;
-		  break;
-		case 0x1ff3:
-		  k = 0x1ffc;
-		  break;
-		default:
-		  k = 0;
-		}
-	      if (k != 0)
-		return k;
-	    }
+	  if (!(c & 0x01))
+	    return (c - 1);
+	  return c;
 	}
-      else 
+      
+      if (c == 0x04f9)
+	return 0x04f8;
+    }
+  else if (c < 0x1f00)
+    {
+      if ((c >= 0x0501 && c <= 0x050f) ||
+	  (c >= 0x1e01 && c <= 0x1e95) ||
+	  (c >= 0x1ea1 && c <= 0x1ef9))
 	{
-	  if (c >= 0x2170 && c <= 0x217f)
-	    return (c - 0x10);
-	  
-	  if (c >= 0x24d0 && c <= 0x24e9)
-	    return (c - 0x1a);
-	  
-	  if (c >= 0xff41 && c <= 0xff5a)
-	    return (c - 0x20);
-	  
-	  if (c >= 0x10428 && c <= 0x1044d)
-	    return (c - 0x28);
+	  if (c & 0x01)
+	    return (c - 1);
+	  return c;
 	}
-    }     
-#endif /* _MB_CAPABLE */
-  
+      
+      if (c >= 0x0561 && c <= 0x0586)
+	return (c - 0x30);
+
+      if (c == 0x1e9b)
+	return 0x1e60;
+    }
+  else if (c < 0x2000)
+    {
+      
+      if ((c >= 0x1f00 && c <= 0x1f07) ||
+	  (c >= 0x1f10 && c <= 0x1f15) ||
+	  (c >= 0x1f20 && c <= 0x1f27) ||
+	  (c >= 0x1f30 && c <= 0x1f37) ||
+	  (c >= 0x1f40 && c <= 0x1f45) ||
+	  (c >= 0x1f60 && c <= 0x1f67) ||
+	  (c >= 0x1f80 && c <= 0x1f87) ||
+	  (c >= 0x1f90 && c <= 0x1f97) ||
+	  (c >= 0x1fa0 && c <= 0x1fa7))
+	return (c + 0x08);
+
+      if (c >= 0x1f51 && c <= 0x1f57 && (c & 0x01))
+	return (c + 0x08);
+      
+      if (c >= 0x1f70 && c <= 0x1ff3)
+	{
+	  wint_t k;
+	  switch (c)
+	    {
+	    case 0x1fb0:
+	      k = 0x1fb8;
+	      break;
+	    case 0x1fb1:
+	      k = 0x1fb9;
+	      break;
+	    case 0x1f70:
+	      k = 0x1fba;
+	      break;
+	    case 0x1f71:
+	      k = 0x1fbb;
+	      break;
+	    case 0x1fb3:
+	      k = 0x1fbc;
+	      break;
+	    case 0x1fbe:
+	      k = 0x0399;
+	      break;
+	    case 0x1f72:
+	      k = 0x1fc8;
+	      break;
+	    case 0x1f73:
+	      k = 0x1fc9;
+	      break;
+	    case 0x1f74:
+	      k = 0x1fca;
+	      break;
+	    case 0x1f75:
+	      k = 0x1fcb;
+	      break;
+	    case 0x1fd0:
+	      k = 0x1fd8;
+	      break;
+	    case 0x1fd1:
+	      k = 0x1fd9;
+	      break;
+	    case 0x1f76:
+	      k = 0x1fda;
+	      break;
+	    case 0x1f77:
+	      k = 0x1fdb;
+	      break;
+	    case 0x1fe0:
+	      k = 0x1fe8;
+	      break;
+	    case 0x1fe1:
+	      k = 0x1fe9;
+	      break;
+	    case 0x1f7a:
+	      k = 0x1fea;
+	      break;
+	    case 0x1f7b:
+	      k = 0x1feb;
+	      break;
+	    case 0x1fe5:
+	      k = 0x1fec;
+	      break;
+	    case 0x1f78:
+	      k = 0x1ff8;
+	      break;
+	    case 0x1f79:
+	      k = 0x1ff9;
+	      break;
+	    case 0x1f7c:
+	      k = 0x1ffa;
+	      break;
+	    case 0x1f7d:
+	      k = 0x1ffb;
+	      break;
+	    case 0x1ff3:
+	      k = 0x1ffc;
+	      break;
+	    default:
+	      k = 0;
+	    }
+	  if (k != 0)
+	    return k;
+	}
+    }
+  else 
+    {
+      if (c >= 0x2170 && c <= 0x217f)
+	return (c - 0x10);
+      
+      if (c >= 0x24d0 && c <= 0x24e9)
+	return (c - 0x1a);
+      
+      if (c >= 0xff41 && c <= 0xff5a)
+	return (c - 0x20);
+      
+      if (c >= 0x10428 && c <= 0x1044d)
+	return (c - 0x28);
+    }
+  return c;
+#else
   return (c < 0x00ff ? (wint_t)(toupper ((int)c)) : c);
+#endif /* _MB_CAPABLE */
 }
 

-- 
Corinna Vinschen
Cygwin Project Co-Leader
Red Hat



More information about the Newlib mailing list